/* PinkFlow — estilos (antes dentro de index.html) */
  /* ============================================================
     RESET & BASE
  ============================================================ */
  *, *::before, *::after { box-sizing: border-box; }

  /* ---------- Barras de scroll ----------
     Las nativas de Windows (canal gris de 17px con flechitas arriba y abajo)
     rompen cualquier pantalla cuidada. Aquí se unifican en una sola forma para
     toda la app: fina, redondeada, sin flechas, sobre fondo transparente y
     visible solo cuando hace falta. En móvil el sistema ya las oculta. */
  * {
    scrollbar-width: thin;
    scrollbar-color: color-mix(in srgb, currentColor 22%, transparent) transparent;
  }
  ::-webkit-scrollbar { width: 9px; height: 9px; background: transparent; }
  ::-webkit-scrollbar-track { background: transparent; }
  ::-webkit-scrollbar-thumb {
    background: color-mix(in srgb, currentColor 20%, transparent);
    border-radius: 999px;
    border: 2.5px solid transparent;
    background-clip: padding-box;
  }
  ::-webkit-scrollbar-thumb:hover { background: color-mix(in srgb, currentColor 34%, transparent); background-clip: padding-box; }
  /* Las flechitas de los extremos y el cuadradito de la esquina: fuera. */
  ::-webkit-scrollbar-button { display: none; width: 0; height: 0; }
  ::-webkit-scrollbar-corner { background: transparent; }
  html, body { margin: 0; padding: 0; touch-action: pan-x pan-y; }
  body {
    font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
    color: var(--text-primary);
    background: var(--bg-grad);
    min-height: 100vh;
    -webkit-font-smoothing: antialiased;
    transition: background .4s ease, color .4s ease;
    padding-bottom: calc(86px + env(safe-area-inset-bottom));
  }
  h1,h2,h3,p,ul,li { margin: 0; padding: 0; list-style: none; }
  button { font-family: inherit; cursor: pointer; border: none; background: none; color: inherit; }
  input, select { font-family: inherit; color: var(--text-primary); }
  a { color: inherit; }

  /* Evita el halo violeta/azul por defecto de algunos navegadores móviles al
     tocar botones, y usa el color de acento elegido para el foco. */
  * { -webkit-tap-highlight-color: transparent; }
  button, a, input, select { outline: none; }
  button:focus-visible, a:focus-visible, input:focus-visible, select:focus-visible, .color-swatch:focus-visible {
    outline: 2px solid var(--accent); outline-offset: 2px;
  }

  /* ============================================================
     THEME TOKENS
  ============================================================ */
  /* ============================================================
     THEME TOKENS — paleta PinkFlow
     Petróleo #123C46 · Porcelana #EFE4DA · Sombra #D8C9BC · Dorado #E0AF7C
     Terracota #C9694A · Morado #2C1E3F · Arena #EFE7DE · Verde #3F7D6E
     Seis acentos (terracota por defecto, verde, petróleo, rosa, morado,
     negro) y cada uno con su versión oscura y clara. Las superficies son
     planas: --bg-grad ahora es un color liso derivado de --surface.
  ============================================================ */
  :root[data-theme="dark"] {
    color-scheme: dark;
    --surface: #221713;
    --bg-grad: var(--surface);
    --accent: #F2F2F2;
    --accent-strong: #FFFFFF;
    --on-accent: #111111;
    --card-bg: rgba(239,228,218,0.055);
    --card-bg-strong: rgba(239,228,218,0.10);
    --modal-bg: color-mix(in srgb, var(--surface) 72%, transparent);
    --card-border: rgba(239,228,218,0.14);
    --text-primary: #EFE4DA;
    --text-secondary: rgba(239,228,218,0.62);
    --green: #5FA491;
    --red: #E5705F;
    --amber: #E0AF7C;
    --orange: #D98A52;
    --track: rgba(239,228,218,0.10);
    --shadow: 0 24px 60px -26px rgba(0,0,0,0.62);
    --input-bg: rgba(239,228,218,0.07);
    --overlay: rgba(8,20,24,0.62);
    --bar-bg: color-mix(in srgb, var(--surface) 88%, transparent);
  }
  :root[data-theme="light"] {
    color-scheme: light;
    --surface: #EFE7DE;
    --bg-grad: var(--surface);
    --card-bg: rgba(255,255,255,0.60);
    --card-bg-strong: rgba(255,255,255,0.85);
    --modal-bg: rgba(255,255,255,0.88);
    --card-border: rgba(18,60,70,0.10);
    --text-primary: #123C46;
    --text-secondary: #6F6259;
    --accent: #111111;
    --accent-strong: #000000;
    --green: #2F6B5C;
    --red: #C0442F;
    --amber: #9A6A22;
    --orange: #C0442F;
    --track: rgba(18,60,70,0.10);
    --shadow: 0 20px 45px -28px rgba(18,60,70,0.30);
    --input-bg: rgba(18,60,70,0.05);
    --overlay: rgba(18,60,70,0.32);
    --bar-bg: color-mix(in srgb, var(--surface) 86%, transparent);
  }

  /* ---------- Acentos ---------- */
  /* (28 sep, v62) Tres colores de marca: Verde (por defecto), Rosa (el del
     cerdito) y Blanco y negro (minimalista, con detalles verdes y rosas). */
  :root[data-theme="dark"][data-accent="verde"] {
    --surface: #10231F;
    --accent: #3F7D6E;
    --accent-strong: #7FBCAC;
    --green: #7FBCAC;
  }
  :root[data-theme="dark"][data-accent="rosa"] {
    /* (v63) Rosa cerdito: el del logo. Texto de botones en rosa muy oscuro. */
    --surface: #1E1518;
    --accent: #F2A6B4;
    --accent-fill: #F2A6B4;
    --on-accent: #5A1630;
    --accent-strong: #F2A6B4;
    --green: #7FBCAC;
  }
  :root[data-theme="dark"][data-accent="negro"] {
    --surface: #0B0B0B;
    --accent: #F2F2F2;
    --accent-strong: #FFFFFF;
    --on-accent: #111111;
    --green: #7FBCAC;
    --card-bg: rgba(255,255,255,0.05);
    --card-bg-strong: rgba(255,255,255,0.10);
    --card-border: rgba(255,255,255,0.12);
    --text-primary: #F5F5F5;
    --text-secondary: rgba(245,245,245,0.60);
    --input-bg: rgba(255,255,255,0.06);
    --track: rgba(255,255,255,0.10);
    --overlay: rgba(0,0,0,0.66);
    --amber: #E6C08F;
  }

  :root[data-theme="light"][data-accent="verde"] {
    --text-primary: #16312B;
    --surface: #EAEEE9;
    --accent: #2F6B5C;
    --accent-strong: #1F4E42;
    --green: #2F6B5C;
  }
  :root[data-theme="light"][data-accent="rosa"] {
    /* (v63) Rosa cerdito: rellenos en el rosa del logo con texto rosa muy
       oscuro; cifras y enlaces en un rosa fuerte que se lee sobre claro. */
    --surface: #FFF4F6;
    --accent: #B8395F;
    --accent-fill: #F2A6B4;
    --on-accent: #8A2346;
    --accent-strong: #9E2F52;
    --text-primary: #2B1A20;
    --text-secondary: #76636A;
    --green: #2F6B5C;
    --card-border: rgba(138,35,70,0.10);
  }
  :root[data-theme="light"][data-accent="negro"] {
    --surface: #FFFFFF;
    --accent: #111111;
    --accent-strong: #000000;
    --green: #2F6B5C;
    --card-bg: #F6F6F5;
    --card-bg-strong: #EDEDEC;
    --modal-bg: rgba(255,255,255,0.96);
    --card-border: rgba(0,0,0,0.08);
    --text-primary: #111111;
    --text-secondary: #6B6B6B;
    --input-bg: rgba(0,0,0,0.04);
    --track: rgba(0,0,0,0.08);
    --shadow: 0 18px 40px -28px rgba(0,0,0,0.25);
    --overlay: rgba(0,0,0,0.30);
    --amber: #9A6A22;
  }
  /* Blanco y negro: los detallitos de marca (nombre y cerdito en rosa). */
  :root[data-accent="negro"] .brandbar-id .brand-name { color: #D9728F; }

  /* ============================================================
     LAYOUT
  ============================================================ */
  .app {
    max-width: 760px;
    margin: 0 auto;
    padding: calc(58px + env(safe-area-inset-top)) 18px 0;
    display: flex;
    flex-direction: column;
    gap: 18px;
  }

  /* Fuera de Inicio la cabecera se recoge: sin barra de marca ni saludo, para
     que la pantalla respire y el contenido empiece arriba. Los botones de
     acción (ocultar importes, tema) se quedan alineados a la derecha. */
  body.compact-head .topbar { display: none; }
  body.compact-head .app { padding-top: calc(76px + env(safe-area-inset-top)); }
  /* La barra de marca pasa a ser PERMANENTE: es la que lleva el selector de
     mes, y el mes tiene que ser el mismo contexto en las cuatro pestañas.
     Antes se ocultaba en Inicio (ahí manda .topbar) y se turnaban — por eso
     ningún sitio de la cabecera servía para algo global. */
  body:not(.compact-head) .app { padding-top: calc(76px + env(safe-area-inset-top)); }

  .card {
    background: var(--card-bg);
    border: 1px solid var(--card-border);
    border-radius: 26px;
    backdrop-filter: blur(24px) saturate(160%);
    -webkit-backdrop-filter: blur(24px) saturate(160%);
    box-shadow: var(--shadow);
    padding: 22px;
    animation: cardIn .5s cubic-bezier(.2,.8,.3,1) both;
  }
  @keyframes cardIn {
    from { opacity: 0; transform: translateY(14px); }
    to { opacity: 1; transform: translateY(0); }
  }

  /* ---------- Topbar ---------- */
  .topbar { display: flex; align-items: center; justify-content: space-between; padding-top: 4px; flex-wrap: wrap; gap: 10px; }
  .topbar-title h1 { font-size: 22px; font-weight: 800; letter-spacing: -0.02em; }
  .topbar-title h1 span { color: var(--accent-strong); font-weight: 800; }
  .topbar-title .subtitle { color: var(--text-secondary); font-size: 13.5px; margin-top: 2px; }
  .subtitle-row { display: flex; align-items: center; gap: 8px; margin: 4px 0 0; flex-wrap: wrap; }
  .prep-next-month-btn {
    flex: 0 0 auto; border: none; border-radius: 18px; padding: 4px 10px;
    background: var(--accent-soft, var(--input-bg)); color: var(--accent-strong, var(--text-secondary));
    font-size: 11px; font-weight: 650; display: flex; align-items: center; gap: 4px; line-height: 1;
  }
  .topbar-actions { display: flex; gap: 10px; }
  .icon-btn {
    width: 42px; height: 42px; border-radius: 12px;
    background: var(--card-bg-strong); border: 1px solid var(--card-border);
    font-size: 17px; display: flex; align-items: center; justify-content: center;
    transition: transform .15s ease, background .2s ease;
  }
  .icon-btn:hover { transform: translateY(-1px) scale(1.04); }
  .icon-btn:active { transform: scale(.94); }
  /* Pinky vive junto al ojo y la luna, pero se lee como "alguien": ahora va
     dentro de un globo de conversación (burbuja + dos colitas), para que se
     distinga de los toggles de al lado y se entienda que se le habla. */
  .davide-btn {
    padding: 0; overflow: visible; position: relative;
    border-radius: 15px 15px 15px 7px;
    background: color-mix(in srgb, var(--accent) 16%, var(--card-bg-strong));
    border: 1px solid color-mix(in srgb, var(--accent) 45%, transparent);
    box-shadow: 0 4px 12px -6px rgba(0,0,0,.35);
  }
  .davide-btn::before, .davide-btn::after {
    content: ""; position: absolute; border-radius: 50%;
    background: color-mix(in srgb, var(--accent) 16%, var(--card-bg-strong));
    border: 1px solid color-mix(in srgb, var(--accent) 45%, transparent);
  }
  .davide-btn::after { width: 9px; height: 9px; left: 1px; bottom: -4px; }
  .davide-btn::before { width: 5px; height: 5px; left: -3px; bottom: -8px; }
  .davide-btn:hover { background: color-mix(in srgb, var(--accent) 26%, var(--card-bg-strong)); border-color: color-mix(in srgb, var(--accent) 60%, transparent); }
  .davide-btn img { width: 30px; height: 30px; margin: auto; border-radius: 50%; object-fit: cover; display: block; }
  /* Iconos SVG (ojo / ojo tachado) dentro de botones de icono */
  .icon-btn svg { width: 22px; height: 22px; display: block; }

  /* La ocultación de importes ahora se hace por texto (símbolo + guiones,
     ej. "----- €") directamente en el formateador, no con CSS. */

  /* ---------- Brand bar (identidad de la app, fija arriba del todo) ---------- */
  .brandbar {
    position: fixed; top: 0; left: 0; right: 0; z-index: 85;
    display: flex; align-items: center; justify-content: space-between; gap: 12px;
    padding: 9px 16px;
    padding-top: calc(9px + env(safe-area-inset-top));
    background: var(--bar-bg);
    backdrop-filter: blur(18px) saturate(160%); -webkit-backdrop-filter: blur(18px) saturate(160%);
    border-bottom: 1px solid var(--card-border);
  }
  .brandbar-id { display: flex; align-items: center; gap: 9px; min-width: 0; padding: 4px 8px 4px 4px; margin-left: -4px; border-radius: 12px; transition: background .18s ease, transform .15s ease; }
  .brandbar-id:hover { background: var(--card-bg-strong); }
  .brandbar-id:active { transform: scale(.97); }
  .brandbar-id img { width: 34px; height: 34px; display: block; flex: none; }
  .brandbar-id .brand-name {
    font-size: 15px; font-weight: 800; letter-spacing: -0.01em; color: var(--accent-strong);
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  }

  /* ---------- Modo invitado (probar sin cuenta) ----------
     Solo se ve si NO hay sesión y el usuario eligió "probar sin cuenta".
     Un usuario con cuenta nunca entra en este estado, así que no ve nada. */
  #guestBar {
    position: fixed; top: 0; left: 0; right: 0; z-index: 87; display: none;
    align-items: center; justify-content: center; gap: 10px;
    height: calc(36px + env(safe-area-inset-top)); padding: 0 12px;
    padding-top: env(safe-area-inset-top); box-sizing: border-box;
    background: color-mix(in srgb, var(--accent) 22%, var(--card-bg-strong));
    border-bottom: 1px solid var(--card-border);
    backdrop-filter: blur(18px) saturate(160%); -webkit-backdrop-filter: blur(18px) saturate(160%);
  }
  #guestBar .gb-text {
    font-size: 12.5px; font-weight: 650; color: var(--text-primary);
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  }
  #guestBar .gb-text b { font-weight: 800; }
  #guestBar .gb-cta {
    flex: 0 0 auto; padding: 5px 12px; font-size: 12.5px; font-weight: 750; border-radius: 999px;
  }
  body.is-guest #guestBar { display: flex; }
  body.is-guest .brandbar { top: calc(36px + env(safe-area-inset-top)); padding-top: 9px; }
  body.is-guest .app,
  body.is-guest.compact-head .app { padding-top: calc(112px + env(safe-area-inset-top)); }
  .auth-alt {
    margin-top: 18px; padding-top: 16px; border-top: 1px solid var(--card-border);
    display: flex; flex-direction: column; gap: 6px; align-items: center; text-align: center;
  }
  .auth-alt button {
    font-size: 13.5px; font-weight: 750; color: var(--accent-strong); padding: 6px 4px;
  }
  .auth-alt p { font-size: 11px; color: var(--text-secondary); line-height: 1.45; margin: 0; }
  .auth-guest-note {
    display: none; margin-bottom: 16px; padding: 12px 14px; border-radius: 12px;
    background: color-mix(in srgb, var(--accent) 16%, transparent);
    border: 1px solid color-mix(in srgb, var(--accent) 34%, transparent);
    font-size: 13.5px; line-height: 1.45; color: var(--text-primary);
  }
  body.is-guest .auth-guest-note { display: block; }
  body.is-guest #authBackToGuest { display: inline-flex; }
  #authBackToGuest { display: none; }
  .dv-signup-card {
    margin: 4px 0 2px; padding: 14px; border-radius: 18px;
    background: var(--card-bg-strong); border: 1px solid var(--card-border);
    display: flex; flex-direction: column; gap: 10px;
  }
  .dv-signup-card p { font-size: 13.5px; line-height: 1.45; color: var(--text-secondary); margin: 0; }

  /* ---------- Tabs (barra de navegación inferior) ---------- */
  .tabbar {
    position: fixed; left: 50%; transform: translateX(-50%);
    bottom: calc(10px + env(safe-area-inset-bottom)); z-index: 90;
    display: flex; align-items: center; gap: 2px;
    width: calc(100% - 14px); max-width: 680px;
    padding: 8px 10px; border-radius: 26px;
    background: var(--bar-bg);
    backdrop-filter: blur(18px) saturate(160%); -webkit-backdrop-filter: blur(18px) saturate(160%);
    border: 1px solid var(--card-border);
    box-shadow: 0 10px 30px -12px rgba(0,0,0,.45);
  }
  /* Desenfoque progresivo debajo de la barra flotante (estilo Instagram): el
     contenido sigue viéndose asomar, pero difuminado, así nada compite con la
     barra. Tres capas de blur creciente + máscara que se desvanece hacia arriba.
     No intercepta toques (pointer-events:none) y no tapa nada: solo difumina. */
  .tabbar-blur {
    position: fixed; left: 0; right: 0; bottom: 0; z-index: 88;
    height: calc(104px + env(safe-area-inset-bottom));
    pointer-events: none;
    backdrop-filter: blur(3px); -webkit-backdrop-filter: blur(3px);
    -webkit-mask-image: linear-gradient(to top, #000 0%, #000 55%, transparent 100%);
    mask-image: linear-gradient(to top, #000 0%, #000 55%, transparent 100%);
  }
  .tabbar-blur::before, .tabbar-blur::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; }
  .tabbar-blur::before {
    height: 72%;
    backdrop-filter: blur(9px); -webkit-backdrop-filter: blur(9px);
    -webkit-mask-image: linear-gradient(to top, #000 0%, #000 45%, transparent 100%);
    mask-image: linear-gradient(to top, #000 0%, #000 45%, transparent 100%);
  }
  .tabbar-blur::after {
    height: 44%;
    backdrop-filter: blur(20px) saturate(140%); -webkit-backdrop-filter: blur(20px) saturate(140%);
    -webkit-mask-image: linear-gradient(to top, #000 0%, #000 40%, transparent 100%);
    mask-image: linear-gradient(to top, #000 0%, #000 40%, transparent 100%);
  }
  /* Con un modal, la pantalla de ahorro o el onboarding encima, la barra no
     está: el velo tampoco debe estar. */
  body:has(.modal-overlay.active) .tabbar-blur,
  body:has(#onboardingOverlay:not([style*="display:none"])) .tabbar-blur { display: none; }

  .tab-btn {
    flex: 1 1 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px;
    padding: 0; border-radius: 999px; font-size: 11px; font-weight: 700; min-width: 0;
    color: var(--text-secondary); transition: color .2s ease, background .2s ease; white-space: nowrap;
  }
  /* La etiqueta solo aparece en la pestaña donde estás: la barra queda
     compacta y no se pierde el nombre de la sección. */
  .tab-btn { flex: 1 1 0; }
  .tab-btn .tab-icon { font-size: 22px; line-height: 1; opacity: .5; transition: opacity .2s ease, transform .2s ease; }
  .tab-btn .tab-label { max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
  /* El resalte de la activa era una tarjeta de borde a borde. Ahora es un
     pastillín que abraza solo el icono: el color y el peso de la etiqueta ya
     dicen dónde estás, y la barra queda compacta. */
  .tab-btn.active { color: var(--accent-strong); background: transparent; }
  .tab-btn .tab-icon { width: 100%; max-width: 62px; height: 34px; display: grid; place-items: center; border-radius: 999px; }
  .tab-btn.active .tab-icon { background: color-mix(in srgb, var(--accent) 20%, transparent); }
  .tab-btn.active .tab-icon { opacity: 1; }
  .tab-btn:not(.active):hover { color: var(--text-primary); }
  .tab-btn:not(.active):hover .tab-icon { opacity: .8; }
  /* El "+" vive en la barra, en el centro: sitio fijo, siempre el mismo, y a
     la misma distancia del pulgar que las pestañas. El flotante arrastrable
     queda en el DOM (oculto) con su lógica intacta. */
  .tab-btn.tab-plus { flex: 0 0 auto; padding: 0 4px; }
  .tab-btn.tab-plus .tab-plus-mark {
    width: 50px; height: 50px; border-radius: 999px; display: grid; place-items: center;
    font-size: 28px; font-weight: 700; line-height: 1;
    background: var(--accent-fill, var(--accent)); color: var(--surface);
    box-shadow: 0 6px 16px -8px color-mix(in srgb, var(--accent) 80%, transparent);
    transition: transform .15s ease, box-shadow .2s ease;
  }
  .tab-btn.tab-plus:active .tab-plus-mark { transform: scale(.94); }
  .tab-btn.tab-plus:hover .tab-plus-mark { box-shadow: 0 8px 20px -8px color-mix(in srgb, var(--accent) 90%, transparent); }
  .tab-btn.tab-plus.active { background: transparent; }
  @media (max-width: 360px) { .tab-btn.tab-plus .tab-plus-mark { width: 42px; height: 42px; font-size: 22px; } }
  .tab-panel { display: none; flex-direction: column; gap: 18px; }
  .tab-panel.active { display: flex; }
  @media (max-width: 480px) {
    .tab-btn { font-size: 9.5px; padding: 6px 1px; gap: 2px; }
    .tab-btn .tab-icon { font-size: 22px; }
  }
  @media (max-width: 360px) {
    .tab-btn { font-size: 8.5px; }
    .tab-btn .tab-icon { font-size: 17px; }
  }

  /* ---------- Home quick summary ---------- */
  .home-hero { display: flex; flex-direction: column; gap: 4px; margin-bottom: 10px; }
  .home-hero .hero-label { font-size: 13.5px; color: var(--text-secondary); font-weight: 600; }
  .home-hero .hero-value { font-size: 40px; font-weight: 800; letter-spacing: -0.03em; }
  .home-hero .hero-value.positive { color: var(--green); }
  .home-hero .hero-value.negative { color: var(--red); }
  .home-hero .hero-value.warning { color: var(--amber); }
  .home-subrow { display: flex; justify-content: space-between; gap: 12px; margin-top: 14px; }
  .home-subrow > div { display: flex; flex-direction: column; gap: 2px; }
  .home-subrow .label { font-size: 12.5px; color: var(--text-secondary); text-transform: uppercase; letter-spacing: .04em; }
  .home-subrow .value { font-size: 17px; font-weight: 750; }
  /* Portada más limpia: presupuesto/gastado en una línea pequeña y gris, y el
     dinero prestado como nota al pie bajo el número grande, sin competir con él. */
  /* Veredicto de Analizar: es texto, no un importe — no usa el cuerpo del
     número grande de Inicio. */
  /* Barra apilada: el mes entero en una sola línea (fijos, día a día, ahorro,
     libre). Se lee de un golpe, sin párrafos. */
  .an-bar { display: flex; height: 14px; border-radius: 999px; overflow: hidden; background: var(--track); margin-top: 16px; }
  .an-bar > span { display: block; height: 100%; }
  .an-bar-legend { display: flex; flex-wrap: wrap; gap: 6px 18px; margin-top: 12px; font-size: 12.5px; color: var(--text-secondary); }
  .an-leg { display: flex; align-items: center; gap: 6px; }
  .an-leg i { width: 9px; height: 9px; border-radius: 999px; display: block; flex: none; }
  .an-leg strong { color: var(--text-primary); font-weight: 750; font-variant-numeric: tabular-nums; }
  .an-verdict { font-size: 28px; font-weight: 800; letter-spacing: -0.01em; line-height: 1.15; }
  .an-verdict.positive { color: var(--green); }
  .an-verdict.warning { color: var(--accent-strong); }
  .an-verdict.negative { color: var(--red); }
  .hero-facts { display: flex; flex-wrap: wrap; gap: 3px 20px; margin-top: 12px; }
  .hero-fact { font-size: 13.5px; color: var(--text-secondary); font-weight: 500; }
  .hero-fact .value { font-size: 13.5px; color: var(--text-secondary); font-weight: 700; }
  .hero-note { font-size: 12.5px; color: var(--text-secondary); font-weight: 500; margin: 7px 0 0; opacity: .95; }

  /* Tarjetitas de ayuda contextual (una vez por sección). */
  .tip-card {
    display: flex; gap: 10px; align-items: flex-start;
    background: color-mix(in srgb, var(--accent) 12%, var(--card-bg-strong));
    border: 1px solid color-mix(in srgb, var(--accent) 35%, var(--card-border));
    border-radius: 12px; padding: 12px 14px; margin-bottom: 12px;
    animation: itemIn .3s cubic-bezier(.2,.8,.3,1) both;
  }
  .tip-card.tip-closing { animation: itemOut .24s ease forwards; }
  .tip-emoji { font-size: 22px; line-height: 1.25; flex: 0 0 auto; }
  .tip-main { flex: 1; min-width: 0; }
  .tip-text { font-size: 13.5px; line-height: 1.45; color: var(--text-primary); margin: 0 0 10px; }
  .tip-ok {
    display: inline-block; width: auto; padding: 7px 16px; border-radius: 12px;
    font-size: 12.5px; font-weight: 700; background: var(--accent-fill, var(--accent)); color: var(--on-accent, #fff);
    transition: transform .15s ease, filter .15s ease;
  }
  .tip-ok:hover { filter: brightness(1.08); }
  .tip-ok:active { transform: scale(.96); }

  /* Pasos de "Cargar gastos solos": se tocan para marcarlos como hechos. */
  .atajo-step {
    display: grid; grid-template-columns: 26px 1fr 22px; gap: 11px; align-items: start;
    width: 100%; text-align: left; padding: 13px 0; border-bottom: 1px solid var(--card-border);
    background: transparent;
  }
  .atajo-step .atajo-num {
    width: 26px; height: 26px; border-radius: 50%; display: grid; place-items: center;
    font-size: 13.5px; font-weight: 800; color: var(--accent-strong);
    background: color-mix(in srgb, var(--accent) 20%, transparent);
  }
  /* Todo el paso es un solo botón: el circulito y el texto no interceptan el
     toque, así tocar cualquier parte lo tacha. */
  .atajo-step > * { pointer-events: none; }
  .atajo-step .atajo-body { min-width: 0; display: flex; flex-direction: column; gap: 4px; }
  .atajo-step .atajo-body b { font-size: 13.5px; font-weight: 750; }
  .atajo-step .atajo-body span { font-size: 13.5px; line-height: 1.45; color: var(--text-secondary); }
  .atajo-step .atajo-body code { font-size: 12.5px; }
  .atajo-step .atajo-check {
    width: 22px; height: 22px; border-radius: 50%; display: grid; place-items: center;
    border: 1.5px solid var(--card-border); color: transparent; font-size: 12.5px; font-weight: 800;
    transition: background .2s ease, color .2s ease, border-color .2s ease;
  }
  .atajo-step.done .atajo-check { background: var(--green, #3F8F6B); border-color: transparent; color: #fff; }
  .atajo-step.done .atajo-body b { text-decoration: line-through; opacity: .6; }
  .atajo-step.done .atajo-num { opacity: .5; }

  /* "Cómo funciona": lista de secciones en Ajustes. */
  .help-item { display: flex; gap: 12px; align-items: flex-start; padding: 13px 0; border-bottom: 1px solid var(--card-border); }
  .help-item:last-child { border-bottom: none; }
  .help-item .help-emoji { font-size: 22px; flex: 0 0 auto; line-height: 1.2; }
  .help-item .help-body { min-width: 0; }
  .help-item .help-body h4 { font-size: 13.5px; font-weight: 750; margin: 0 0 3px; }
  .help-item .help-body p { font-size: 13.5px; line-height: 1.45; color: var(--text-secondary); margin: 0; }
  a.settings-nav-row { text-decoration: none; color: inherit; }
  .support-mail-btn {
    display: inline-flex; align-items: center; gap: 8px; width: auto; margin-top: 4px;
    padding: 11px 18px; border-radius: 12px; text-decoration: none;
    background: var(--accent-fill, var(--accent)); color: var(--on-accent, #fff); border: 1px solid var(--accent);
    font-size: 13.5px; font-weight: 700;
  }
  .support-mail-btn:hover { filter: brightness(1.06); }
  .support-mail-btn:active { transform: scale(.97); }

  .daily-allowance-card { display: flex; flex-direction: column; gap: 6px; }
  .daily-allowance-row .label { font-size: 12.5px; color: var(--text-secondary); font-weight: 600; display: block; margin-bottom: 2px; }
  .daily-allowance-value { font-size: 15px; font-weight: 700; display: block; color: var(--text-secondary); }
  .daily-allowance-value.negative { color: var(--red); }
  .daily-allowance-value.warning { color: var(--amber); }
  .daily-allowance-toggle {
    display: flex; align-items: center; gap: 4px; font-size: 12.5px; font-weight: 700;
    color: var(--accent-strong); margin-top: 4px; align-self: flex-start;
  }
  .daily-allowance-chevron { transition: transform .2s ease; }
  .daily-allowance-chevron.open { transform: rotate(180deg); }

  .current-week-card { display: flex; flex-direction: column; gap: 10px; cursor: pointer; }
  .current-week-head { display: flex; align-items: center; justify-content: space-between; }
  .current-week-head h3 { font-size: 15px; font-weight: 750; }
  .current-week-head span { font-size: 12.5px; color: var(--text-secondary); }
  .savings-total { font-size: 28px; font-weight: 800; color: var(--accent-strong); white-space: nowrap; }
  .savings-sub { font-size: 12.5px; color: var(--text-secondary); margin: 8px 0 0; }
  .savings-chevron { color: var(--text-secondary); font-size: 22px; line-height: 1; }
  /* ---------- Banner de ahorro (Inicio) ---------- */
  /* El fondo es el acento del tema oscurecido: mismo color, sin mezclar familias,
     así funciona igual en los seis temas y en claro/oscuro. */
  .savings-banner {
    position: relative; overflow: hidden; cursor: pointer;
    border-radius: 18px; padding: 12px 16px; min-height: 0;
    border: 1px solid color-mix(in srgb, var(--accent) 40%, transparent);
    background: linear-gradient(115deg,
      color-mix(in srgb, var(--accent) 34%, #101619) 0%,
      color-mix(in srgb, var(--accent) 14%, #0A0F11) 100%);
    box-shadow: var(--shadow);
    transition: transform .2s cubic-bezier(.2,.8,.3,1), box-shadow .2s ease;
    animation: cardIn .5s cubic-bezier(.2,.8,.3,1) both;
  }
  .savings-banner:hover { transform: translateY(-4px) scale(1.008); box-shadow: var(--shadow), 0 18px 40px -20px color-mix(in srgb, var(--accent) 70%, transparent); }
  .savings-banner .sb-path path { transition: opacity .25s ease; }
  .savings-banner:hover .sb-path path { opacity: .9; animation: sbDash 1.1s linear infinite; }
  @keyframes sbDash { to { stroke-dashoffset: -24; } }
  .savings-banner .sb-pig { transition: transform .25s cubic-bezier(.34,1.56,.64,1); }
  .savings-banner:hover .sb-pig-1 { animation: sbHop .7s ease-in-out .00s infinite; }
  .savings-banner:hover .sb-pig-2 { animation: sbHop .7s ease-in-out .12s infinite; }
  .savings-banner:hover .sb-pig-3 { animation: sbHop .7s ease-in-out .24s infinite; transform: scale(1.08); }
  @keyframes sbHop {
    0%, 100% { transform: translateY(0) rotate(0deg); }
    45% { transform: translateY(-7px) rotate(-5deg); }
  }
  .savings-banner .sb-dot, .savings-banner .sb-dia { transition: transform .3s cubic-bezier(.34,1.56,.64,1), opacity .3s ease; }
  .savings-banner:hover .sb-dot { transform: scale(1.5); }
  .savings-banner:hover .sb-dia { animation: sbSpin 1.6s linear infinite; }
  @keyframes sbSpin { from { transform: rotate(45deg); } to { transform: rotate(405deg); } }
  .savings-banner .sb-ghost { transition: opacity .3s ease, transform .35s cubic-bezier(.2,.8,.3,1); }
  .savings-banner:hover .sb-ghost { opacity: .16; transform: translateY(-4px) scale(1.03); }
  .savings-banner .savings-chevron { transition: transform .2s cubic-bezier(.2,.8,.3,1); }
  .savings-banner:hover .savings-chevron { transform: translateX(5px); }
  @media (prefers-reduced-motion: reduce) {
    .savings-banner:hover .sb-pig-1, .savings-banner:hover .sb-pig-2, .savings-banner:hover .sb-pig-3,
    .savings-banner:hover .sb-dia, .savings-banner:hover .sb-path path { animation: none; }
  }
  .savings-banner:active { transform: scale(.99); }
  .savings-banner .sb-art { position: absolute; inset: 0; color: var(--c-rosa-2); pointer-events: none; }
  .savings-banner .sb-path { position: absolute; inset: 0; width: 100%; height: 100%; }
  .savings-banner .sb-ghost {
    position: absolute; left: 26%; top: -18%; width: 168px; opacity: .10;
  }
  .savings-banner .sb-pig { position: absolute; opacity: .95; }
  .savings-banner .sb-pig-1 { width: 34px; left: 55%; top: 52%; }
  .savings-banner .sb-pig-2 { width: 28px; left: 68%; top: 62%; }
  .savings-banner .sb-pig-3 { width: 44px; left: 81%; top: 46%; }
  .savings-banner .sb-dot, .savings-banner .sb-dia { position: absolute; display: block; }
  .savings-banner .sb-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--c-rosa-2); }
  .savings-banner .sb-dia { width: 9px; height: 9px; transform: rotate(45deg); background: var(--accent-strong); }
  .savings-banner .sb-d1 { left: 52%; top: 44%; }
  .savings-banner .sb-d2 { left: 72%; top: 22%; }
  .savings-banner .sb-d3 { left: 88%; top: 70%; }
  .savings-banner .sb-x1 { left: 58%; top: 16%; }
  .savings-banner .sb-x2 { left: 79%; top: 20%; }
  .savings-banner .sb-x3 { left: 92%; top: 40%; }
  .savings-banner .sb-content { position: relative; z-index: 1; }
  .savings-banner .sb-label {
    font-size: 12.5px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
    color: rgba(239,228,218,.72);
  }
  .savings-banner .savings-head { display: flex; align-items: center; gap: 8px; margin-top: 4px; }
  .savings-banner .savings-total { font-size: 34px; font-weight: 800; color: #EFE4DA; letter-spacing: -0.02em; }
  /* El total del ahorro no se muestra desde fuera: en su lugar va una invitación
     a entrar, en un cuerpo más chico que el importe (que era enorme). */
  .savings-banner .savings-total.is-hidden-amount { font-size: 22px; font-weight: 750; letter-spacing: -0.01em; }
  /* Cerditos que se asoman al pasar el cursor (y al tocar, vía :active).
     Reutilizan los PNG de la marca — nada dibujado a mano. */
  .savings-piggies {
    position: absolute; z-index: 1; right: 14px; bottom: 0; height: 100%;
    display: flex; align-items: flex-end; gap: 6px; pointer-events: none;
  }
  .savings-piggies img {
    width: 40px; height: 40px; object-fit: contain; display: block;
    transform: translateY(115%) rotate(6deg); opacity: 0;
    transition: transform .42s cubic-bezier(.34,1.56,.64,1), opacity .28s ease;
  }
  .savings-banner:hover .savings-piggies img,
  .savings-banner:focus-visible .savings-piggies img,
  .savings-banner:active .savings-piggies img { opacity: 1; }
  .savings-banner:hover .sp1, .savings-banner:focus-visible .sp1, .savings-banner:active .sp1 {
    transform: translateY(-6px) rotate(-8deg); transition-delay: .02s;
    animation: piggyBob 1.9s ease-in-out .5s infinite;
  }
  .savings-banner:hover .sp2, .savings-banner:focus-visible .sp2, .savings-banner:active .sp2 {
    transform: translateY(-20px) rotate(0deg); transition-delay: .09s;
    animation: piggyBob 1.6s ease-in-out .65s infinite;
  }
  .savings-banner:hover .sp3, .savings-banner:focus-visible .sp3, .savings-banner:active .sp3 {
    transform: translateY(-4px) rotate(9deg); transition-delay: .16s;
    animation: piggyBob 2.1s ease-in-out .8s infinite;
  }
  @keyframes piggyBob {
    0%, 100% { margin-bottom: 0; }
    50% { margin-bottom: 7px; }
  }
  @media (max-width: 420px) { .savings-piggies img { width: 32px; height: 32px; } }
  @media (prefers-reduced-motion: reduce) {
    .savings-piggies img { transition: opacity .2s ease; animation: none !important; }
  }
  .savings-banner .savings-chevron { color: rgba(239,228,218,.7); font-size: 22px; }
  .savings-banner .savings-sub { color: rgba(239,228,218,.72); max-width: 52%; }

  /* ---------- Pantalla de Ahorro (página, no modal) ---------- */
  .savings-screen {
    position: fixed; inset: 0; z-index: 86; background: var(--bg-grad);
    overflow-y: auto; -webkit-overflow-scrolling: touch;
    padding: calc(64px + env(safe-area-inset-top)) 16px calc(96px + env(safe-area-inset-bottom));
    animation: overlayIn .2s ease;
  }
  .savings-screen[hidden] { display: none !important; }
  .savings-screen-head { max-width: 640px; margin: 0 auto 18px; }
  .savings-screen-body { max-width: 640px; margin: 0 auto; }
  .savings-screen .huchas-modal {
    max-width: none; width: 100%; max-height: none; overflow: visible;
    animation: none; background: var(--card-bg); border: 1px solid var(--card-border);
    border-radius: 18px; padding: 20px;
  }
  .savings-screen .huchas-modal .settings-close-x { display: none; }
  .huchas-modal { max-width: 540px; width: 100%; }
  .huchas-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; }
  .huchas-head h2 { display: flex; align-items: center; gap: 10px; line-height: 1; }
  /* El PNG del chanchito tiene aire abajo: se sube un poco para que su centro
     óptico coincida con el centro de la palabra. */
  .huchas-mark { width: 34px; height: 34px; display: block; flex: none; align-self: center; object-fit: contain; transform: translateY(-4px); }
  .huchas-summary { background: var(--card-bg-strong); border-radius: 18px; padding: 14px 16px; margin-bottom: 14px; }
  .huchas-total-row { display: flex; align-items: baseline; justify-content: space-between; }
  .huchas-total { font-size: 28px; font-weight: 800; color: var(--accent-strong); }
  .huchas-sum-grid { display: flex; gap: 10px; margin-top: 10px; }
  .huchas-sum-grid > div { flex: 1; background: var(--card-bg); border-radius: 12px; padding: 8px 10px; display: flex; flex-direction: column; gap: 2px; }
  .hs-k { font-size: 11px; color: var(--text-secondary); text-transform: uppercase; letter-spacing: .03em; }
  .hs-v { font-size: 15px; font-weight: 750; }
  .huchas-note { font-size: 11px; color: var(--text-secondary); margin: 10px 0 0; }
  /* ---------- Ahorro: pantalla (antes pop-up) ---------- */
  .savings-screen .ahorro-panel { background: transparent; border: none; padding: 0; }
  .ahorro-panel #huchasList { max-height: none; overflow: visible; gap: 12px; margin-bottom: 0; }
  .ahorro-panel .huchas-summary { background: transparent; padding: 0; margin: 0 0 18px; }
  .ah-hero {
    background: var(--card-bg); border: 1px solid var(--card-border);
    border-radius: 18px; padding: 20px; margin-bottom: 14px;
    display: flex; flex-direction: column; gap: 4px;
  }
  .ah-hero-label { font-size: 12.5px; font-weight: 700; color: var(--text-secondary); }
  .ah-hero-total { font-size: 40px; font-weight: 850; line-height: 1.05; color: var(--accent-strong); font-variant-numeric: tabular-nums; }
  .ah-bar { height: 10px; border-radius: 999px; background: var(--input-bg); overflow: hidden; margin-top: 12px; }
  .ah-bar-fill { display: block; height: 100%; border-radius: 999px; background: var(--accent-fill, var(--accent)); transition: width .35s ease; }
  .ah-legend { display: flex; flex-wrap: wrap; gap: 16px; margin-top: 10px; }
  .ah-leg { display: flex; align-items: center; gap: 7px; font-size: 12.5px; color: var(--text-secondary); }
  .ah-leg strong { color: var(--text-primary); font-weight: 750; font-variant-numeric: tabular-nums; }
  .ah-dot { width: 9px; height: 9px; border-radius: 999px; flex: none; }
  .ah-dot-huchas { background: var(--accent-fill, var(--accent)); }
  .ah-dot-libre { background: var(--input-bg); border: 1px solid var(--card-border); }
  .ah-hero-note { font-size: 11px; color: var(--text-secondary); margin: 12px 0 0; }
  /* Mi caja (Dinero): el total y las partes que lo forman son un solo bloque.
     Antes el hero se cortaba recto arriba de unas tarjetas sueltas y parecía
     roto; ahora las partes van dentro del mismo recuadro, con hairlines. */
  #dineroCajaHero, #cajaCajaHero { border-bottom-left-radius: 0; border-bottom-right-radius: 0; border-bottom: 0; margin-bottom: 0; padding-bottom: 14px; }
  .caja-partes {
    background: var(--card-bg); border: 1px solid var(--card-border);
    border-radius: 18px; overflow: hidden; margin-bottom: 14px;
  }
  /* Solo en Dinero el bloque va pegado al hero (ahí es su continuación). En la
     pantalla propia de Mi caja el hero tiene su propio cierre redondeado. */
  #dineroCuentasList .caja-partes { border-top: 0; border-radius: 0 0 22px 22px; margin-bottom: 0; }
  /* El panel de Dinero es flex con gap: sin este contenedor el gap se metía
     entre el total y sus partes y el hero quedaba cortado en el aire. */
  .caja-bloque { display: block; }
  .caja-bloque #dineroCuentasList { margin: 0; }
  .caja-partes .settings-nav-row {
    background: transparent; border: 0; border-radius: 0; box-shadow: none;
    padding-left: 20px; padding-right: 16px;
  }
  .caja-partes .settings-nav-row + .settings-nav-row {
    border-top: 1px solid color-mix(in srgb, var(--card-border) 65%, transparent);
  }
  .caja-partes .settings-nav-row:hover { background: color-mix(in srgb, var(--accent) 7%, transparent); }
  .ah-actions { display: flex; flex-direction: column; gap: 8px; }
  .ah-action {
    display: grid; grid-template-columns: 24px minmax(0,1fr) auto; align-items: center; column-gap: 12px;
    width: 100%; text-align: left; padding: 13px 15px; border-radius: 18px;
    background: var(--card-bg); border: 1px solid var(--card-border); color: var(--text-primary);
    cursor: pointer; transition: background .18s ease;
  }
  .ah-action:hover { background: var(--input-bg); }
  .ah-action .aa-icon { font-size: 15px; }
  .ah-action .aa-title { font-size: 13.5px; font-weight: 700; }
  .ah-action .aa-sub { font-size: 11px; color: var(--text-secondary); }
  .ah-sec-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 12px; margin: 28px 2px 12px; }
  /* Dentro de una hucha: primero mover dinero (lo único frecuente), el resto
     detrás de "Más opciones". */
  .hu-move { padding: 2px 10px 4px; }
  .hu-amount {
    width: 100%; box-sizing: border-box; padding: 13px 14px; border-radius: 12px;
    border: 1px solid var(--card-border); background: var(--input-bg);
    color: var(--text-primary); font-size: 17px; font-weight: 700; outline: none;
    font-variant-numeric: tabular-nums;
  }
  .hu-chips { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 9px; }
  .hu-chip {
    background: var(--card-bg-strong, var(--input-bg)); border: 1px solid var(--card-border);
    color: var(--text-primary); border-radius: 999px; padding: 7px 13px;
    font-size: 12.5px; font-weight: 700; cursor: pointer;
  }
  .hu-chip:hover { border-color: var(--accent); color: var(--accent-strong); }
  .hu-btns { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
  .hu-btns .btn { flex: 1 1 140px; width: auto; }
  .hu-more-toggle {
    display: block; width: 100%; text-align: left; background: transparent; border: none;
    border-top: 1px solid var(--card-border); margin-top: 14px; padding: 12px 10px 6px;
    color: var(--text-secondary); font-size: 12.5px; font-weight: 750; cursor: pointer;
  }
  .hu-more-toggle:hover { color: var(--accent-strong); }
  .hu-more { padding: 2px 10px 6px; }
  .ah-sec-title { font-size: 13.5px; font-weight: 800; text-transform: uppercase; letter-spacing: .08em; color: var(--accent-strong); margin: 0; }
  .ah-sec-sub { font-size: 11px; color: var(--text-secondary); margin: 1px 0 0; }
  .ah-new-btn {
    flex: none; background: var(--accent-fill, var(--accent)); color: var(--on-accent, #fff); border: none; cursor: pointer;
    font-size: 12.5px; font-weight: 750; padding: 8px 14px; border-radius: 999px;
  }
  .ahorro-panel .huchas-new { border-top: none; padding-top: 0; margin-bottom: 12px; }
  .hucha-pct-line { font-size: 11px; color: var(--text-secondary); margin: 0 10px 8px; }
  .hucha-block-title {
    font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: .08em;
    color: var(--text-secondary); margin: 14px 0 6px;
  }
  .hucha-panel .hucha-block-title:first-child { margin-top: 4px; }
  .hucha-hint { font-size: 11px; color: var(--text-secondary); margin: 6px 0 0; }
  .huchas-empty { font-size: 13.5px; color: var(--text-secondary); text-align: center; padding: 14px 6px; }
  #huchasList { display: flex; flex-direction: column; gap: 10px; max-height: 48vh; overflow-y: auto; overflow-x: hidden; margin-bottom: 14px; }
  #huchasList .hucha-item { min-width: 0; }
  /* La alcancía cerrada es una tarjeta, no una fila de lista: nombre grande,
     saldo grande y el % como pastilla debajo. */
  .hucha-item {
    border: 1px solid var(--card-border); border-radius: 18px; padding: 4px;
    background: var(--card-bg); transition: border-color .2s ease, transform .2s ease, box-shadow .2s ease;
  }
  .hucha-item:hover { border-color: var(--accent); transform: translateY(-1px); }
  .hucha-item.open { box-shadow: 0 10px 26px -18px rgba(0,0,0,.35); }
  .hucha-head { width: 100%; display: flex; align-items: center; gap: 10px; padding: 14px 14px 10px; background: transparent; border: none; cursor: pointer; text-align: left; }
  .hucha-name { font-weight: 750; font-size: 15px; flex: 1; min-width: 0; word-break: break-word; color: var(--text-primary); letter-spacing: -0.01em; }
  .hucha-amount { font-weight: 800; font-size: 17px; color: var(--text-primary); white-space: nowrap; font-variant-numeric: tabular-nums; letter-spacing: -0.02em; }
  .hucha-pct-line {
    display: inline-block; margin: 0 14px 12px; padding: 3px 10px; border-radius: 18px;
    background: var(--input-bg); border: 1px solid var(--card-border);
    font-size: 11px; font-weight: 650; color: var(--text-secondary);
  }
  .hucha-target { color: var(--text-secondary); font-weight: 600; }
  .hucha-chevron { color: var(--text-secondary); font-size: 12.5px; transition: transform .2s ease; flex: 0 0 auto; }
  .hucha-item.open .hucha-chevron { transform: rotate(180deg); }
  .hucha-item .progress-outer.small { margin: 0 10px; }
  .hucha-pct { font-size: 11px; color: var(--text-secondary); margin: 4px 10px 0; }
  .hucha-panel { padding: 4px 10px 10px; }
  .hucha-row { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin-top: 8px; }
  .hucha-row-k { font-size: 12.5px; color: var(--text-secondary); }
  .hucha-input, .hucha-name-input, .hucha-target-input, .hucha-dest { padding: 8px 10px; border-radius: 12px; border: 1px solid var(--card-border); background: var(--input-bg); color: var(--text-primary); font-size: 13.5px; outline: none; }
  .hucha-input { flex: 1 1 90px; min-width: 70px; }
  .hucha-name-input { flex: 1 1 110px; }
  .hucha-target-input { flex: 1 1 90px; min-width: 70px; }
  .hucha-dest { flex: 1 1 100px; }
  .hucha-panel .btn { padding: 8px 10px; font-size: 12.5px; flex: 0 0 auto; }
  .btn.hucha-withdraw { color: var(--red); }
  .hucha-del { background: transparent; border: none; cursor: pointer; font-size: 15px; padding: 6px; flex: 0 0 auto; }
  .hucha-edit-row { border-top: 1px dashed var(--card-border); padding-top: 10px; margin-top: 10px; }
  .huchas-new { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; border-top: 1px solid var(--card-border); padding-top: 14px; }
  .huchas-new input { flex: 1 1 130px; padding: 10px 12px; border-radius: 12px; border: 1px solid var(--card-border); background: var(--input-bg); color: var(--text-primary); font-size: 13.5px; outline: none; }
  .value.positive { color: var(--green); }
  .value.negative { color: var(--red); }
  .value.warning { color: var(--amber); }

  .progress-outer {
    width: 100%; height: 12px; border-radius: 18px; background: var(--track); overflow: hidden;
  }
  .progress-outer.small { height: 8px; }
  .progress-inner {
    height: 100%; border-radius: 18px; width: 0%;
    background: linear-gradient(90deg, var(--accent), var(--accent-strong));
    transition: width .6s cubic-bezier(.2,.8,.3,1), background .3s ease;
  }
  .progress-inner.warning { background: linear-gradient(90deg, var(--amber), color-mix(in srgb, var(--amber) 62%, #8A5A1E)); }
  .progress-inner.danger { background: linear-gradient(90deg, var(--red), color-mix(in srgb, var(--red) 62%, #7C2418)); }

  /* ---------- Microanimaciones: bounce + confeti ---------- */
  @keyframes bumpAnim {
    0% { transform: scale(1); }
    35% { transform: scale(1.018); }
    65% { transform: scale(0.996); }
    100% { transform: scale(1); }
  }
  .bump { animation: bumpAnim .4s cubic-bezier(.34,1.56,.64,1); }

  .confetti-layer {
    position: fixed; inset: 0; pointer-events: none; z-index: 900; overflow: hidden;
  }
  .confetti-piece {
    position: absolute; top: -12px; width: 8px; height: 13px; border-radius: 2px;
    opacity: .95; animation-name: confettiFall; animation-timing-function: cubic-bezier(.15,.6,.4,1);
    animation-fill-mode: forwards;
  }
  @keyframes confettiFall {
    0% { transform: translate(0, 0) rotate(0deg); opacity: 1; }
    100% { transform: translate(var(--drift), 100vh) rotate(var(--rot)); opacity: 0; }
  }

  /* Las caritas de la app cayendo entre el confeti. */
  .confetti-smiley {
    position: absolute; top: -46px; width: 34px; height: 34px;
    animation-name: smileyFall; animation-timing-function: cubic-bezier(.2,.7,.35,1);
    animation-fill-mode: forwards;
    filter: drop-shadow(0 8px 16px rgba(0,0,0,.28));
  }
  @keyframes smileyFall {
    0%   { transform: translate(0, 0) rotate(0deg) scale(.5); opacity: 0; }
    10%  { transform: translate(calc(var(--drift) * .1), 8vh) rotate(30deg) scale(1.08); opacity: 1; }
    100% { transform: translate(var(--drift), 106vh) rotate(var(--rot)) scale(1); opacity: .92; }
  }

  /* Carita grande que aparece en el centro al cerrar una semana en positivo. */
  .celebrate-hero {
    position: fixed; left: 50%; top: 40%; z-index: 901; pointer-events: none;
    width: 116px; height: 116px; margin: -58px 0 0 -58px;
    animation: heroPop 1.5s cubic-bezier(.2,.8,.3,1) forwards;
    filter: drop-shadow(0 18px 40px rgba(0,0,0,.35));
  }
  @keyframes heroPop {
    0%   { transform: scale(.2) rotate(-24deg); opacity: 0; }
    30%  { transform: scale(1.14) rotate(6deg); opacity: 1; }
    45%  { transform: scale(1) rotate(-3deg); }
    60%  { transform: scale(1.04) rotate(0deg); }
    100% { transform: scale(.86) translateY(-26px); opacity: 0; }
  }
  .celebrate-ring {
    position: fixed; left: 50%; top: 40%; z-index: 900; pointer-events: none;
    width: 116px; height: 116px; margin: -58px 0 0 -58px; border-radius: 50%;
    border: 3px solid var(--green);
    animation: ringOut .9s cubic-bezier(.2,.8,.3,1) forwards;
  }
  @keyframes ringOut {
    0%   { transform: scale(.5); opacity: .85; }
    100% { transform: scale(3.2); opacity: 0; }
  }

  /* ---------- Feedback al tocar ---------- */
  button { transition: transform .13s cubic-bezier(.34,1.56,.64,1); }
  button:active { transform: scale(.955); }
  .tab-btn:active { transform: scale(.93); }
  .card { transition: transform .25s cubic-bezier(.2,.8,.3,1), box-shadow .25s ease, background .3s ease; }
  .expense-item, .fin-item { transition: transform .18s cubic-bezier(.2,.8,.3,1), background .2s ease; }
  /* Sin desplazar ni escalar la fila: al moverse bajo el dedo, el toque en
     editar/borrar caía fuera del botón. El resalte es solo de color. */
  .expense-item:hover, .fin-item:hover {
    background: color-mix(in srgb, var(--accent) 18%, var(--card-bg-strong));
    box-shadow: -4px 0 0 0 var(--accent);
  }

  /* ---------- Bloques que reaccionan al mouse y al dedo ---------- */
  .card {
    position: relative;
    transition: transform .28s cubic-bezier(.2,.9,.25,1.1), box-shadow .28s ease,
                border-color .28s ease, background .28s ease;
  }
  /* Resplandor de acento que se enciende al pasar el mouse por la tarjeta. */
  .card::before {
    content: ""; position: absolute; inset: -1px; border-radius: inherit; pointer-events: none;
    background: radial-gradient(120% 140% at 12% -20%, color-mix(in srgb, var(--accent) 34%, transparent) 0%, transparent 58%);
    opacity: 0; transition: opacity .28s ease;
  }
  .card:hover::before { opacity: 1; }
  .card:hover {
    transform: translateY(-8px) scale(1.014);
    border-color: var(--accent);
    background: var(--card-bg-strong);
    box-shadow: var(--shadow), 0 0 0 1px var(--accent), 0 18px 46px -18px color-mix(in srgb, var(--accent) 60%, transparent);
  }
  .card:active { transform: translateY(-3px) scale(.99); }
  .week-card:hover { transform: translateY(-10px) scale(1.02) rotate(-.35deg); }
  .week-header { transition: background .2s ease, transform .18s cubic-bezier(.2,.8,.3,1); }
  .week-header:hover { background: color-mix(in srgb, var(--accent) 16%, var(--card-bg-strong)); }
  .week-header:active { transform: scale(.97); }
  .week-card:hover .week-chevron { transform: translateY(2px); }
  .fact-card:active { transform: scale(.97); }
  .savings-chevron { transition: transform .2s cubic-bezier(.2,.8,.3,1); }

  .goal-item { transition: transform .18s cubic-bezier(.2,.8,.3,1), background .2s ease, border-color .2s ease; }
  .goal-item:hover {
    transform: translateX(10px) scale(1.02); border-color: var(--accent);
    background: color-mix(in srgb, var(--accent) 16%, var(--card-bg-strong));
    box-shadow: -4px 0 0 0 var(--accent);
  }
  .goal-item:active { transform: translateX(6px) scale(.97); }

  .category-chip { transition: transform .16s cubic-bezier(.34,1.56,.64,1), background .2s ease, border-color .2s ease; }
  .category-chip:hover {
    transform: translateY(-5px) scale(1.07); background: var(--card-bg-strong);
    border-color: var(--accent);
    box-shadow: 0 10px 22px -10px color-mix(in srgb, var(--accent) 70%, transparent);
  }
  .category-chip:active { transform: scale(.9); }

  .percent-row-item, .category-detail-row, .hucha-item, .history-item {
    transition: transform .18s cubic-bezier(.2,.8,.3,1), background .2s ease;
  }
  .percent-row-item:hover, .category-detail-row:hover, .hucha-item:hover, .history-item:hover {
    transform: translateX(8px) scale(1.012);
    background: color-mix(in srgb, var(--accent) 14%, transparent);
  }

  .week-numbers .value { transition: transform .2s cubic-bezier(.34,1.56,.64,1); }
  .week-numbers > div:hover .value { transform: scale(1.16) translateY(-2px); }
  .week-numbers > div { transition: transform .2s cubic-bezier(.34,1.56,.64,1); }
  .week-numbers > div:hover { transform: translateY(-2px); }

  .tab-btn:not(.active):hover { transform: none; }
  .tab-btn.active:hover { filter: brightness(1.06); }
  /* El aro de foco por teclado va hacia DENTRO para que no asome fuera de la barra. */
  .tab-btn:focus-visible { outline-offset: -3px; }
  .btn { transition: transform .14s cubic-bezier(.34,1.56,.64,1), background .2s ease, color .2s ease, border-color .2s ease; }
  .btn:hover {
    transform: translateY(-4px) scale(1.035);
    box-shadow: 0 12px 26px -12px color-mix(in srgb, var(--accent) 75%, transparent);
  }
  .fab { transition: transform .18s cubic-bezier(.34,1.56,.64,1), box-shadow .2s ease; }
  .fab:hover { transform: translateY(-3px) scale(1.05); }
  .fab:active { transform: scale(.93); }

  /* Onda que sale del punto exacto donde tocaste. */
  .ripple {
    position: absolute; border-radius: 50%; pointer-events: none;
    background: currentColor; opacity: .4; transform: scale(0);
    animation: rippleOut .6s cubic-bezier(.2,.8,.3,1) forwards;
  }
  @keyframes rippleOut {
    to { transform: scale(1); opacity: 0; }
  }

  /* Brillo que recorre las barras de progreso cuando cambian. */
  .progress-inner { position: relative; overflow: hidden; }
  .progress-inner::after {
    content: ""; position: absolute; inset: 0;
    background: linear-gradient(100deg, transparent 20%, rgba(255,255,255,.42) 50%, transparent 80%);
    transform: translateX(-100%);
    animation: progressSheen 2.6s ease-in-out .4s infinite;
  }
  @keyframes progressSheen {
    0% { transform: translateX(-100%); }
    45%, 100% { transform: translateX(220%); }
  }

  /* Los números laten un instante cuando cambian de valor. */
  @keyframes valuePop {
    0% { transform: scale(1); }
    40% { transform: scale(1.07); }
    100% { transform: scale(1); }
  }
  .value.flash { animation: valuePop .5s cubic-bezier(.34,1.56,.64,1); }

  /* Entrada del panel al cambiar de pestaña, con las tarjetas en cascada. */
  @keyframes panelIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
  .tab-panel.active.entering { animation: panelIn .32s cubic-bezier(.2,.8,.3,1) both; }
  .tab-panel.active.entering > .card:nth-child(1) { animation-delay: .02s; }
  .tab-panel.active.entering > .card:nth-child(2) { animation-delay: .07s; }
  .tab-panel.active.entering > .card:nth-child(3) { animation-delay: .12s; }
  .tab-panel.active.entering > .card:nth-child(4) { animation-delay: .17s; }
  .tab-panel.active.entering > .card:nth-child(5) { animation-delay: .22s; }
  .tab-panel.active.entering > .card:nth-child(n+6) { animation-delay: .26s; }

  @media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
      animation-duration: .01ms !important; animation-iteration-count: 1 !important;
      transition-duration: .01ms !important;
    }
  }

  /* ---------- On Pace ---------- */
  .onpace-verdict { font-size: 22px; font-weight: 800; margin: 2px 0 4px; }
  .onpace-verdict.ok { color: var(--green); }
  .onpace-verdict.warn { color: var(--amber); }
  .onpace-verdict.orange { color: var(--orange); }
  .onpace-verdict.danger { color: var(--red); }
  .onpace-divider { height: 1px; background: var(--card-border); margin: 14px 0 2px; }
  .onpace-detail-toggle {
    width: 100%; display: flex; align-items: center; justify-content: center; gap: 6px;
    margin-top: 12px; padding: 4px; font-size: 12.5px; font-weight: 700; color: var(--accent-strong);
  }
  .onpace-detail-chevron { font-size: 11px; transition: transform .2s ease; }
  .onpace-detail-chevron.open { transform: rotate(180deg); }
  .onpace-detail {
    margin-top: 10px; padding: 14px; border-radius: 12px; background: var(--input-bg);
  }
  .onpace-detail-intro { font-size: 13.5px; color: var(--text-primary); line-height: 1.5; margin-bottom: 12px; }
  .onpace-projection-label { font-size: 12.5px; font-weight: 700; color: var(--text-secondary); margin-bottom: 6px; }
  .onpace-projection-list { display: flex; flex-direction: column; gap: 5px; padding-left: 18px; }
  .onpace-projection-list li { font-size: 13.5px; color: var(--text-secondary); line-height: 1.45; }
  .savings-sub { font-size: 11px; color: var(--text-secondary); margin-top: 3px; max-width: 340px; }
  .value.savings-positive { color: var(--green); }
  .value.savings-negative { color: var(--red); }

  .chart-card h2, .onpace-card h2 { font-size: 17px; font-weight: 700; margin-bottom: 14px; letter-spacing: -0.01em; }
  .goals-list { display: flex; flex-direction: column; gap: 10px; margin-top: 14px; }
  .goal-item {
    display: flex; align-items: center; justify-content: space-between;
    background: var(--card-bg-strong); border: 1px solid var(--card-border);
    border-radius: 18px; padding: 12px 16px; transition: all .3s ease;
  }
  .goal-item label { display: flex; align-items: center; gap: 12px; cursor: pointer; font-size: 15px; }
  .goal-item input[type="checkbox"] { width: 20px; height: 20px; accent-color: var(--green); cursor: pointer; }
  .goal-item .goal-amount { font-weight: 700; color: var(--text-secondary); }
  .goal-item.done { border-color: color-mix(in srgb, var(--green) 45%, transparent); background: color-mix(in srgb, var(--green) 10%, transparent); }
  .goal-item.editing { border-color: var(--accent-strong); }
  .goal-item.done label span { text-decoration: line-through; color: var(--text-secondary); }
  .goal-item.done .goal-amount { color: var(--green); }
  .goal-item .goal-right { display: flex; align-items: center; gap: 10px; }
  .goal-delete {
    width: 26px; height: 26px; border-radius: 12px; font-size: 12.5px; opacity: .6;
    display: flex; align-items: center; justify-content: center;
    transition: opacity .15s ease, background .15s ease;
  }
  .goal-delete:hover { opacity: 1; background: var(--card-border); }
  .add-goal-row { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 14px; }
  .add-goal-row input {
    background: var(--input-bg); border: 1px solid var(--card-border); border-radius: 12px;
    padding: 10px 14px; font-size: 13.5px; outline: none;
  }
  .add-goal-row input#newGoalLabel { flex: 1 1 180px; }
  .add-goal-row input#newGoalAmount { width: 90px; }
  .add-goal-row input#newGoalInstallments { width: 90px; }
  .empty-goals-msg { font-size: 12.5px; color: var(--text-secondary); padding: 6px 2px; }
  .goal-installment-badge {
    font-size: 11px; font-weight: 700; color: var(--accent-strong); background: var(--input-bg);
    border-radius: 18px; padding: 2px 8px; margin-left: 8px;
  }
  .category-row { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 8px; }
  .category-chip {
    display: flex; align-items: center; gap: 6px; padding: 8px 12px; border-radius: 18px;
    background: var(--input-bg); border: 2px solid transparent; cursor: pointer;
    font-size: 13.5px; font-weight: 600; color: var(--text-primary);
  }
  .category-chip.selected { border-color: var(--accent); background: var(--card-bg-strong); }
  .category-chip-add { border-style: dashed; border-color: var(--card-border); color: var(--text-secondary); }
  .category-more-link {
    display: block; background: none; border: none; color: var(--accent-strong); font-size: 12.5px;
    font-weight: 600; margin-top: 8px; padding: 2px 0; text-decoration: underline; cursor: pointer;
  }
  .add-category-row { display: flex; gap: 8px; margin-top: 10px; flex-wrap: wrap; }
  .add-category-row input#newCategoryEmoji { width: 56px; flex: 0 0 56px; text-align: center; }
  .add-category-row input#newCategoryLabel { flex: 1 1 140px; }
  .add-category-row input {
    background: var(--input-bg); border: 1px solid var(--card-border); border-radius: 12px;
    padding: 10px 12px; font-size: 13.5px; color: var(--text-primary); outline: none;
  }
  .add-category-row input:focus { border-color: var(--accent); }

  /* ---------- Toolbar ---------- */
  .toolbar { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; padding: 14px 18px; }
  #searchInput, #weekFilter {
    background: var(--input-bg); border: 1px solid var(--card-border); border-radius: 12px;
    padding: 10px 14px; font-size: 13.5px; outline: none;
  }
  /* Fallback por si el navegador no respeta "color-scheme" en el popup nativo del <select> */
  select option {
    background-color: var(--select-option-bg, #14262B);
    color: var(--select-option-text, #EFE4DA);
  }
  :root[data-theme="light"] select option {
    --select-option-bg: #FBF6F0;
    --select-option-text: #123C46;
  }
  :root[data-theme="dark"] select option {
    --select-option-bg: #14262B;
    --select-option-text: #EFE4DA;
  }
  #searchInput { flex: 1 1 200px; min-width: 160px; }
  #weekFilter { flex: 0 0 auto; max-width: 100%; }
  .data-actions-row { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 8px; }

  /* ---------- Informe mensual imprimible (Guardar como PDF) ---------- */
  #printReport { display: none; }
  .pr-doc { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; color: #123C46; max-width: 720px; margin: 0 auto; }
  .pr-head { border-bottom: 3px solid #123C46; padding-bottom: 12px; margin-bottom: 18px; }
  .pr-brand { font-size: 12.5px; font-weight: 700; color: #D9728F; letter-spacing: .05em; text-transform: uppercase; }
  .pr-head h1 { font-size: 28px; font-weight: 800; margin: 4px 0 2px; color: #123C46; }
  .pr-sub { font-size: 12.5px; color: #6F6259; }
  .pr-cards { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 20px; }
  .pr-c { border: 1px solid #E3DAD0; border-radius: 12px; padding: 12px 14px; display: flex; flex-direction: column; gap: 3px; }
  .pr-c span { font-size: 11px; color: #6F6259; }
  .pr-c b { font-size: 17px; color: #123C46; }
  .pr-doc h2 { font-size: 13.5px; font-weight: 750; color: #123C46; margin: 20px 0 8px; }
  .pr-list { border: 1px solid #E3DAD0; border-radius: 12px; overflow: hidden; }
  .pr-row { display: flex; justify-content: space-between; gap: 12px; padding: 9px 14px; font-size: 13.5px; border-top: 1px solid #EFE7DE; }
  .pr-row:first-child { border-top: none; }
  .pr-row span:first-child { color: #3A4A4E; }
  .pr-row span:last-child { font-weight: 700; color: #123C46; white-space: nowrap; }
  .pr-row .pos { color: #3F7D6E; }
  .pr-row .neg { color: #C0442F; }
  .pr-row .pr-total { font-weight: 800; }
  .pr-foot { margin-top: 24px; padding-top: 12px; border-top: 1px solid #E3DAD0; font-size: 11px; color: #8a90a0; text-align: center; }

  @media print {
    @page { margin: 15mm; }
    html, body { background: #fff !important; }
    body * { visibility: hidden !important; }
    #printReport, #printReport * { visibility: visible !important; }
    #printReport { display: block !important; position: absolute; left: 0; top: 0; width: 100%; }
    .pr-list, .pr-c { break-inside: avoid; }
    .pr-doc h2 { break-after: avoid; }
  }
  .btn {
    padding: 10px 16px; border-radius: 12px; font-size: 13.5px; font-weight: 600;
    background: var(--card-bg-strong); border: 1px solid var(--card-border);
    transition: transform .15s ease, background .2s ease;
    white-space: nowrap;
  }
  .btn:hover { transform: translateY(-1px); }
  .btn:active { transform: scale(.96); }
  .btn.primary { background: var(--accent-fill, var(--accent)); color: var(--on-accent, #fff); border-color: transparent; }
  .btn.secondary { background: transparent; }
  .btn.danger { color: var(--red); border-color: color-mix(in srgb, var(--red) 40%, transparent); }
  .file-btn {
    padding: 10px 16px; border-radius: 12px; font-size: 13.5px; font-weight: 600;
    background: var(--card-bg-strong); border: 1px solid var(--card-border); cursor: pointer;
  }

  /* ---------- Weeks grid ---------- */
  .weeks-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(270px, 1fr)); gap: 16px; }
  .week-card { display: flex; flex-direction: column; padding: 0; overflow: hidden; }
  .week-card.status-danger { border-color: color-mix(in srgb, var(--red) 45%, transparent); }
  .week-card.status-warning { border-color: rgba(251,191,36,.35); }
  #currentWeekFeatured { margin-bottom: 4px; }
  .week-card-featured {
    border: 1.5px solid var(--accent); background-image: linear-gradient(160deg, color-mix(in srgb, var(--accent) 10%, transparent), transparent 60%);
  }
  .week-card-featured .week-header { padding: 24px 24px 20px; }
  .week-card-featured .week-header h3 { font-size: 22px; }
  .week-card-featured .week-body { padding: 0 24px 24px; }
  .week-card-featured .week-numbers .value { font-size: 22px; }
  .week-card-featured .week-badge { font-size: 13.5px; padding: 6px 12px; }
  .other-weeks-toggle {
    display: flex; align-items: center; justify-content: center; gap: 6px; width: 100%;
    background: none; border: none; color: var(--text-secondary); font-size: 13.5px; font-weight: 650;
    padding: 10px; margin: 4px 0 14px; cursor: pointer;
  }
  .other-weeks-toggle:active { opacity: .7; }
  .other-weeks-chevron { font-size: 11px; transition: transform .2s ease; }
  .other-weeks-chevron.open { transform: rotate(180deg); }
  .week-header {
    width: 100%; display: flex; align-items: center; gap: 10px; padding: 20px; text-align: left;
  }
  .week-header .week-title-wrap { flex: 1; min-width: 0; }
  .week-header h3 { font-size: 17px; font-weight: 750; }
  .week-range { font-size: 12.5px; color: var(--text-secondary); }
  .week-badge {
    background: var(--card-bg-strong); border: 1px solid var(--card-border);
    border-radius: 12px; padding: 5px 10px; font-size: 12.5px; font-weight: 700; color: var(--accent-strong);
    white-space: nowrap; flex: 0 0 auto;
  }
  .week-card.is-closed {
    background-image: linear-gradient(rgba(0,0,0,.26), rgba(0,0,0,.26));
    border-style: dashed; opacity: .97;
  }
  .week-card.is-closed .week-header h3 { color: var(--text-secondary); }
  .week-badge.closed { color: var(--text-secondary); background: transparent; border-style: dashed; }
  .week-outcome-note { font-size: 12.5px; color: var(--text-secondary); margin: -4px 0 0; }
  /* El chevron es puramente decorativo: con pointer-events:none, tocarlo cuenta
     como tocar el botón/cabecera que lo contiene (que es el que despliega). Así
     no hay una "zona muerta" justo sobre el ícono. */
  .week-chevron { flex: 0 0 auto; font-size: 13.5px; color: var(--text-secondary); transition: transform .2s ease; pointer-events: none; }
  .week-chevron.open { transform: rotate(180deg); }
  .week-body { display: flex; flex-direction: column; gap: 12px; padding: 0 20px 20px; }
  .week-numbers { display: flex; justify-content: space-between; gap: 10px; }
  .week-numbers > div { display: flex; flex-direction: column; gap: 2px; }
  .week-numbers .label { font-size: 11px; color: var(--text-secondary); text-transform: uppercase; letter-spacing: .03em; }
  .week-numbers .value { font-size: 17px; font-weight: 750; }

  .expense-list { display: flex; flex-direction: column; gap: 8px; max-height: 220px; overflow-y: auto; padding-right: 2px; }
  .expense-list::-webkit-scrollbar { width: 5px; }
  .expense-list::-webkit-scrollbar-thumb { background: var(--card-border); border-radius: 12px; }
  .expense-item {
    display: flex; align-items: center; flex-wrap: wrap; gap: 8px;
    background: var(--input-bg); border-radius: 12px; padding: 8px 10px;
    animation: itemIn .35s cubic-bezier(.2,.8,.3,1) both;
  }
  /* Igual que en Finanzas: editar/borrar bajan a su propia línea, así el
     concepto no se aplasta y las palabras largas se leen bien. */
  .expense-actions { flex: 0 0 100%; display: flex; align-items: center; justify-content: flex-end; gap: 8px; position: relative; z-index: 2; }
  .expense-item.removing { animation: itemOut .28s ease forwards; }
  @keyframes itemIn { from { opacity: 0; transform: translateX(-8px) scale(.97); } to { opacity: 1; transform: translateX(0) scale(1); } }
  @keyframes itemOut { to { opacity: 0; transform: translateX(10px) scale(.9); max-height: 0; padding: 0; margin: 0; } }
  .expense-icon { font-size: 15px; }
  .expense-concept { flex: 1; font-size: 13.5px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  /* El nombre se corta cuando no cabe. Al tocar/clicar se abre en grande en una
     burbuja (ver openConceptPopover); con el dedo también se puede deslizar. */
  .expense-concept, .fin-item .fin-concept {
    overflow-x: auto; overflow-y: hidden; -webkit-overflow-scrolling: touch;
    scrollbar-width: none; touch-action: pan-x;
    mask-image: linear-gradient(to right, #000 calc(100% - 14px), transparent 100%);
    -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 14px), transparent 100%);
  }
  .expense-concept::-webkit-scrollbar, .fin-item .fin-concept::-webkit-scrollbar { display: none; }
  /* Manita solo si el nombre está cortado (se añade por JS al pasar el ratón). */
  .concept-clip { cursor: pointer; }
  .expense-date { font-size: 11px; color: var(--text-secondary); }
  .expense-amount { font-size: 13.5px; font-weight: 700; color: var(--text-primary); }
  .expense-edit, .expense-delete {
    width: 34px; height: 34px; border-radius: 12px; font-size: 13.5px;
    position: relative; z-index: 2; flex: none;
    display: flex; align-items: center; justify-content: center; opacity: .7;
    transition: opacity .15s ease, background .15s ease;
  }
  .expense-edit:hover, .expense-delete:hover { opacity: 1; background: var(--card-border); }
  .empty-msg { font-size: 12.5px; color: var(--text-secondary); text-align: center; padding: 10px 0; display: none; }
  .empty-msg.visible { display: block; }
  .search-status {
    font-size: 12.5px; color: var(--text-secondary); padding: 0 4px; display: none;
  }
  .search-status.visible { display: block; }
  .search-results {
    display: none; flex-direction: column; gap: 8px; margin-top: -6px;
  }
  .result-week-tag {
    font-size: 11px; font-weight: 700; color: var(--accent-strong);
    background: var(--card-bg-strong); border-radius: 12px; padding: 3px 7px;
    white-space: nowrap; flex: 0 0 auto;
  }
  .search-results .expense-item { background: var(--card-bg); border: 1px solid var(--card-border); padding: 12px; }
  .search-results .expense-item.historic { opacity: .72; }
  .search-results .expense-item.historic .result-week-tag { color: var(--text-secondary); background: var(--input-bg); }
  .search-results .expense-concept { flex: 1 1 auto; }
  .week-header { cursor: pointer; transition: background .15s ease; }
  .week-header:hover { background: var(--card-bg-strong); }
  .expense-item.ticket .expense-concept { cursor: pointer; }
  .expense-item.ticket .expense-concept:hover { text-decoration: underline; }
  .ticket-badge { color: var(--text-secondary); font-weight: 500; font-size: 12.5px; }
  .src-badge { display: inline-block; font-size: 11px; font-weight: 700; padding: 1px 7px; border-radius: 18px; vertical-align: middle; background: color-mix(in srgb, var(--accent) 16%, transparent); color: var(--accent-strong); }
  /* Variante apagada del badge: para el origen de un gasto, que es un dato
     de apoyo — no tiene que competir con el concepto. */
  .src-badge-soft { background: var(--input-bg); color: var(--text-secondary); font-weight: 600; font-size: 11px; }
  .week-readonly { background: var(--input-bg); border: 1px solid var(--card-border); border-radius: 12px; padding: 11px 14px; font-size: 13.5px; color: var(--text-primary); font-weight: 600; }

  /* ---------- Modal: checkbox de ticket ---------- */
  .field-checkbox {
    display: flex; align-items: center; gap: 11px; font-size: 13.5px; color: var(--text-secondary);
    margin-bottom: 14px; padding: 10px 12px; border-radius: 12px;
    background: var(--input-bg); border: 1px solid transparent; cursor: pointer;
    transition: border-color .15s ease, background .15s ease;
  }
  .field-checkbox input { position: absolute; opacity: 0; pointer-events: none; }
  .field-checkbox-box {
    width: 20px; height: 20px; flex: none; border-radius: 12px;
    border: 1.5px solid var(--card-border); background: var(--card-bg-strong);
    display: flex; align-items: center; justify-content: center;
    font-size: 12.5px; font-weight: 800; color: transparent;
    transition: background .15s ease, border-color .15s ease, color .15s ease;
  }
  .field-checkbox-text { display: flex; flex-direction: column; gap: 1px; line-height: 1.25; font-weight: 600; }
  .field-checkbox-text small { font-size: 11px; font-weight: 500; opacity: .75; }
  .field-checkbox input:checked ~ .field-checkbox-box {
    background: var(--accent-fill, var(--accent)); border-color: var(--accent); color: var(--on-accent, #fff);
  }
  .field-checkbox:has(input:checked) { border-color: var(--accent); }
  .ticket-items-list { display: flex; flex-direction: column; gap: 6px; max-height: 180px; overflow-y: auto; margin-bottom: 10px; padding-right: 2px; }
  .ticket-items-list::-webkit-scrollbar { width: 5px; }
  .ticket-items-list::-webkit-scrollbar-thumb { background: var(--card-border); border-radius: 12px; }
  .ticket-item-row {
    display: flex; align-items: center; gap: 8px; background: var(--input-bg); border-radius: 12px; padding: 7px 10px;
  }
  .ticket-item-row .ti-concept {
    flex: 1; min-width: 0; font-size: 13.5px; white-space: nowrap;
    overflow-x: auto; overflow-y: hidden; -webkit-overflow-scrolling: touch;
    scrollbar-width: none; touch-action: pan-x;
    mask-image: linear-gradient(to right, #000 calc(100% - 14px), transparent 100%);
    -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 14px), transparent 100%);
  }
  .ticket-item-row .ti-concept::-webkit-scrollbar { display: none; }
  .ticket-item-row .ti-amount { font-size: 13.5px; font-weight: 700; }
  .ticket-item-row button { width: 22px; height: 22px; font-size: 11px; opacity: .7; display:flex; align-items:center; justify-content:center; border-radius: 12px; }
  .ticket-item-row button:hover { opacity: 1; background: var(--card-border); }
  .ticket-add-row { display: flex; gap: 8px; margin-bottom: 10px; }
  .ticket-add-row input {
    background: var(--input-bg); border: 1px solid var(--card-border); border-radius: 12px;
    padding: 9px 12px; font-size: 13.5px; outline: none;
  }
  .ticket-add-row input:first-child { flex: 1; min-width: 0; }
  .ticket-add-row input:last-child { width: 78px; }
  .ticket-total-row {
    display: flex; justify-content: space-between; font-size: 13.5px; font-weight: 750;
    padding: 10px 0 14px; border-bottom: 1px solid var(--card-border); margin-bottom: 2px;
  }

  /* ---------- Desplegable de % de gasto ---------- */
  .percent-toggle {
    width: 100%; display: flex; align-items: center; justify-content: space-between;
    font-size: 15px; font-weight: 700;
  }
  .percent-chevron { transition: transform .2s ease; font-size: 13.5px; color: var(--text-secondary); pointer-events: none; }
  .percent-card { cursor: pointer; }
  .percent-toggle { cursor: pointer; }
  .percent-chevron.open { transform: rotate(180deg); }
  .percent-body { margin-top: 14px; display: flex; flex-direction: column; gap: 8px; }

  /* ---------- Acordeones de Finanzas ---------- */
  .accordion-card { padding: 4px 22px; }
  .accordion-toggle {
    width: 100%; display: flex; align-items: center; gap: 10px;
    padding: 18px 0; font-size: 15px; font-weight: 750;
  }
  .accordion-title { flex: 0 0 auto; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .accordion-meta { flex: 1; text-align: right; font-size: 13.5px; font-weight: 700; color: var(--text-secondary); }
  .accordion-chevron { flex: 0 0 auto; transition: transform .2s ease; font-size: 13.5px; color: var(--text-secondary); pointer-events: none; }
  .accordion-chevron.open { transform: rotate(180deg); }
  .accordion-body { padding-bottom: 20px; display: flex; flex-direction: column; gap: 10px; }
  @media (max-width: 420px) {
    .accordion-card { padding: 4px 16px; }
    .accordion-title { font-size: 13.5px; }
    .accordion-meta { font-size: 12.5px; }
  }
  .percent-row-item {
    display: flex; align-items: center; gap: 10px; background: var(--card-bg-strong); border: 1px solid var(--card-border);
    border-radius: 12px; padding: 10px 14px;
  }
  .percent-row-item .pr-label { flex: 0 0 90px; font-size: 13.5px; font-weight: 600; }
  .percent-row-item .pr-bar-outer { display: block; flex: 1; height: 8px; border-radius: 18px; background: var(--track); overflow: hidden; }
  .percent-row-item .pr-bar-inner { display: block; height: 100%; border-radius: 18px; background: linear-gradient(90deg, var(--accent), var(--accent-strong)); }
  .percent-row-item .pr-bar-inner.warning { background: linear-gradient(90deg, var(--amber), color-mix(in srgb, var(--amber) 62%, #8A5A1E)); }
  .percent-row-item .pr-bar-inner.danger { background: linear-gradient(90deg, var(--red), color-mix(in srgb, var(--red) 62%, #7C2418)); }
  .percent-row-item .pr-pct { flex: 0 0 48px; text-align: right; font-size: 13.5px; font-weight: 700; }
  .percent-row-item.total { border-color: var(--accent); background: color-mix(in srgb, var(--accent) 12%, transparent); }
  .percent-row-item.total .pr-label, .percent-row-item.total .pr-pct { color: var(--accent-strong); }

  .category-block { display: flex; flex-direction: column; }
  .category-row-toggle { width: 100%; text-align: left; }
  .category-detail-list {
    flex-direction: column; gap: 2px; margin: 2px 4px 0; padding: 4px 12px 8px;
    border-left: 2px solid var(--card-border);
  }
  .category-detail-row {
    display: flex; align-items: center; gap: 10px; padding: 7px 0; font-size: 12.5px;
    border-bottom: 1px solid var(--card-border);
  }
  .category-detail-row:last-child { border-bottom: none; }
  .category-detail-row .cd-concept {
    flex: 1; min-width: 0; color: var(--text-primary); white-space: nowrap;
    overflow-x: auto; overflow-y: hidden; -webkit-overflow-scrolling: touch;
    scrollbar-width: none; touch-action: pan-x;
    mask-image: linear-gradient(to right, #000 calc(100% - 14px), transparent 100%);
    -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 14px), transparent 100%);
  }
  .category-detail-row .cd-concept::-webkit-scrollbar { display: none; }
  .category-detail-row .cd-date { flex: 0 0 auto; color: var(--text-secondary); }
  .category-detail-row .cd-amount { flex: 0 0 auto; font-weight: 700; }

  .week-actions { display: flex; flex-direction: column; gap: 8px; margin-top: 2px; }
  .week-actions .btn { width: 100%; min-width: 0; text-align: center; overflow: hidden; text-overflow: ellipsis; }
  .btn.add-expense { color: var(--accent-strong); }
  .btn.close-week[disabled] { opacity: .5; cursor: default; }
  .btn.close-week[disabled]:hover { transform: none; }
  .btn.reopen-week { color: var(--amber); }
  .btn.reopen-week[disabled] { opacity: .5; cursor: default; color: var(--text-secondary); }
  .btn.reopen-week[disabled]:hover { transform: none; }

  /* ============================================================
     Jerarquía de CTAs: la acción principal de cada zona resalta en el color
     del tema. Todo con var(--accent), así sirve para cualquier tema elegido.
  ============================================================ */
  /* Confirmar / crear: relleno del acento con un halo suave para que "flote". */
  .btn.primary { box-shadow: 0 4px 14px -6px color-mix(in srgb, var(--accent) 65%, transparent); }
  .btn.hucha-save {
    background: var(--accent-fill, var(--accent)); color: var(--on-accent, #fff); border-color: transparent; font-weight: 700;
    box-shadow: 0 3px 11px -6px color-mix(in srgb, var(--accent) 65%, transparent);
  }
  /* Acción frecuente destacada: relleno suave del acento (visible, invita a tocar). */
  .btn.add-expense, .btn.hucha-add {
    background: color-mix(in srgb, var(--accent) 15%, var(--card-bg-strong));
    border: 1px solid color-mix(in srgb, var(--accent) 45%, var(--card-border));
    color: var(--accent-strong); font-weight: 700;
  }
  .btn.add-expense:hover, .btn.hucha-add:hover {
    background: color-mix(in srgb, var(--accent) 26%, var(--card-bg-strong));
    border-color: var(--accent);
  }
  /* Secundaria visible: contorno del acento (p. ej. Cerrar semana, Devolver). */
  .btn.close-week, .btn.hucha-return {
    background: transparent;
    border: 1.5px solid color-mix(in srgb, var(--accent) 48%, var(--card-border));
    color: var(--accent-strong); font-weight: 700;
  }
  .btn.close-week:hover, .btn.hucha-return:hover { background: color-mix(in srgb, var(--accent) 12%, transparent); border-color: var(--accent); }
  /* Retirar (saca del ahorro): acción distinta, se refuerza en rojo. */
  .btn.hucha-withdraw { border-color: color-mix(in srgb, var(--red) 40%, var(--card-border)); font-weight: 700; }
  .btn-link {
    display: block; width: 100%; text-align: center; background: none; border: none;
    font-size: 12.5px; color: var(--text-secondary); opacity: .75; padding: 6px 0 0;
    transition: opacity .15s ease, color .15s ease;
  }
  .btn-link:hover { opacity: 1; color: var(--red); }
  .btn-clear-inline {
    padding: 10px 14px; border-radius: 12px; font-size: 13.5px; font-weight: 600;
    background: transparent; border: 1px solid var(--card-border); color: var(--text-secondary);
    transition: all .15s ease;
  }
  .btn-clear-inline:hover { color: var(--red); border-color: color-mix(in srgb, var(--red) 45%, transparent); }
  /* CTAs del modal Dinero, más visibles (color del tema) */
  #moveMoneyToggleBtn, #addIncomeBtn {
    width: 100%; display: block; text-align: center; font-weight: 700;
    background: color-mix(in srgb, var(--accent) 13%, var(--card-bg-strong));
    border: 1px solid color-mix(in srgb, var(--accent) 42%, var(--card-border));
    color: var(--accent-strong);
  }
  #moveMoneyToggleBtn:hover, #addIncomeBtn:hover {
    background: color-mix(in srgb, var(--accent) 22%, var(--card-bg-strong));
    border-color: var(--accent); color: var(--accent-strong);
  }

  /* ---------- Fact card ("¿Sabías qué?") ---------- */
  .fact-card { cursor: pointer; user-select: none; overflow: hidden; }
  .fact-card-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }
  .fact-card-title { font-size: 12.5px; font-weight: 700; color: var(--text-secondary); text-transform: uppercase; letter-spacing: .04em; }
  .fact-card-dots { display: flex; gap: 6px; }
  .fact-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--card-border); transition: background .2s, transform .2s; }
  .fact-dot.active { background: var(--accent-fill, var(--accent)); transform: scale(1.4); }
  .fact-card-body { min-height: 62px; display: flex; align-items: center; }
  .fact-card-text { font-size: 17px; font-weight: 750; line-height: 1.35; margin: 0; }
  .fact-card-text strong { color: var(--accent-strong); }
  .fact-card-nav { display: flex; align-items: center; justify-content: space-between; margin-top: 8px; }
  .fact-nav-btn {
    background: var(--input-bg); border-radius: 50%; width: 32px; height: 32px; font-size: 17px;
    display: flex; align-items: center; justify-content: center; flex: 0 0 auto;
  }
  .fact-nav-btn:hover { background: var(--card-bg-strong); }
  .fact-card-hint { font-size: 11px; color: var(--text-secondary); }
  /* (26 sep, v34) "¿Sabías qué?" pasa a ser una sola frase: tocarla muestra la siguiente. */
  #factCard .fact-card-header, #factCard .fact-card-nav { display: none !important; }
  #factCard { padding-top: 14px !important; padding-bottom: 14px !important; cursor: pointer; }
  #factCard .fact-card-text { font-size: 15px !important; margin: 0 !important; }
  .an-mas-btn { width: 100%; margin: 14px 0 4px; }
  @keyframes factSlideIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
  .fact-pulse { animation: factSlideIn .25s ease; }

  /* ---------- Charts ---------- */
  .charts-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
  .chart-card canvas { width: 100%; height: 240px; display: block; }
  .legend { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 12px; justify-content: center; }
  .legend-item { display: flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--text-secondary); }
  .legend-dot { width: 10px; height: 10px; border-radius: 50%; }
  .legend-item { cursor: pointer; padding: 3px 8px; border-radius: 999px; transition: background .15s ease, color .15s ease; }
  .legend-item.sel { background: color-mix(in srgb, var(--accent) 20%, var(--card-bg-strong)); color: var(--text-primary); font-weight: 650; }
  #pieChart, #barChart, #allocChart, #monthChart { cursor: pointer; }
  .chart-detail { font-size: 12.5px; color: var(--text-secondary); text-align: center; margin: 10px 2px 0; min-height: 17px; line-height: 1.4; transition: opacity .2s ease; }
  .chart-detail strong { color: var(--text-primary); font-weight: 700; }
  .chart-detail .pos { color: var(--green); font-weight: 650; }
  .chart-detail .neg { color: var(--red); font-weight: 650; }

  /* ---------- Gastos fuera de plan ---------- */
  .extra-header { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; margin-bottom: 6px; }
  .extra-sub { font-size: 12.5px; color: var(--text-secondary); margin-bottom: 14px; }
  .extra-total-row {
    display: flex; justify-content: space-between; align-items: center;
    font-size: 13.5px; font-weight: 750; margin-top: 12px; padding-top: 12px;
    border-top: 1px solid var(--card-border);
  }

  /* ---------- Finanzas: recuperables / pendientes ---------- */
  .fin-item {
    display: flex; align-items: center; flex-wrap: wrap; gap: 10px;
    background: var(--input-bg); border-radius: 12px; padding: 9px 12px;
    animation: itemIn .35s cubic-bezier(.2,.8,.3,1) both;
  }
  .fin-item.removing { animation: itemOut .28s ease forwards; }
  .fin-item.settled { opacity: .55; }
  .fin-item .fin-concept { flex: 1 1 90px; min-width: 90px; font-size: 13.5px; font-weight: 600; white-space: nowrap; }
  .fin-item.settled .fin-concept { text-decoration: line-through; }
  .fin-item .fin-amount { font-size: 13.5px; font-weight: 700; }
  /* Las acciones (marcar, editar, borrar) siempre pasan a su propia línea,
     así el concepto nunca se aplasta a 0px para hacerles lugar. */
  .fin-item .fin-actions { flex: 0 0 100%; display: flex; align-items: center; justify-content: flex-end; gap: 8px; }
  .weeks-rule-note { font-size: 12.5px; color: var(--text-secondary); margin: -2px 2px 14px; line-height: 1.45; opacity: .85; }
  .new-month-summary { background: var(--card-bg-strong); border: 1px solid var(--card-border); border-radius: 12px; padding: 14px 16px; font-size: 13.5px; color: var(--text-secondary); line-height: 1.5; margin-bottom: 14px; }
  .new-month-summary strong { color: var(--accent-strong); font-weight: 750; }
  /* Asa de arrastre para reordenar pendientes (dedo o ratón) */
  .fin-drag { flex: 0 0 auto; display: inline-flex; align-items: center; color: var(--text-secondary); opacity: .5; cursor: grab; touch-action: none; padding: 4px 2px; margin-left: -4px; }
  .fin-drag:hover { opacity: .9; }
  .fin-drag:active { cursor: grabbing; }
  .fin-item.sortable-chosen, .fin-item.sortable-ghost { transform: none !important; box-shadow: none !important; }
  .fin-item.sortable-ghost { opacity: .4; }
  .fin-item.sortable-chosen { background: color-mix(in srgb, var(--accent) 12%, var(--card-bg-strong)); }
  .fin-item.sortable-drag { opacity: 1; }
  .fin-toggle-btn {
    padding: 6px 11px; border-radius: 12px; font-size: 11px; font-weight: 700;
    background: var(--card-bg-strong); border: 1px solid var(--card-border); white-space: nowrap;
    transition: all .15s ease;
  }
  .fin-toggle-btn.is-settled { color: var(--green); border-color: color-mix(in srgb, var(--green) 45%, transparent); }
  .fin-delete {
    width: 26px; height: 26px; border-radius: 12px; font-size: 12.5px; opacity: .7; flex: 0 0 auto;
    display: flex; align-items: center; justify-content: center; transition: opacity .15s ease, background .15s ease;
  }
  .fin-delete:hover { opacity: 1; background: var(--card-border); }
  .fin-add-row { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
  .fin-add-row input {
    background: var(--input-bg); border: 1px solid var(--card-border); border-radius: 12px;
    padding: 10px 14px; font-size: 13.5px; outline: none;
  }
  .fin-add-row input.fin-concept-input { flex: 1 1 160px; }
  .fin-add-row input.fin-amount-input { width: 90px; }
  .fin-group-month { font-weight: 650; text-transform: none; letter-spacing: 0; opacity: .65; }
  .fin-list { display: flex; flex-direction: column; gap: 8px; margin-bottom: 4px; }

  /* ---------- Finanzas: Pendientes (capa unificada Sale / Entra) ---------- */
  .pending-block { margin-bottom: 18px; }
  .pending-block:last-of-type { margin-bottom: 4px; }
  .pending-block-header {
    display: flex; justify-content: space-between; align-items: baseline;
    margin-bottom: 10px;
  }
  .pending-block-title { font-size: 13.5px; font-weight: 750; color: var(--text-primary); }
  .pending-block-total { font-size: 17px; font-weight: 800; letter-spacing: -0.01em; color: var(--accent-strong); }
  .pending-tag {
    flex: 0 0 auto; font-size: 11px; font-weight: 800; letter-spacing: .02em;
    padding: 3px 8px; border-radius: 12px; white-space: nowrap;
  }
  .pending-tag.tag-debes { background: rgba(220,63,54,.14); color: var(--red); }
  .pending-tag.tag-tedeben { background: rgba(14,154,103,.14); color: var(--green); }
  .pending-add-forms { display: flex; flex-direction: column; gap: 8px; margin-top: 6px; }
  .pending-add-details {
    background: var(--input-bg); border-radius: 12px; padding: 2px 14px;
  }
  .pending-add-details summary {
    cursor: pointer; list-style: none; padding: 12px 0; font-size: 13.5px; font-weight: 700;
    color: var(--text-primary);
  }
  .pending-add-details summary::-webkit-details-marker { display: none; }
  .pending-add-details[open] summary { padding-bottom: 4px; }
  .pending-add-details > *:not(summary) { padding-bottom: 14px; }
  .new-month-reminder {
    display: flex; align-items: center; justify-content: space-between; gap: 12px;
    font-size: 13.5px; font-weight: 600; flex-wrap: wrap;
    border: 1px solid rgba(194,65,12,.35); background: rgba(194,65,12,.08);
  }
  .next-month-nudge {
    display: flex; align-items: center; justify-content: space-between; gap: 10px;
    font-size: 12.5px; color: var(--text-secondary); padding: 10px 14px;
    background: var(--input-bg); border: none;
  }
  .next-month-nudge-actions { display: flex; align-items: center; gap: 10px; flex: 0 0 auto; }
  .next-month-nudge-link { border: none; background: none; color: var(--accent-strong); font-weight: 650; font-size: 12.5px; padding: 0; }
  .next-month-nudge-close { border: none; background: none; color: var(--text-secondary); font-size: 12.5px; padding: 0; opacity: .6; }
  .fin-summary-row {
    display: flex; justify-content: space-between; align-items: center; font-size: 13.5px;
    padding: 4px 0;
  }
  .fin-summary-row .label { color: var(--text-secondary); }
  .fin-summary-row .label em { font-style: normal; font-size: 11px; opacity: .75; }
  .fin-summary-row .value { font-weight: 750; }
  .fin-summary-row.total {
    border-top: 1px solid var(--card-border); margin-top: 6px; padding-top: 12px;
    font-size: 15px;
  }
  .fin-summary-row.total .label { color: var(--text-primary); font-weight: 700; }
  /* Resumen del mes: cada fila reacciona al cursor — se corre, se tinta,
     aparece una barrita del acento y el importe crece un poco. */
  #accSummaryBody .fin-summary-row {
    position: relative; border-radius: 12px; padding: 6px 10px; margin: 0 -10px;
    transition: background .18s ease, transform .18s cubic-bezier(.2,.8,.3,1);
  }
  #accSummaryBody .fin-summary-row::before {
    content: ""; position: absolute; left: 0; top: 18%; bottom: 18%; width: 3px;
    border-radius: 3px; background: var(--accent-fill, var(--accent)); opacity: 0;
    transform: scaleY(.4); transform-origin: center;
    transition: opacity .18s ease, transform .22s cubic-bezier(.34,1.56,.64,1);
  }
  #accSummaryBody .fin-summary-row:hover {
    background: color-mix(in srgb, var(--accent) 12%, transparent);
    transform: translateX(5px);
  }
  #accSummaryBody .fin-summary-row:hover::before { opacity: 1; transform: scaleY(1); }
  #accSummaryBody .fin-summary-row .label,
  #accSummaryBody .fin-summary-row .value {
    transition: color .18s ease, transform .18s cubic-bezier(.34,1.56,.64,1);
  }
  #accSummaryBody .fin-summary-row:hover .label { color: var(--text-primary); }
  #accSummaryBody .fin-summary-row:hover .value { color: var(--accent-strong); transform: scale(1.06); }
  #accSummaryBody .fin-summary-row.total:hover { background: color-mix(in srgb, var(--accent) 16%, transparent); }
  @media (prefers-reduced-motion: reduce) {
    #accSummaryBody .fin-summary-row:hover { transform: none; }
    #accSummaryBody .fin-summary-row:hover .value { transform: none; }
  }

  /* ---------- Historial de periodos ---------- */
  .history-item {
    background: var(--input-bg); border-radius: 12px; margin-bottom: 8px; overflow: hidden;
  }
  .history-header {
    flex: 1; min-width: 0; display: flex; align-items: center; gap: 10px; padding: 12px 14px;
    text-align: left;
  }
  .history-row { display: flex; align-items: stretch; }
  .history-print {
    flex: 0 0 auto; padding: 0 15px; font-size: 15px; cursor: pointer;
    border-left: 1px solid var(--card-border);
    background: color-mix(in srgb, var(--accent) 12%, transparent); color: var(--accent-strong);
    transition: background .2s ease;
  }
  .history-print:hover { background: color-mix(in srgb, var(--accent) 22%, transparent); }
  .history-label { font-size: 13.5px; font-weight: 700; flex: 0 0 auto; }
  .history-summary { flex: 1; text-align: right; font-size: 12.5px; color: var(--text-secondary); }
  .history-chevron { flex: 0 0 auto; font-size: 12.5px; color: var(--text-secondary); transition: transform .2s ease; pointer-events: none; }
  .history-chevron.open { transform: rotate(180deg); }
  .history-detail { padding: 0 14px 14px; display: flex; flex-direction: column; gap: 6px; }
  .history-week-row {
    display: flex; justify-content: space-between; font-size: 12.5px; padding: 3px 0;
  }
  .history-week-row .label { color: var(--text-secondary); }
  .history-weeks-breakdown {
    margin-top: 6px; padding-top: 8px; border-top: 1px solid var(--card-border);
    display: flex; flex-direction: column; gap: 4px;
  }

  .color-swatch-row { display: flex; gap: 12px; margin-top: 10px; flex-wrap: wrap; }
  .color-swatch {
    width: 42px; height: 42px; border-radius: 50%; border: 2px solid transparent;
    cursor: pointer; position: relative; transition: transform .15s ease, border-color .15s ease;
    flex: 0 0 auto;
  }
  .color-swatch:hover { transform: scale(1.08); }
  .color-swatch.selected { border-color: var(--text-primary); }
  .color-swatch.selected::after {
    content: "✓"; position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
    color: #fff; font-size: 15px; font-weight: 800; text-shadow: 0 1px 3px rgba(0,0,0,.6);
  }

  .currency-row { display: flex; gap: 8px; margin-top: 10px; flex-wrap: wrap; }

  /* ---------- Inicio: tarjeta de consulta (Mi caja / Fijos / Ahorro) ---------- */
  .peek-rows {
    background: var(--card-bg); border: 1px solid var(--card-border);
    border-radius: 18px; overflow: hidden; margin-bottom: 14px;
  }
  .peek-head {
    display: flex; align-items: baseline; justify-content: space-between; gap: 10px;
    padding: 13px 16px 9px;
  }
  .peek-head-label {
    font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: .1em;
    color: var(--accent-strong);
  }
  .peek-eye {
    background: transparent; border: none; cursor: pointer; padding: 2px 0;
    color: var(--text-secondary); font-size: 11px; font-weight: 700;
  }
  .peek-eye:hover { color: var(--accent-strong); }
  .peek-row .pk-value.is-masked { color: var(--text-secondary); letter-spacing: .12em; }
  .peek-row {
    display: grid; grid-template-columns: 24px minmax(0, 1fr) auto auto; align-items: center;
    column-gap: 12px; width: 100%; text-align: left;
    padding: 12px 16px; background: transparent; border: none;
    border-top: 1px solid var(--card-border); color: var(--text-primary);
    cursor: pointer; transition: background .18s ease;
  }
  .peek-row:hover { background: var(--input-bg); }
  .peek-row .pk-icon { font-size: 17px; }
  .peek-row .pk-text { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
  .peek-row .pk-title { font-size: 13.5px; font-weight: 700; }
  .peek-row .pk-sub { font-size: 11px; font-weight: 500; color: var(--text-secondary); }
  .peek-row .pk-value { font-size: 15px; font-weight: 750; font-variant-numeric: tabular-nums; }
  .peek-row .pk-value.is-masked { color: var(--text-secondary); font-weight: 650; letter-spacing: .08em; }
  .peek-row .pk-eye {
    background: transparent; border: none; cursor: pointer; padding: 4px;
    color: var(--text-secondary); font-size: 13.5px; line-height: 1;
  }
  .peek-row .pk-go { color: var(--text-secondary); font-size: 15px; }
  .peek-parts {
    grid-column: 1 / -1; display: flex; flex-direction: column; gap: 4px; margin-top: 8px;
    padding-top: 8px; border-top: 1px solid var(--card-border);
  }
  .peek-part { display: flex; justify-content: space-between; gap: 10px; font-size: 12.5px; color: var(--text-secondary); }
  .peek-part strong { color: var(--text-primary); font-weight: 700; font-variant-numeric: tabular-nums; }

  /* ---------- Mi caja: el total y sus tres partes ---------- */
  .micaja {
    background: var(--card-bg); border: 1px solid var(--card-border); border-radius: 18px;
    padding: 16px 18px; margin-bottom: 14px;
  }
  .micaja-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
  .micaja-label { font-size: 13.5px; font-weight: 700; color: var(--text-secondary); }
  .micaja-total { font-size: 28px; font-weight: 800; letter-spacing: -0.02em; font-variant-numeric: tabular-nums; }
  .micaja-sub { font-size: 12.5px; color: var(--text-secondary); margin: 4px 0 0; text-wrap: pretty; }
  .micaja-rows { display: flex; flex-direction: column; gap: 2px; margin-top: 12px; }
  .micaja-row {
    display: grid; grid-template-columns: 1fr auto auto; align-items: center; gap: 10px;
    width: 100%; text-align: left; padding: 11px 12px; border-radius: 12px;
    background: var(--card-bg-strong); border: 1px solid transparent; color: var(--text-primary);
    cursor: pointer; transition: border-color .2s ease, transform .2s ease;
  }
  .micaja-row:hover { border-color: var(--accent); transform: translateY(-1px); }
  .micaja-row .mc-k { font-size: 13.5px; font-weight: 650; min-width: 0; }
  .micaja-row .mc-v { font-size: 15px; font-weight: 750; font-variant-numeric: tabular-nums; }
  .micaja-row .mc-go { color: var(--text-secondary); font-size: 15px; }
  .micaja-row .mc-note { grid-column: 1 / -1; font-size: 11px; color: var(--text-secondary); }

  /* ---------- Plan: interruptor de reparto semanal y grupos ---------- */
  .plan-switch {
    display: flex; align-items: center; gap: 14px; padding: 14px 16px; margin-bottom: 12px;
    background: var(--card-bg); border: 1px solid var(--card-border); border-radius: 18px;
  }
  .plan-switch-main { display: flex; flex-direction: column; gap: 3px; min-width: 0; flex: 1; }
  .plan-switch-title { font-size: 15px; font-weight: 700; color: var(--text-primary); }
  .plan-switch-sub { font-size: 12.5px; color: var(--text-secondary); text-wrap: pretty; }
  .plan-toggle {
    flex: none; width: 50px; height: 30px; border-radius: 999px; cursor: pointer;
    border: 1px solid var(--card-border); background: var(--card-bg-strong);
    padding: 3px; display: flex; align-items: center; justify-content: flex-start;
    transition: background .22s ease, border-color .22s ease;
  }
  .plan-toggle[aria-checked="true"] { background: var(--accent-fill, var(--accent)); border-color: var(--accent); justify-content: flex-end; }
  .plan-toggle-knob {
    width: 22px; height: 22px; border-radius: 50%; background: #fff;
    box-shadow: 0 1px 3px rgba(0,0,0,.28); transition: transform .22s ease;
  }
  .weeks-controls {
    display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 12px;
  }
  /* El <select> nativo está oculto por diseño: lo que se ve es el wrapper
     .cselect que inyecta setSelectVisible(). La regla va sobre él. */
  .weeks-controls #weekFilter { display: none !important; }
  .weeks-controls .cselect { flex: 1 1 160px; min-width: 0; width: auto; }
  /* Solo el disparador lleva altura fija: el panel de opciones se dimensiona solo. */
  .weeks-controls .cselect > .cselect-btn { height: 40px; }
  .weeks-controls #searchInput { flex: 1 1 100%; height: 40px; box-sizing: border-box; }
  .weeks-control-btn {
    flex: none; height: 40px; font-size: 13.5px; font-weight: 700; padding: 0 14px; border-radius: 12px;
    background: var(--input-bg); border: 1px solid var(--card-border); color: var(--text-primary);
    cursor: pointer; transition: border-color .2s ease, background .2s ease;
  }
  .weeks-control-btn:hover { border-color: var(--accent); }
  .plan-group-label {
    font-size: 11px; letter-spacing: .06em; text-transform: uppercase;
    color: var(--text-secondary); font-weight: 700; margin: 22px 0 8px;
  }

  /* ---------- Plan: límite del día a día y bolsón libre ---------- */
  .limit-card {
    display: flex; flex-direction: column; gap: 4px; padding: 16px 18px; margin-bottom: 12px;
    background: var(--card-bg-strong); border: 1px solid var(--card-border); border-radius: 18px;
  }
  .limit-card-top { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
  .limit-card-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
  .limit-card-label { font-size: 12.5px; color: var(--text-secondary); font-weight: 650; }
  .limit-card-value { font-size: 34px; font-weight: 800; letter-spacing: -0.02em; line-height: 1.1; }
  .limit-card-sub { font-size: 12.5px; color: var(--text-secondary); }
  /* La barra es el dato principal: cuánto del día a día ya se fue. */
  .limit-bar {
    position: relative; height: 12px; border-radius: 999px; margin-top: 14px;
    background: var(--input-bg); border: 1px solid var(--card-border); overflow: hidden;
  }
  .limit-bar-fill {
    height: 100%; width: 0; border-radius: 999px; background: var(--accent-fill, var(--accent));
    transition: width .45s cubic-bezier(.4,0,.2,1), background .28s ease;
  }
  .limit-bar-legend {
    display: flex; justify-content: space-between; gap: 10px; margin-top: 8px;
    font-size: 12.5px; font-variant-numeric: tabular-nums;
  }
  .limit-bar-legend .lg-spent { color: var(--text-secondary); }
  .limit-bar-legend .lg-left { font-weight: 750; color: var(--text-primary); }
  .limit-bar-legend .lg-left.is-over { color: var(--red); }
  .limit-card-foot {
    margin: 12px 0 0; padding-top: 10px; border-top: 1px solid var(--card-border);
    font-size: 12.5px; color: var(--text-secondary); display: flex; justify-content: space-between; gap: 10px;
  }
  .limit-card-foot strong { color: var(--text-primary); font-weight: 750; font-variant-numeric: tabular-nums; }
  .limit-card-edit {
    flex: none; font-size: 13.5px; font-weight: 700; padding: 9px 14px; border-radius: 12px;
    background: var(--input-bg); border: 1px solid var(--card-border); color: var(--text-primary);
  }
  .unassigned-card {
    display: flex; align-items: center; gap: 12px; width: 100%; text-align: left;
    padding: 13px 16px; margin-bottom: 14px; border-radius: 18px;
    background: var(--card-bg); border: 1px dashed var(--card-border);
  }
  .unassigned-icon { font-size: 22px; flex: none; }
  .unassigned-text { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
  .unassigned-title { font-size: 15px; font-weight: 750; }
  .unassigned-sub { font-size: 12.5px; color: var(--text-secondary); }
  /* Aviso de cercanía al límite del día a día (75 % / 90 %). No es un toast
     descartable: refleja el estado real del mes, así que aparece y se va solo. */
  .limit-alert {
    display: flex; align-items: flex-start; gap: 10px;
    margin-top: 14px; padding: 11px 13px; border-radius: 12px;
    border: 1px solid color-mix(in srgb, var(--amber) 45%, transparent);
    background: color-mix(in srgb, var(--amber) 12%, transparent);
  }
  .limit-alert.danger {
    border-color: color-mix(in srgb, var(--red) 45%, transparent);
    background: color-mix(in srgb, var(--red) 12%, transparent);
  }
  .limit-alert-icon { font-size: 17px; flex: none; line-height: 1.3; }
  .limit-alert-body { min-width: 0; display: flex; flex-direction: column; gap: 3px; }
  .limit-alert-title { font-size: 13.5px; font-weight: 750; color: var(--text-primary); }
  .limit-alert-sub { font-size: 12.5px; line-height: 1.45; color: var(--text-secondary); }
  .limit-breakdown {
    margin: 4px 0 14px; padding: 12px 14px; border-radius: 12px;
    background: var(--input-bg); border: 1px solid var(--card-border);
    display: flex; flex-direction: column; gap: 6px;
  }
  .limit-breakdown-row { display: flex; justify-content: space-between; gap: 10px; font-size: 13.5px; }
  .limit-breakdown-row .lb-label { color: var(--text-secondary); }
  .limit-breakdown-row .lb-value { font-weight: 700; font-variant-numeric: tabular-nums; }
  .limit-breakdown-row.is-total { border-top: 1px solid var(--card-border); padding-top: 6px; }
  .limit-breakdown-row.is-over .lb-value { color: var(--red); }
  /* De dónde puede salir más día a día: lo sin asignar y el ahorro del mes. */
  .limit-sources { display: flex; gap: 8px; margin: 2px 0 10px; flex-wrap: wrap; }
  .limit-source {
    flex: 1 1 130px; min-width: 0; padding: 10px 12px; border-radius: 12px;
    background: var(--input-bg); border: 1px solid var(--card-border);
    display: flex; flex-direction: column; gap: 2px;
  }
  .limit-source .ls-k { font-size: 11px; color: var(--text-secondary); }
  .limit-source .ls-v { font-size: 15px; font-weight: 750; font-variant-numeric: tabular-nums; }
  .limit-take {
    display: flex; align-items: flex-start; gap: 10px; margin: 0 0 12px;
    padding: 11px 13px; border-radius: 12px; cursor: pointer;
    border: 1px solid color-mix(in srgb, var(--amber) 45%, transparent);
    background: color-mix(in srgb, var(--amber) 12%, transparent);
    font-size: 12.5px; line-height: 1.45; color: var(--text-primary);
  }
  .limit-take input { margin-top: 2px; flex: none; }

  /* ---------- Más: tarjeta de perfil ---------- */
  .profile-card {
    display: flex; align-items: center; gap: 12px; padding: 14px;
    background: var(--card-bg-strong); border: 1px solid var(--card-border);
    border-radius: 18px; margin-bottom: 18px;
  }
  .profile-avatar {
    width: 46px; height: 46px; border-radius: 50%; flex: 0 0 auto;
    display: flex; align-items: center; justify-content: center;
    font-size: 17px; font-weight: 800; letter-spacing: .02em;
    background: color-mix(in srgb, var(--accent) 20%, var(--input-bg));
    color: var(--text-primary);
    position: relative; cursor: pointer; overflow: hidden;
    border: 1px solid var(--card-border); padding: 0;
  }
  .profile-avatar img { width: 100%; height: 100%; object-fit: cover; display: block; }
  /* La cámara solo se insinúa: aparece al pasar por encima, para que el avatar
     se lea como una foto y no como un botón con un icono encima. */
  .profile-avatar-edit {
    position: absolute; inset: auto 0 0 0; height: 42%;
    display: flex; align-items: center; justify-content: center;
    font-size: 11px; background: rgba(0,0,0,.55);
    opacity: 0; transition: opacity .18s ease;
  }
  .profile-avatar:hover .profile-avatar-edit, .profile-avatar:focus-visible .profile-avatar-edit { opacity: 1; }
  .profile-fields { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
  .profile-fields input {
    background: transparent; border: none; padding: 0; font-size: 17px; font-weight: 700;
    color: var(--text-primary); font-family: inherit; width: 100%;
  }
  .profile-email { font-size: 12.5px; color: var(--text-secondary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .profile-remove-photo {
    align-self: flex-start; font-size: 11px; font-weight: 600; color: var(--text-secondary);
    background: none; border: none; padding: 2px 0; cursor: pointer; text-decoration: underline;
  }
  .profile-remove-photo:hover { color: var(--red); }
  .url-template {
    display: block; margin-top: 8px; padding: 10px 12px; border-radius: 12px;
    background: var(--input-bg); border: 1px solid var(--card-border);
    font-size: 12.5px; line-height: 1.5; word-break: break-all; color: var(--text-primary);
    font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  }
  .profile-logout {
    flex: 0 0 auto; font-size: 12.5px; font-weight: 700; color: var(--text-secondary);
    background: var(--input-bg); border: 1px solid var(--card-border);
    border-radius: 12px; padding: 8px 12px; cursor: pointer;
  }
  .profile-logout:hover { color: var(--text-primary); }

  /* ---------- Más: colores con nombre ---------- */
  .accent-card-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(96px, 1fr)); gap: 8px; margin-top: 10px; }
  .accent-card.color-swatch {
    width: auto; height: auto; border-radius: 12px; flex: initial;
    display: flex; align-items: center; gap: 9px; padding: 9px 11px;
    background: var(--input-bg); border: 2px solid transparent; text-align: left;
  }
  .accent-card.color-swatch:hover { transform: none; border-color: var(--card-border); }
  .accent-card.color-swatch.selected { border-color: var(--accent); background: var(--card-bg-strong); }
  .accent-card.color-swatch.selected::after { content: none; }
  .accent-card-chip { width: 22px; height: 22px; border-radius: 50%; flex: 0 0 auto; }
  .accent-card-name { font-size: 13.5px; font-weight: 700; color: var(--text-primary); }
  .accent-card.color-swatch.selected .accent-card-name::after { content: " ✓"; color: var(--accent); }
  .currency-btn {
    display: flex; flex-direction: column; align-items: center; gap: 2px;
    padding: 9px 13px; border-radius: 12px; background: var(--input-bg); border: 2px solid transparent;
    cursor: pointer; transition: transform .15s ease, border-color .15s ease; flex: 0 0 auto;
  }
  .currency-btn:hover { transform: translateY(-1px); }
  .currency-btn .currency-symbol { font-size: 15px; font-weight: 800; }
  .currency-btn .currency-code { font-size: 11px; color: var(--text-secondary); letter-spacing: .04em; }
  .currency-btn.selected { border-color: var(--accent); background: var(--card-bg-strong); }
  .currency-btn.selected .currency-code { color: var(--accent-strong); }

  /* ---------- Moneda (Ajustes): filas anchas + vista previa ---------- */
  .currency-preview {
    display: flex; align-items: center; justify-content: space-between; gap: 12px;
    margin-top: 14px; padding: 16px 18px; border-radius: 18px;
    background: color-mix(in srgb, var(--accent) 12%, var(--card-bg-strong));
    border: 1px solid color-mix(in srgb, var(--accent) 30%, transparent);
  }
  .currency-preview .cp-label { font-size: 12.5px; font-weight: 650; color: var(--text-secondary); }
  .currency-preview .cp-amount { font-size: 22px; font-weight: 800; letter-spacing: -0.02em; white-space: nowrap; }
  .currency-list { display: flex; flex-direction: column; gap: 8px; margin-top: 14px; }
  .currency-list .currency-btn {
    flex-direction: row; align-items: center; gap: 13px; width: 100%;
    padding: 12px 14px; border-radius: 18px; text-align: left;
    background: var(--input-bg); border: 1.5px solid transparent;
  }
  .currency-list .currency-btn:hover { transform: none; background: var(--card-bg-strong); }
  .currency-list .currency-symbol {
    flex: 0 0 auto; width: 38px; height: 38px; border-radius: 12px;
    display: grid; place-items: center; font-size: 17px; font-weight: 800;
    background: color-mix(in srgb, var(--accent) 16%, transparent); color: var(--text-primary);
  }
  .currency-list .currency-text { display: flex; flex-direction: column; gap: 1px; min-width: 0; flex: 1 1 auto; }
  .currency-list .currency-name { font-size: 15px; font-weight: 700; }
  .currency-list .currency-code { font-size: 11px; color: var(--text-secondary); letter-spacing: .06em; }
  .currency-list .currency-tick {
    flex: 0 0 auto; width: 22px; height: 22px; border-radius: 50%; display: grid; place-items: center;
    font-size: 12.5px; font-weight: 800; color: transparent; border: 1.5px solid var(--card-border);
    transition: background .18s ease, color .18s ease, border-color .18s ease;
  }
  .currency-list .currency-btn.selected { border-color: var(--accent); background: var(--card-bg-strong); }
  .currency-list .currency-btn.selected .currency-symbol { background: var(--accent-fill, var(--accent)); color: var(--on-accent, #fff); }
  .currency-list .currency-btn.selected .currency-tick { background: var(--accent-fill, var(--accent)); border-color: transparent; color: var(--on-accent, #fff); }

  /* ---------- Inicio → Ver detalle: comparación gastado vs mes ---------- */
  .op-compare {
    margin-top: 16px; padding: 14px 15px; border-radius: 18px;
    background: var(--input-bg); border: 1px solid var(--card-border);
    display: flex; flex-direction: column; gap: 12px;
    margin-bottom: 20px;
  }
  .op-cmp-row { display: flex; flex-direction: column; gap: 6px; }
  .op-cmp-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
  .op-cmp-name { font-size: 12.5px; font-weight: 650; color: var(--text-secondary); }
  .op-cmp-num { font-size: 15px; font-weight: 800; letter-spacing: -0.01em; }
  .op-cmp-track { height: 10px; border-radius: 999px; background: var(--track, rgba(125,125,125,.22)); overflow: hidden; display: block; }
  .op-cmp-fill { display: block; height: 100%; border-radius: 999px; transition: width .35s cubic-bezier(.2,.8,.3,1); }
  .op-cmp-fill.spent { background: var(--accent-strong); }
  .op-cmp-fill.time { background: color-mix(in srgb, var(--text-secondary) 55%, transparent); }
  .op-cmp-foot { margin: 0; font-size: 13.5px; line-height: 1.45; color: var(--text-primary); font-weight: 650; }

  /* ---------- Listas de elección (mismo lenguaje que Moneda) ---------- */
  .choice-list { display: flex; flex-direction: column; gap: 8px; margin-top: 10px; }
  .choice-list > button {
    display: flex; align-items: center; gap: 13px; width: 100%; text-align: left;
    padding: 12px 14px; border-radius: 18px; background: var(--input-bg);
    border: 1.5px solid transparent; cursor: pointer; transition: border-color .18s ease, background .18s ease;
  }
  .choice-list > button:hover { background: var(--card-bg-strong); transform: none; }
  .choice-list .ch-badge {
    flex: 0 0 auto; width: 38px; height: 38px; border-radius: 12px; display: grid; place-items: center;
    font-size: 17px; background: color-mix(in srgb, #FFFFFF 88%, var(--accent) 12%);
    border: 1px solid rgba(0,0,0,.07);
  }
  .choice-list .ch-text { display: flex; flex-direction: column; gap: 1px; flex: 1 1 auto; min-width: 0; }
  .choice-list .ch-name { font-size: 15px; font-weight: 700; }
  .choice-list .ch-sub { font-size: 11px; color: var(--text-secondary); line-height: 1.35; }
  .choice-list .ch-tick {
    flex: 0 0 auto; width: 22px; height: 22px; border-radius: 50%; display: grid; place-items: center;
    font-size: 12.5px; font-weight: 800; color: transparent; border: 1.5px solid var(--card-border);
    transition: background .18s ease, color .18s ease, border-color .18s ease;
  }
  .choice-list > button.selected { border-color: var(--accent); background: var(--card-bg-strong); }
  /* La placa NO se pinta de acento al seleccionar: el emoji quedaría sobre
     color fuerte y se volvería ilegible. Lo que marca la elección es el borde
     de la fila y el tick. */
  .choice-list > button.selected .ch-badge { box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 45%, transparent); }
  .choice-list > button.selected .ch-tick { background: var(--accent-fill, var(--accent)); border-color: transparent; color: var(--on-accent, #fff); }

  .cuenta-origin-btn { /* hereda todo de .choice-list > button */ }
  /* Cuenta: un solo bloque de dinero, con el campo grande y tres acciones. */
  .cta-money {
    display: flex; flex-direction: column; gap: 10px;
    padding: 14px; border-radius: 18px;
    background: var(--input-bg); border: 1px solid var(--card-border);
  }
  .cta-money-label { font-size: 12.5px; font-weight: 650; color: var(--text-secondary); }
  input.cta-money-input {
    width: 100%; font-size: 28px; font-weight: 800; letter-spacing: -0.02em;
    padding: 10px 12px; border-radius: 12px; background: var(--card-bg-strong);
    border: 1.5px solid var(--card-border); color: var(--text-primary); outline: none;
  }
  input.cta-money-input:focus { border-color: var(--accent-strong); }
  .cta-money-actions { display: flex; flex-wrap: wrap; gap: 8px; }
  .cta-money-actions .btn { flex: 1 1 auto; min-width: 104px; }
  .cta-foot { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-top: 16px; padding-top: 12px; border-top: 1px solid var(--card-border); }
  .cta-foot input {
    flex: 1 1 140px; border-radius: 12px; padding: 10px 12px; font-size: 13.5px;
    background: var(--input-bg); border: 1px solid var(--card-border);
    color: var(--text-primary); outline: none;
  }
  .cta-foot input:focus { border-color: var(--accent); }
  #newCuentaInlineName { border-radius: 12px; }
  .cta-foot .btn { flex: 0 0 auto; }
  .btn.cta-del { color: var(--red); }

  /* Apariencia: muestra viva del tema + color elegidos. */
  .appearance-preview {
    margin-top: 14px; padding: 16px; border-radius: 18px;
    background: var(--card-bg-strong); border: 1px solid var(--card-border);
    display: flex; flex-direction: column; gap: 10px;
  }
  .appearance-preview .ap-label { font-size: 12.5px; font-weight: 650; color: var(--text-secondary); }
  .appearance-preview .ap-mock { display: flex; align-items: center; gap: 10px; }
  .appearance-preview .ap-dot { width: 34px; height: 34px; border-radius: 12px; background: var(--accent-strong); flex: 0 0 auto; }
  .appearance-preview .ap-bars { flex: 1 1 auto; display: flex; flex-direction: column; gap: 6px; }
  .appearance-preview .ap-bar { height: 9px; border-radius: 999px; background: color-mix(in srgb, var(--accent-strong) 60%, transparent); }
  .appearance-preview .ap-bar.short { width: 52%; background: color-mix(in srgb, var(--accent-strong) 28%, transparent); }
  .appearance-preview .ap-pill {
    align-self: flex-start; padding: 6px 12px; border-radius: 999px; font-size: 12.5px; font-weight: 750;
    background: color-mix(in srgb, var(--accent-strong) 20%, transparent);
    border: 1px solid var(--accent-strong); color: var(--accent-strong);
  }

  /* Apariencia: tarjetas de color más grandes y con muestra ancha. */
  .accent-card-grid { grid-template-columns: repeat(auto-fit, minmax(108px, 1fr)); gap: 10px; }
  .accent-card-grid .accent-card.color-swatch {
    display: flex; flex-direction: column; align-items: flex-start; gap: 9px;
    padding: 12px; border-radius: 18px; background: var(--input-bg); border: 1.5px solid transparent;
  }
  .accent-card-grid .accent-card-chip { width: 100%; height: 36px; border-radius: 12px; display: block; }
  .accent-card-grid .accent-card.color-swatch.selected { border-color: var(--accent); background: var(--card-bg-strong); }

  /* Categorías: filas en tarjeta, con el emoji en su propia pastilla. */
  .category-manage-item {
    padding: 11px 12px; border-radius: 12px; background: var(--input-bg);
    border: 1px solid transparent; border-bottom: 1px solid transparent; margin-bottom: 8px;
  }
  .category-manage-item .cm-emoji {
    width: 34px; height: 34px; border-radius: 12px; display: grid; place-items: center;
    background: color-mix(in srgb, #FFFFFF 88%, var(--accent) 12%);
    border: 1px solid rgba(0,0,0,.07); font-size: 17px;
  }
  .category-manage-item .cm-label { font-size: 15px; font-weight: 700; }

  /* Privacidad y Cómo funciona: cada bloque, su tarjeta. */
  .privacy-card {
    margin-top: 10px; padding: 15px 16px; border-radius: 18px;
    background: var(--input-bg); border: 1px solid var(--card-border);
  }
  .privacy-card h4 { margin: 0 0 5px; font-size: 13.5px; font-weight: 750; }
  .privacy-card p { margin: 0; line-height: 1.5; }
  .help-item {
    padding: 14px 15px; border-radius: 18px; background: var(--input-bg);
    border: 1px solid var(--card-border); border-bottom: 1px solid var(--card-border);
    margin-bottom: 8px; align-items: center;
  }
  .help-item .help-emoji {
    width: 38px; height: 38px; border-radius: 12px; display: grid; place-items: center;
    background: color-mix(in srgb, #FFFFFF 88%, var(--accent) 12%);
    border: 1px solid rgba(0,0,0,.07); font-size: 17px;
  }
  /* Soporte: una sola tarjeta con la burbuja y el botón. */
  .support-card {
    margin-top: 14px; padding: 22px 18px; border-radius: 18px; text-align: center;
    background: color-mix(in srgb, var(--accent) 10%, var(--card-bg-strong));
    border: 1px solid color-mix(in srgb, var(--accent) 28%, transparent);
    display: flex; flex-direction: column; align-items: center; gap: 10px;
  }
  .support-card .sc-bubble {
    width: 54px; height: 54px; border-radius: 18px 18px 18px 8px; display: grid; place-items: center;
    font-size: 28px; background: color-mix(in srgb, #FFFFFF 88%, var(--accent) 12%);
    border: 1px solid color-mix(in srgb, var(--accent) 40%, transparent);
  }
  .support-card .sc-title { font-size: 15px; font-weight: 800; letter-spacing: -0.01em; }
  .support-card .support-mail-btn { width: 100%; margin-top: 4px; }

  .privacy-content h4 { font-size: 13.5px; font-weight: 700; margin: 16px 0 4px; }
  .privacy-content h4:first-child { margin-top: 4px; }
  .privacy-content a { color: var(--accent-strong); }
  .settings-nav-row.secondary { padding: 10px 14px; opacity: .85; }
  .settings-nav-row.secondary .settings-nav-icon { font-size: 15px; }
  .settings-nav-row.secondary .settings-nav-title { font-size: 13.5px; }
  .settings-nav-list-secondary { gap: 4px; }
  .period-chip { display:inline-flex; align-items:center; gap:6px; font-size:12.5px; font-weight:650; color:var(--text-secondary); background:var(--input-bg); border:1px solid var(--card-border); border-radius:18px; padding:6px 12px; margin-bottom:12px; }
  .movs-date-heading { font-size: 12.5px; font-weight: 700; color: var(--text-secondary); text-transform: uppercase; letter-spacing: .04em; margin: 14px 0 6px; }
  .fin-checkbox-row { display:flex; align-items:center; gap:8px; font-size:13.5px; color:var(--text-secondary); cursor:pointer; }
  .fin-checkbox-row input { width:16px; height:16px; accent-color: var(--accent); }
  .income-principal-row {
    display: flex; align-items: center; justify-content: space-between; gap: 10px;
    background: var(--input-bg); border-radius: 12px; padding: 12px 14px; margin-bottom: 12px;
  }
  .income-principal-row .label { display: block; font-size: 12.5px; color: var(--text-secondary); }
  .income-principal-row .value { display: block; font-size: 17px; font-weight: 750; margin-top: 2px; }
  .income-summary-row { display: flex; justify-content: space-between; gap: 12px; margin-bottom: 12px; }
  .income-summary-row > div { display: flex; flex-direction: column; gap: 2px; }
  .income-summary-row .label { font-size: 12.5px; color: var(--text-secondary); text-transform: uppercase; letter-spacing: .04em; }
  .income-summary-row .value { font-size: 17px; font-weight: 750; }
  .income-subheading { font-size: 13.5px; font-weight: 700; color: var(--text-secondary); margin: 14px 0 8px; }
  .move-money-direction { display: flex; gap: 8px; margin: 10px 0; }
  .move-money-direction .period-type-option { flex: 1; justify-content: center; padding: 10px 8px; font-size: 12.5px; }
  .income-choice-btn.is-wide { flex: 1 1 100%; }
  .field-amount .amount-input-wrap {
    position: relative; display: flex; align-items: center;
  }
  .field-amount .amount-input-cur {
    position: absolute; left: 14px; font-size: 17px; font-weight: 700;
    color: var(--text-secondary); pointer-events: none;
  }
  .field-amount .amount-input-wrap input {
    width: 100%; padding-left: 34px; font-size: 22px; font-weight: 700; letter-spacing: -.02em;
  }
  .income-links { display: flex; flex-direction: column; gap: 2px; margin: -4px 0 14px; }
  .income-links .fijo-switch-row { margin: 0; padding: 6px 0; }
  .income-links .field { margin: 6px 0 8px; }
  .freq-row { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
  .freq-row .income-choice-btn { padding: 10px 6px; border-radius: 12px; font-size: 13.5px; }
  .fijo-switch-row.is-on b { text-decoration: none; }
  .aviso-var-input { width: 86px; padding: 6px 8px; border-radius: 12px; border: 1px solid var(--card-border); background: var(--input-bg); color: var(--text); font-weight: 700; }
  .cuotas-row { display: grid; grid-template-columns: minmax(0,1fr) auto minmax(0,1fr); gap: 10px; align-items: center; }
  .cuotas-row input { min-width: 0; width: 100%; text-align: center; font-weight: 700; }
  .cuotas-sep { font-size: 12.5px; color: var(--text-secondary); font-weight: 600; }
  #fijoCuotasRow .income-choice-btn { padding: 12px 8px; border-radius: 12px; }
  /* Leyenda mínima bajo el selector de tipo: se ve, pero no compite. */
  .fijo-switch-row {
    display: block; margin: -6px 0 16px; padding: 2px 0; background: none; border: none;
    font-size: 11px; font-weight: 500; color: var(--text-secondary);
    text-align: left; cursor: pointer; opacity: .9;
  }
  .fijo-switch-row b { color: var(--accent); font-weight: 700; text-decoration: underline; text-underline-offset: 2px; }
  .fijo-switch-row:active { opacity: .55; }
  .income-choice-row { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 8px; }
  .income-choice-btn {
    flex: 1 1 100px; padding: 10px 10px; border-radius: 12px; background: var(--input-bg);
    border: 2px solid transparent; font-size: 12.5px; font-weight: 700; text-align: center;
  }
  .income-choice-btn.selected { border-color: var(--accent); background: var(--card-bg-strong); }
  .income-split-note { display: block; font-size: 11px; color: var(--text-secondary); font-weight: 500; margin-top: 2px; }
  #incomeSplitFields input { flex: 1; }

  .category-manage-item {
    display: flex; align-items: center; gap: 10px; padding: 10px 0; border-bottom: 1px solid var(--card-border);
  }
  .category-manage-item:last-child { border-bottom: none; }
  .category-manage-item .cm-emoji { font-size: 17px; flex: 0 0 auto; }
  .category-manage-item .cm-label { flex: 1; font-size: 15px; font-weight: 600; }
  .category-manage-item .cm-fixed-tag { font-size: 11px; color: var(--text-secondary); background: var(--input-bg); border-radius: 12px; padding: 3px 8px; }
  .category-manage-item .cm-actions { display: flex; gap: 6px; flex: 0 0 auto; }
  .category-manage-item .cm-actions button { width: 30px; height: 30px; border-radius: 50%; background: var(--input-bg); display: flex; align-items: center; justify-content: center; font-size: 13.5px; }
  .category-manage-edit-row { display: flex; gap: 8px; padding: 8px 0; align-items: center; }
  .category-manage-edit-row input#cmEditEmoji { width: 52px; flex: 0 0 52px; text-align: center; }
  .category-manage-edit-row input {
    background: var(--input-bg); border: 1px solid var(--card-border); border-radius: 12px;
    padding: 8px 10px; font-size: 13.5px; color: var(--text-primary); outline: none;
  }
  .category-manage-edit-row input#cmEditLabel { flex: 1; }

  .theme-row { display: flex; gap: 8px; margin-top: 10px; flex-wrap: wrap; }
  .theme-btn {
    flex: 1; min-width: 92px; display: flex; align-items: center; justify-content: center; gap: 6px;
    padding: 11px 8px; border-radius: 12px; background: var(--input-bg); border: 2px solid transparent;
    cursor: pointer; font-size: 13.5px; font-weight: 700; transition: border-color .15s ease;
  }
  .theme-btn .theme-icon { font-size: 15px; }
  .theme-btn.selected { border-color: var(--accent); background: var(--card-bg-strong); }

  /* Subtítulo dentro del resumen: separa las tres cajas (Caja, sobre
     Presupuesto, Ahorro) para que se lea de dónde sale cada cifra. */
  .fin-sum-group {
    font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: .09em;
    color: var(--text-secondary, #8a8f98); margin: 14px 0 2px; opacity: .85;
  }
  .fin-sum-group:first-child { margin-top: 0; }

  /* Título de grupo: se separa del bloque anterior y se pega al que abre,
     para que se lea como encabezado de lo que viene abajo. */
  .fin-group-label {
    font-size: 13.5px; font-weight: 800; text-transform: uppercase; letter-spacing: .08em;
    color: var(--accent-strong); margin: 30px 4px 0;
  }
  .fin-group-label:first-child { margin-top: 4px; }
  /* Las pestañas son flex con gap:18px, y el gap gana a los márgenes: la bajada
     se pega a su título compensando ese hueco. */
  .tab-panel > .fin-group-label + .fin-group-sub { margin-top: -14px; }
  /* La bajada de cada grupo comparte color, sangría y familia con su título:
     misma columna, mismo gris, solo cambia el peso y el cuerpo. */
  .fin-group-sub {
    font-size: 12.5px; font-weight: 500; line-height: 1.45; color: var(--text-primary);
    margin: 2px 4px 12px; max-width: 62ch; opacity: .68;
  }
  .period-type-option {
    flex: 1; display: flex; align-items: center; justify-content: center; gap: 8px;
    padding: 11px; border-radius: 12px; background: var(--input-bg); border: 2px solid transparent;
    cursor: pointer; font-size: 13.5px; font-weight: 700; transition: border-color .15s ease;
  }
  .period-type-option input[type="radio"] { accent-color: var(--accent); width: 16px; height: 16px; }
  .period-type-option:has(input:checked) { border-color: var(--accent); background: var(--card-bg-strong); }
  .period-type-option.active { border-color: var(--accent); background: var(--card-bg-strong); }
  .period-preview {
    font-size: 13.5px; font-weight: 700; color: var(--accent-strong); background: var(--input-bg);
    border-radius: 12px; padding: 10px 14px; margin: 4px 0 12px;
  }

  /* ---------- Onboarding ---------- */
  .onboarding-overlay {
    position: fixed; inset: 0; z-index: 500; background: var(--overlay);
    backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px);
    display: flex; align-items: flex-end; justify-content: center;
    animation: overlayIn .25s ease both;
  }
  @media (min-width: 640px) {
    .onboarding-overlay { align-items: center; }
  }
  .onboarding-sheet {
    width: 100%; max-width: 460px; max-height: 92vh;
    background: var(--card-bg-strong); border: 1px solid var(--card-border);
    border-radius: 26px 26px 0 0; box-shadow: var(--shadow);
    backdrop-filter: blur(24px) saturate(160%); -webkit-backdrop-filter: blur(24px) saturate(160%);
    padding: 26px 24px 22px; display: flex; flex-direction: column; gap: 18px;
    animation: onboardingSheetIn .35s cubic-bezier(.2,.8,.3,1) both;
  }
  @media (min-width: 640px) {
    .onboarding-sheet { border-radius: 26px; }
  }
  @keyframes onboardingSheetIn { from { transform: translateY(24px); opacity: 0; } to { transform: translateY(0); opacity: 1; } }
  .onboarding-dots { display: flex; justify-content: center; gap: 7px; flex: 0 0 auto; }
  .onboarding-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--card-border); transition: all .25s ease; }
  .onboarding-dot.active { width: 20px; border-radius: 5px; background: var(--accent-fill, var(--accent)); }
  .onboarding-dot.done { background: var(--accent-strong); }
  .onboarding-body {
    display: flex; flex-direction: column; gap: 14px; min-height: 200px;
    animation: onboardingStepIn .3s ease both;
    /* El scroll vive ACÁ, no en el sheet entero — así una lista larga (ej:
       varios "gastos previstos" cargados) se desplaza por dentro sola, sin
       arrastrar al footer con ella. Antes el footer scrolleaba junto con el
       contenido y terminaba tapando ítems de la lista en vez de quedar fijo
       abajo, y no se podían borrar. */
    overflow-y: auto; flex: 1 1 auto; min-height: 0;
  }
  @keyframes onboardingStepIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: translateY(0); } }
  .onboarding-body h2 { font-size: 22px; font-weight: 800; letter-spacing: -0.01em; }
  .onboarding-sub { font-size: 13.5px; color: var(--text-secondary); line-height: 1.5; margin: 0 0 14px; }
  .onboarding-body .onboarding-sub { margin-top: -6px; }
  .onboarding-body input[type="text"], .onboarding-body input[type="number"] {
    width: 100%; background: var(--input-bg); border: 1px solid var(--card-border); border-radius: 12px;
    padding: 14px 16px; font-size: 15px; color: var(--text-primary); outline: none;
  }
  .onboarding-body input:focus { border-color: var(--accent); }
  .onboarding-hint { font-size: 12.5px; color: var(--text-secondary); line-height: 1.4; }
  .onb-philosophy { display: flex; flex-direction: column; align-items: center; gap: 22px; padding: 12px 0; }
  .onb-philosophy-card {
    background: var(--input-bg); border-radius: 18px; padding: 32px 24px; text-align: center;
    min-height: 160px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 14px;
    animation: itemIn .3s ease both;
  }
  .onb-philosophy-emoji { font-size: 40px; line-height: 1; }
  .onb-philosophy-card p { font-size: 15px; line-height: 1.5; margin: 0; }
  .onb-philosophy-nav { display: flex; align-items: center; gap: 16px; }
  .onb-philosophy-arrow {
    width: 36px; height: 36px; border-radius: 50%; border: none; background: var(--input-bg);
    font-size: 17px; color: var(--text-primary); display: flex; align-items: center; justify-content: center;
  }
  .onb-philosophy-arrow:disabled { opacity: .3; }
  .onb-philosophy-dots { display: flex; gap: 6px; }
  .onb-philosophy-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--card-border); }
  .onb-philosophy-dot.active { background: var(--accent-fill, var(--accent)); width: 18px; border-radius: 4px; }
  .onboarding-footer {
    display: flex; align-items: center; gap: 10px; margin-top: 4px; flex: 0 0 auto;
    background: transparent; padding-top: 6px;
  }
  .onboarding-back { font-size: 13.5px; font-weight: 700; color: var(--text-secondary); padding: 10px 4px; visibility: hidden; }
  .onboarding-next { flex: 1; text-align: center; padding: 14px; font-size: 15px; }
  .onboarding-summary { display: flex; flex-direction: column; gap: 2px; }
  .onboarding-summary-row {
    display: flex; justify-content: space-between; padding: 10px 0; font-size: 13.5px;
    border-bottom: 1px solid var(--card-border);
  }
  .onboarding-summary-row:last-child { border-bottom: none; }
  .onboarding-summary-row .label { color: var(--text-secondary); }
  .onboarding-summary-row .value { font-weight: 700; }
  .onboarding-swatch-preview {
    width: 34px; height: 34px; border-radius: 50%; display: inline-block; vertical-align: middle;
  }

  /* ---------- Modal ---------- */
  .modal-overlay {
    position: fixed; inset: 0; background: var(--overlay);
    display: none; align-items: center; justify-content: center; padding: 20px; z-index: 100;
    backdrop-filter: blur(4px);
  }
  .modal-overlay.active { display: flex; animation: overlayIn .25s ease; }
  @keyframes overlayIn { from { opacity: 0; } to { opacity: 1; } }
  .modal {
    width: 100%; max-width: 400px; animation: modalIn .3s cubic-bezier(.2,.8,.3,1);
    max-height: 86vh; overflow-y: auto; overflow-x: hidden;
    /* El overlay de atrás (.modal-overlay) ya le pone su propio blur(4px) a
       todo el fondo. Si el modal ENCIMA le suma otro blur fuerte, el efecto
       se anula solo y termina viéndose como una tarjeta plana en vez de
       vidrio — por eso aquí el blur es bajo, y la transparencia real la da
       la opacidad más baja de --modal-bg. */
    background: var(--modal-bg);
    backdrop-filter: blur(10px) saturate(150%); -webkit-backdrop-filter: blur(10px) saturate(150%);
  }
  @keyframes modalIn { from { opacity: 0; transform: translateY(18px) scale(.97); } to { opacity: 1; transform: translateY(0) scale(1); } }
  .modal h2 { font-size: 17px; font-weight: 750; margin-bottom: 16px; }
  .field { display: flex; flex-direction: column; gap: 6px; font-size: 13.5px; color: var(--text-secondary); margin-bottom: 14px; }
  .field-section-title { font-size: 13.5px; font-weight: 700; margin: 4px 0 8px; }
  .field input, .field select {
    background: var(--input-bg); border: 1px solid var(--card-border); border-radius: 12px;
    padding: 11px 14px; font-size: 15px; color: var(--text-primary); outline: none;
  }
  .field input:focus, .field select:focus { border-color: var(--accent); }

  /* ---------- Desplegable propio (reemplaza el <select> nativo para que la
     lista abierta siga la estética de la app; el <select> queda oculto como
     fuente de verdad). Se abre "inline" para no recortarse en modales con scroll. */
  .cselect { position: relative; width: 100%; }
  .cselect-btn {
    width: 100%; display: flex; align-items: center; justify-content: space-between; gap: 10px;
    background: var(--input-bg); border: 1px solid var(--card-border); border-radius: 12px;
    padding: 11px 14px; font-size: 15px; color: var(--text-primary); cursor: pointer; text-align: left;
    transition: border-color .15s ease;
  }
  .cselect.open .cselect-btn, .cselect-btn:focus-visible { border-color: var(--accent); }
  .cselect-label { flex: 1 1 auto; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .cselect-chev { flex: 0 0 auto; font-size: 12.5px; color: var(--text-secondary); transition: transform .18s ease; }
  .cselect.open .cselect-chev { transform: rotate(180deg); }
  .cselect-panel {
    display: none; margin-top: 6px; background: var(--card-bg-strong);
    border: 1px solid var(--card-border); border-radius: 12px; padding: 5px;
    max-height: 240px; overflow-y: auto;
  }
  .cselect.open .cselect-panel { display: block; animation: cselectIn .16s ease; }
  @keyframes cselectIn { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: translateY(0); } }
  .cselect-opt {
    width: 100%; display: block; text-align: left; padding: 10px 12px; border-radius: 12px;
    font-size: 13.5px; color: var(--text-primary); cursor: pointer; background: transparent;
  }
  .cselect-opt:hover { background: var(--input-bg); }
  .cselect-opt.sel { background: var(--accent-fill, var(--accent)); color: var(--on-accent, #fff); font-weight: 650; }
  .cselect-opt.disabled { color: var(--text-secondary); opacity: .5; cursor: not-allowed; }
  .cselect-opt.disabled:hover { background: transparent; }
  .modal-actions { display: flex; gap: 10px; margin-top: 6px; }
  .modal-actions .btn { flex: 1; text-align: center; }

  /* ---------- Ajustes: navegación tipo "puertas" ---------- */
  .settings-panel { display: flex; flex-direction: column; }
  .settings-panel-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }
  .settings-panel-header-root { margin-bottom: 16px; }
  .settings-back-btn {
    align-self: flex-start; display: inline-flex; align-items: center; gap: 6px;
    font-size: 13.5px; font-weight: 700; color: var(--accent-strong);
    background: var(--card-bg-strong); border: 1px solid var(--card-border);
    border-radius: 12px; padding: 9px 15px;
    transition: border-color .15s ease, background .15s ease, transform .15s ease;
  }
  .settings-back-btn:hover { border-color: var(--accent); }
  .settings-back-btn:active { transform: scale(.96); }
  .settings-close-x {
    width: 30px; height: 30px; border-radius: 50%; background: var(--input-bg);
    display: flex; align-items: center; justify-content: center; font-size: 13.5px; flex: 0 0 auto;
  }
  .settings-close-x:hover { background: var(--card-bg-strong); }
  .settings-nav-list { display: flex; flex-direction: column; gap: 8px; margin: 4px 0 18px; }
  .range-report-row { display: flex; gap: 10px; margin-top: 8px; flex-wrap: wrap; }
  /* Título de sección dentro de modales y paneles: separa bloques que antes
     se leían como un campo más (ej. "Gastos"). */
  .field-section { margin-top: 20px; padding-top: 16px; border-top: 1px solid var(--card-border); }
  .field-section > span:first-child {
    display: block; font-size: 15px; font-weight: 800; letter-spacing: -0.01em;
    color: var(--text-primary); margin-bottom: 2px;
  }
  .field-section > .extra-sub { margin-top: 0; }
  #pmIntro { padding: 15px 16px; line-height: 1.5; margin-bottom: 16px; }
  #pmIntro p { font-size: 13.5px; }
  #pmIntro .tip-ok { margin-top: 14px; }
  .past-month-list { display: flex; flex-direction: column; gap: 6px; margin-top: 10px; }
  .past-month-row {
    display: flex; align-items: center; gap: 10px; padding: 9px 11px;
    background: var(--input-bg); border-radius: 12px; font-size: 13.5px;
  }
  .past-month-row .pm-date { color: var(--text-secondary); flex: 0 0 auto; font-weight: 600; }
  .past-month-row .pm-concept { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .past-month-row .pm-amount { font-weight: 700; white-space: nowrap; }
  .past-month-row .pm-del { width: 24px; height: 24px; border-radius: 12px; opacity: .7; flex: 0 0 auto; }
  .past-month-row .pm-del:hover { opacity: 1; color: var(--red); }
  .report-month-select {
    flex: 1 1 160px; padding: 12px 14px; border-radius: 12px;
    background: var(--input-bg); border: 1px solid var(--card-border); font-size: 13.5px; font-weight: 600;
  }
  .range-report-field { flex: 1 1 140px; margin: 0; }
  .settings-nav-row {
    display: flex; align-items: center; gap: 12px; width: 100%; text-align: left;
    background: var(--card-bg-strong); border: 1px solid var(--card-border); border-radius: 12px;
    padding: 13px 14px;
    transition: transform .18s cubic-bezier(.2,.8,.3,1), background .18s ease, border-color .18s ease, box-shadow .18s ease;
  }
  .settings-nav-row:hover {
    border-color: var(--accent);
    background: color-mix(in srgb, var(--accent) 18%, var(--card-bg-strong));
    transform: translateX(8px) scale(1.015);
    box-shadow: -4px 0 0 0 var(--accent), 0 10px 24px -14px color-mix(in srgb, var(--accent) 70%, transparent);
  }
  .settings-nav-row:active { transform: translateX(5px) scale(.985); }
  .settings-nav-row .settings-nav-icon,
  .settings-nav-row .settings-nav-chevron { transition: transform .18s cubic-bezier(.2,.8,.3,1); }
  .settings-nav-row:hover .settings-nav-icon { transform: scale(1.14) rotate(-6deg); }
  .settings-nav-row:hover .settings-nav-chevron { transform: translateX(4px); }
  .settings-nav-row[style*="cursor:default"]:hover { transform: none; box-shadow: none; }
  .settings-nav-row.danger .settings-nav-title { color: var(--red); }
  /* Los emojis de sistema traen su propio color (el 💱 es azul oscuro) y sobre
     un fondo oscuro se perdían. Van sobre una placa clara siempre: así se leen
     igual en tema claro y oscuro. */
  .settings-nav-icon {
    font-size: 17px; flex: 0 0 auto; width: 34px; height: 34px; border-radius: 12px;
    display: grid; place-items: center;
    background: color-mix(in srgb, #FFFFFF 88%, var(--accent) 12%);
    border: 1px solid rgba(0,0,0,.07);
  }
  .settings-nav-text { display: flex; flex-direction: column; gap: 1px; flex: 1; min-width: 0; }
  .settings-nav-title { font-size: 15px; font-weight: 700; }
  .settings-nav-sub { font-size: 12.5px; color: var(--text-secondary); }
  .settings-nav-chevron { font-size: 22px; color: var(--text-secondary); flex: 0 0 auto; }
  /* Ajustes es ahora una pestaña completa (contenedor .settings-screen), no un
     modal; conservamos el tamaño de sus títulos que antes daba ".modal h2". */
  #settingsModalOverlay h2 { font-size: 17px; font-weight: 750; margin-bottom: 16px; }
  .confirm-modal #confirmModalMessage { font-size: 15px; line-height: 1.5; margin-bottom: 18px; }
  .settings-week-row { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }
  .settings-week-row .settings-week-check { display: flex; align-items: center; gap: 8px; flex: 1; min-width: 0; cursor: pointer; }
  .settings-week-row .settings-week-check input[type="checkbox"] { flex: 0 0 auto; width: 17px; height: 17px; accent-color: var(--accent); }
  .settings-week-row .settings-week-check span { font-size: 13.5px; color: var(--text-secondary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .settings-week-row input[type="number"] { width: 92px; flex: 0 0 auto; }
  .settings-week-row.closed { justify-content: space-between; opacity: .6; }
  .settings-week-row.closed .settings-week-closed-label { font-size: 13.5px; color: var(--text-secondary); }
  .settings-week-row.closed .settings-week-closed-label em { font-style: normal; color: var(--text-secondary); opacity: .8; }
  .settings-week-row.closed .settings-week-closed-value { font-size: 13.5px; font-weight: 700; flex: 0 0 auto; }
  .settings-week-row input[type="number"]:disabled { opacity: .5; }

  /* ---------- Floating add button ---------- */
  .fab {
    --fab-color: var(--accent); --fab-ink: #fff;
    position: fixed; bottom: calc(84px + env(safe-area-inset-bottom)); right: 28px; width: 54px; height: 54px; border-radius: 50%;
    background: var(--fab-color); color: var(--fab-ink); font-size: 28px; font-weight: 700;
    display: flex; align-items: center; justify-content: center; line-height: 1;
    box-shadow:
      0 6px 18px -6px rgba(0,0,0,.45),
      0 0 0 1px color-mix(in srgb, var(--fab-color) 35%, transparent);
    z-index: 90; transition: transform .15s ease, box-shadow .2s ease;
  }
  /* Color destacado del "+" según el tema/acento elegido (dentro de su gama).
     La tinta del signo va oscura sobre colores claros (verde manzana, amarillo,
     azul claro) y blanca sobre el rosa fuerte, para que siempre se lea bien. */
  /* El "+" es el signo dorado de la marca sobre los fondos oscuros; en claro
     toma el acento del tema para que no se lave sobre la arena. */
  :root[data-theme="dark"] .fab { --fab-color: var(--accent-fill, var(--accent)); --fab-ink: var(--on-accent, #fff); }
  :root[data-theme="dark"][data-accent="negro"] .fab { --fab-color: #F2F2F2; --fab-ink: #111111; }
  .davide-fab {
    left: 28px; right: auto; font-size: 28px;
    background: var(--card-bg-strong); color: var(--text-primary);
    box-shadow: 0 6px 18px -6px rgba(0,0,0,.45), 0 0 0 1px var(--card-border);
  }
  .davide-fab img { width: 34px; height: 34px; object-fit: contain; }
  @media (max-width: 380px) { .davide-fab { left: 22px; width: 52px; height: 52px; font-size: 22px; bottom: calc(82px + env(safe-area-inset-bottom)); } .davide-fab img { width: 30px; height: 30px; } }
  /* ---------- Escanear ticket dentro del modal de gasto ---------- */
  .ticket-scan { margin-bottom: 14px; }
  .ticket-scan-btn {
    width: 100%; display: flex; align-items: center; gap: 12px; text-align: left;
    padding: 12px 14px; border-radius: 18px;
    background: color-mix(in srgb, var(--accent) 12%, var(--input-bg));
    border: 1px solid color-mix(in srgb, var(--accent) 40%, var(--card-border));
    transition: background .18s ease, transform .15s ease, opacity .18s ease;
  }
  .ticket-scan-btn:hover { background: color-mix(in srgb, var(--accent) 18%, var(--input-bg)); }
  .ticket-scan-btn:active { transform: scale(.985); }
  .ticket-scan-btn:disabled { opacity: .6; cursor: default; }
  .ticket-scan-mark { width: 36px; height: 36px; border-radius: 12px; flex: none; display: block; object-fit: cover; }
  .ticket-scan-text { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
  .ticket-scan-title { font-size: 15px; font-weight: 750; }
  .ticket-scan-sub { font-size: 12.5px; color: var(--text-secondary); }
  .ticket-scan-cta { font-size: 17px; flex: none; }
  .ticket-scan-status { font-size: 12.5px; line-height: 1.45; margin-top: 8px; padding: 8px 12px; border-radius: 12px; background: var(--input-bg); color: var(--text-secondary); }
  .ticket-scan-status.is-ok { color: var(--text-primary); background: color-mix(in srgb, var(--green) 16%, var(--input-bg)); }
  .ticket-scan-status.is-error { color: var(--text-primary); background: color-mix(in srgb, var(--red) 14%, var(--input-bg)); }

  /* Opciones avanzadas de una cuenta: plegadas, para que la acción principal
     (actualizar saldo) no compita con sumar/restar y renombrar. */
  .cuenta-advanced { margin-top: 16px; border-top: 1px solid var(--card-border); padding-top: 10px; }
  .cuenta-advanced summary { font-size: 12.5px; font-weight: 650; color: var(--text-secondary); cursor: pointer; list-style: none; }
  .cuenta-advanced summary::-webkit-details-marker { display: none; }
  .cuenta-advanced summary::after { content: " ▾"; }
  .cuenta-advanced[open] summary::after { content: " ▴"; }

  .davide-modal { max-width: 480px; padding-top: 46px; position: relative; }
  /* Barra de acciones: los dos accesorios (dictar / ticket) son chips compactos
     y Enviar se queda con el ancho — antes los tres competian igual y no se
     entendía cuál era la acción principal. */
  .davide-actions { display: flex; flex-wrap: nowrap; gap: 8px; align-items: stretch; }
  .davide-actions .dv-chip {
    flex: none; display: inline-flex; align-items: center; gap: 6px;
    min-height: 46px; padding: 0 14px; border-radius: 12px;
    border: 1px solid var(--card-border); background: var(--input-bg);
    color: var(--text-primary); font-family: inherit; font-size: 13.5px; font-weight: 650;
    white-space: nowrap; cursor: pointer;
  }
  .davide-actions .dv-chip:active { background: color-mix(in srgb, var(--text-primary) 8%, var(--input-bg)); }
  .davide-actions .dv-chip-ico { font-size: 15px; line-height: 1; }
  .davide-actions .btn.primary { flex: 1 1 auto; min-width: 0; min-height: 46px; width: auto; }
  /* La X de cerrar iba al final del flujo, pegada al botón "Foto de ticket".
     Ahora vive en la esquina superior derecha, con aire propio. */
  .davide-modal .settings-close-x { position: absolute; top: 14px; right: 14px; }
  /* Interruptor del sonidito, al lado de la X. */
  .dv-sound-btn {
    position: absolute; top: 14px; right: 54px;
    width: 34px; height: 34px; border-radius: 12px;
    display: flex; align-items: center; justify-content: center;
    border: 1px solid var(--card-border); background: var(--input-bg);
    color: var(--text-primary); font-size: 15px; line-height: 1; cursor: pointer;
  }
  .dv-sound-btn:active { background: color-mix(in srgb, var(--text-primary) 8%, var(--input-bg)); }
  .davide-modal h2 { padding-right: 88px; }
  .davide-modal .modal-actions { margin-top: 14px; }
  #davideStateInput .modal-actions { flex-wrap: nowrap; }
  #davideStateInput .modal-actions .btn { min-width: 0; }
  .davide-modal textarea {
    width: 100%; box-sizing: border-box; padding: 13px 15px; border-radius: 18px;
    border: 1px solid var(--card-border); background: var(--input-bg); color: var(--text-primary);
    font-size: 15px; font-family: inherit; resize: vertical; min-height: 64px; margin-bottom: 10px;
    transition: border-color .15s ease, box-shadow .15s ease;
  }
  .davide-modal textarea::placeholder { color: var(--text-secondary); }
  .davide-modal textarea:focus {
    outline: none; border-color: var(--accent);
    box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 22%, transparent);
  }
  .davide-photo-preview { max-width: 100%; max-height: 160px; border-radius: 12px; display: block; margin-bottom: 8px; }

  /* ---------- Pinky: hilo de conversación ---------- */
  .davide-chat {
    display: flex; flex-direction: column; gap: 10px;
    max-height: 42vh; overflow-y: auto; overflow-x: hidden;
    padding: 4px 7px 12px; margin-bottom: 4px;
    /* El hilo se desvanece arriba en vez de cortarse con una línea dura. */
    mask-image: linear-gradient(to bottom, transparent 0, #000 14px);
    -webkit-mask-image: linear-gradient(to bottom, transparent 0, #000 14px);
  }
  /* Cada mensaje vive en una fila: la de Pinky lleva su cara al lado, la del
     usuario no. Es lo que hace que de un vistazo se vea quién habla, sin
     depender solo del lado al que está alineada la burbuja. */
  .dv-row { display: flex; gap: 8px; align-items: flex-end; max-width: 100%; }
  .dv-row-davide { justify-content: flex-start; }
  .dv-row-user { justify-content: flex-end; }
  .dv-avatar {
    width: 28px; height: 28px; border-radius: 12px; flex: none;
    object-fit: cover; display: block; margin-bottom: 2px;
  }
  .dv-msg {
    position: relative; max-width: 82%; padding: 11px 14px; border-radius: 18px;
    font-size: 15px; line-height: 1.5; white-space: pre-wrap;
    animation: dvIn .22s ease both;
  }
  /* Pinky: fondo sólido y tinta plena. La esquina inferior recortada apunta a
     su avatar — probamos con una colita en ::after y se veía como una cuña
     suelta, separada del borde. La esquina sola da el mismo efecto, limpio. */
  .dv-msg.dv-davide {
    align-self: flex-start; border-bottom-left-radius: 5px;
    background: color-mix(in srgb, var(--text-primary) 9%, var(--input-bg));
    color: var(--text-primary);
  }
  /* Usuario: el color de marca, con la esquina recortada del lado opuesto. */
  .dv-msg.dv-user {
    align-self: flex-end; border-bottom-right-radius: 5px;
    background: color-mix(in srgb, var(--accent) 88%, #000); color: #fff; font-weight: 500;
  }
  .dv-msg.dv-note { align-self: center; background: none; color: var(--text-secondary); font-size: 12.5px; padding: 2px 0; max-width: 100%; text-align: center; }
  .dv-typing { display: flex; gap: 4px; align-items: center; }
  .dv-typing span {
    width: 6px; height: 6px; border-radius: 50%; background: var(--text-secondary);
    animation: dvBlink 1.1s infinite;
  }
  .dv-typing span:nth-child(2) { animation-delay: .18s; }
  .dv-typing span:nth-child(3) { animation-delay: .36s; }
  @keyframes dvBlink { 0%, 60%, 100% { opacity: .25; } 30% { opacity: 1; } }
  @keyframes dvIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }

  /* ---------- Pinky: tarjeta de confirmación ---------- */
  /* Es lo que más se ve en el uso real: deja de ser un párrafo suelto y pasa a
     leerse como una ficha con encabezado, dato y las dos salidas claras. */
  .dv-registro {
    border: 1px solid var(--card-border); border-radius: 18px;
    padding: 14px 15px 15px; margin-bottom: 12px;
    background: var(--input-bg);
    animation: dvIn .22s ease both;
  }
  .dv-registro-head {
    display: flex; align-items: center; gap: 7px;
    font-size: 11px; font-weight: 750; letter-spacing: .06em; text-transform: uppercase;
    color: var(--text-secondary); margin: 0 0 10px;
  }
  .dv-registro-head img { width: 18px; height: 18px; border-radius: 6px; display: block; }
  .davide-registro-summary {
    font-size: 15px; line-height: 1.45; font-weight: 600; color: var(--text-primary);
    background: none; border-radius: 0; padding: 0; margin: 0 0 12px;
  }
  .dv-registro .field { margin-bottom: 10px; }
  .dv-registro .modal-actions { margin-top: 12px; display: flex; gap: 8px; }
  .dv-registro .modal-actions .btn { flex: 1 1 0; min-width: 0; min-height: 46px; }
  /* ============================================================
     MES COMO CONTEXTO GLOBAL
     El selector vive en el header y es el mismo en las cuatro pestañas.
     Sustituye a los .period-chip que cada pestaña tenía por su cuenta (se
     ocultan, no se borran: el JS que los rellena sigue intacto).
  ============================================================ */
  .month-nav { display: flex; align-items: center; gap: 2px; flex: none; margin-left: auto; }
  .month-nav-arrow {
    width: 30px; height: 30px; display: grid; place-items: center; flex: none;
    border-radius: 12px; font-size: 22px; line-height: 1; color: var(--text-secondary);
  }
  .month-nav-arrow:hover { background: var(--card-bg-strong); color: var(--text-primary); }
  .month-nav-arrow:active { transform: scale(.88); }
  .month-nav-label {
    font-size: 13.5px; font-weight: 700; letter-spacing: .09em; text-transform: uppercase;
    color: var(--text-primary); padding: 4px 9px; border-radius: 12px; white-space: nowrap;
  }
  .month-nav-label:hover { background: var(--card-bg-strong); }
  .month-nav.is-other .month-nav-label { color: var(--accent); }
  .period-chip { display: none !important; }
  /* Fuera del mes actual, el subtítulo ("14 de Septiembre") contradice al
     selector: se aparta y manda el mes elegido. */
  body.viewing-other-month .subtitle-row { display: none; }

  /* No bloquear el futuro: avisar y dejar cargar igual. */
  .other-period {
    position: relative; display: flex; gap: 12px; align-items: flex-start;
    background: color-mix(in srgb, var(--c-rosa-2) 15%, var(--card-bg));
    border: 1px solid color-mix(in srgb, var(--c-rosa-2) 42%, transparent);
    border-radius: 18px; padding: 14px 40px 14px 15px; margin-bottom: 14px;
  }
  .other-period-icon { font-size: 17px; line-height: 1.3; flex: none; }
  .other-period-body { flex: 1; min-width: 0; }
  .other-period-title { display: block; font-size: 15px; font-weight: 700; margin-bottom: 3px; }
  .other-period-sub { font-size: 13.5px; color: var(--text-secondary); line-height: 1.45; margin: 0 0 11px; }
  .other-period-back {
    display: inline-flex; align-items: center; gap: 7px; font-size: 13.5px; font-weight: 600;
    padding: 8px 13px; border-radius: 12px; white-space: nowrap;
    border: 1px solid color-mix(in srgb, var(--c-rosa-2) 55%, transparent);
    background: color-mix(in srgb, var(--c-rosa-2) 14%, transparent);
  }
  .other-period-back:active { transform: scale(.97); }
  .other-period-close { position: absolute; top: 9px; right: 11px; font-size: 15px; color: var(--text-secondary); padding: 4px 6px; }

  /* Los movimientos, debajo del balance: el número y su prueba, juntos. */
  .mov-section { margin-top: 20px; }
  .mov-section-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; margin: 0 2px 4px; }
  .mov-section-title { font-size: 15px; font-weight: 700; }
  .mov-all-link { font-size: 13.5px; font-weight: 600; color: var(--accent); padding: 4px 2px; white-space: nowrap; }
  .mov-day-head { display: flex; justify-content: space-between; align-items: baseline; margin: 15px 2px 8px; font-size: 13.5px; font-weight: 700; text-transform: capitalize; }
  .mov-day-total { color: var(--text-secondary); font-weight: 600; font-variant-numeric: tabular-nums; text-transform: none; }
  .mov-row {
    display: flex; align-items: center; gap: 12px; width: 100%; text-align: left;
    background: var(--card-bg); border: 1px solid var(--card-border);
    border-radius: 12px; padding: 12px 14px; margin-bottom: 8px;
  }
  /* Editar y borrar desde la lista: en la misma fila, a la izquierda del
     importe. No se muestran de entrada (ensucian la lectura del mes): en
     escritorio aparecen al pasar el ratón, en móvil al tocar la fila. */
  .mov-row.is-actionable { cursor: pointer; }
  .mov-acts {
    display: flex; gap: 6px; flex: none; align-items: center;
    max-width: 0; opacity: 0; overflow: hidden;
    transition: max-width .18s ease, opacity .14s ease;
  }
  /* Caben hasta TRES botones (marcar pagado/cobrado, editar, borrar): con 74px
     el tacho quedaba cortado. */
  .mov-row.is-open .mov-acts { max-width: 112px; opacity: 1; }
  @media (hover: hover) {
    .mov-row.is-actionable:hover .mov-acts { max-width: 112px; opacity: 1; }
  }
  /* Solo el lápiz y el tacho: un botón con texto pesaba más que la propia fila. */
  .mov-act {
    width: 30px; height: 30px; padding: 0; border-radius: 12px; cursor: pointer;
    display: grid; place-items: center; font-size: 13.5px; line-height: 1; flex: none;
    border: 1px solid var(--card-border); background: var(--input-bg);
    color: var(--text-primary); font-family: inherit;
  }
  .mov-act:active { background: color-mix(in srgb, var(--text-primary) 8%, var(--input-bg)); }
  .mov-icon { width: 38px; height: 38px; border-radius: 50%; display: grid; place-items: center; font-size: 17px; background: var(--card-bg-strong); flex: none; }
  .mov-text { flex: 1; min-width: 0; }
  .mov-concept { display: block; font-size: 15px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .mov-cat { display: block; font-size: 12.5px; color: var(--text-secondary); }
  .mov-amount { font-size: 15px; font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap; }
  .mov-empty { text-align: center; color: var(--text-secondary); font-size: 13.5px; padding: 26px 12px; background: var(--card-bg); border: 1px solid var(--card-border); border-radius: 18px; }

  /* Mirando otro mes: las tarjetas del mes EN CURSO se apartan y entra un
     resumen del mes consultado. Si no, la pantalla muestra el balance de
     septiembre encima de los movimientos de agosto — dos números distintos
     para el mismo mes, justo lo que veníamos a quitar. */
  #monthSummaryCard { display: none; }
  body.viewing-other-month #monthSummaryCard { display: block; }
  body.viewing-other-month #tab-inicio .summary-card:not(#monthSummaryCard),
  body.viewing-other-month #tab-inicio .savings-banner,
  body.viewing-other-month #tab-inicio #paraVosCard,
  body.viewing-other-month #tab-inicio #newMonthReminderCard { display: none !important; }
  .ms-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: 14px; }
  #monthSummaryCard { margin-bottom: 18px; }
  /* Inicio responde UNA pregunta. El resto del dinero (principal, ahorro) y
     los fijos son consulta, no protagonismo: una tira de tres celdas chicas.
     El banner grande de ahorro se conserva en el DOM (renderSavings escribe
     dentro) pero deja de ocupar media pantalla. */
  #savingsCard { display: none !important; }
  .money-strip { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-top: 12px; }
  /* La tira son saldos de HOY, no del mes filtrado: fuera del mes actual se
     aparta, para no mostrar cifras de septiembre bajo un título de agosto. */
  body.viewing-other-month .money-strip { display: none; }
  .money-cell {
    display: flex; flex-direction: column; gap: 3px; text-align: left;
    background: var(--card-bg); border: 1px solid var(--card-border);
    border-radius: 12px; padding: 11px 12px; min-width: 0;
  }
  .money-cell:active { transform: scale(.98); }
  .money-cell .label { font-size: 11px; color: var(--text-secondary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .money-cell .value { font-size: 15px; font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  /* El ahorro no es del mes: es general. Se distingue por color para que no se
     lea como una cifra más del periodo, y en vez de un importe invita a entrar. */
  .money-cell.is-ahorro {
    background: color-mix(in srgb, var(--accent) 12%, var(--card-bg));
    border-color: color-mix(in srgb, var(--accent) 38%, transparent);
  }
  .money-cell.is-ahorro .value { font-size: 13.5px; color: var(--accent); }

  .ms-fijo-day { font-size: 11px; color: var(--text-secondary); font-weight: 600; flex: none; }

  .ms-fijos-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; font-size: 13.5px; font-weight: 700; color: var(--text-secondary); cursor: pointer; list-style: none; }
  .ms-fijos-head::-webkit-details-marker { display: none; }
  .ms-fijos-head-right { display: flex; align-items: center; gap: 8px; color: var(--text-primary); font-variant-numeric: tabular-nums; }
  .ms-fijos-chev { transition: transform .18s ease; color: var(--text-secondary); }
  #fijosMesDetails[open] .ms-fijos-chev { transform: rotate(180deg); }
  #msFijosList { margin-top: 12px; }
  /* El "+" flota abajo a la derecha: aire al final de la última fila. */
  #fijosMesDetails[open] #msFijosList { padding-bottom: 8px; }
  .ms-fijo-row { display: flex; align-items: center; gap: 10px; padding: 9px 12px; border-radius: 12px; background: var(--card-bg-strong); margin-bottom: 6px; }
  .ms-fijo-name { flex: 1; min-width: 0; font-size: 13.5px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .ms-fijo-amount { font-size: 13.5px; font-weight: 700; font-variant-numeric: tabular-nums; }
  .ms-fijo-badge { font-size: 11px; font-weight: 700; padding: 2px 7px; border-radius: 999px; background: color-mix(in srgb, var(--accent) 22%, transparent); color: var(--accent-strong, var(--accent)); flex: none; }
  .ms-cell { background: var(--card-bg-strong); border-radius: 12px; padding: 12px 13px; }
  .ms-cell .label { display: block; font-size: 12.5px; color: var(--text-secondary); margin-bottom: 3px; }
  .ms-cell .value { display: block; font-size: 15px; font-weight: 700; font-variant-numeric: tabular-nums; }

  /* El "+" flota sobre la lista: aire al final para que no tape el importe
     de la última fila. */
  #inicioMovList { padding-bottom: 84px; }

  /* Una sola puerta de entrada: el "+" con exactamente tres caminos. */
  .plus-sheet { max-width: 460px; padding: 46px 18px 18px; position: relative; }
  /* Mismo patrón que .davide-modal: sin esto la X queda en flujo y cae debajo
     de las tarjetas, en la esquina inferior izquierda. */
  .plus-sheet .settings-close-x { position: absolute; top: 14px; right: 14px; }
  .plus-assist {
    display: flex; align-items: center; gap: 14px; width: 100%; text-align: left;
    background: color-mix(in srgb, var(--accent) 13%, var(--card-bg));
    border: 1px solid color-mix(in srgb, var(--accent) 42%, transparent);
    border-radius: 18px; padding: 15px 16px; margin-bottom: 14px;
  }
  .plus-assist:active { transform: scale(.985); }
  .plus-assist-mark { width: 46px; height: 46px; border-radius: 50%; flex: none; object-fit: cover; background: var(--card-bg-strong); }
  .plus-assist-text { flex: 1; min-width: 0; }
  .plus-assist-title { display: block; font-size: 15px; font-weight: 700; }
  .plus-assist-sub { display: block; font-size: 13.5px; color: var(--text-secondary); margin-top: 1px; }
  .plus-assist-chev { color: var(--text-secondary); font-size: 17px; flex: none; }
  .plus-pair { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
  .plus-card {
    display: flex; flex-direction: column; align-items: center; gap: 9px;
    background: var(--card-bg); border: 1px solid var(--card-border);
    border-radius: 18px; padding: 20px 12px;
  }
  .plus-card:active { transform: scale(.97); }
  /* Analizar: mismo hover que las filas de Inicio (tinte suave, sin saltos). */
  #tab-estadisticas .category-row, #tab-estadisticas .category-detail-row, #tab-estadisticas .pf-bar-row,
  #tab-estadisticas .pf-split-row, #tab-estadisticas .pf-row, #tab-estadisticas .settings-nav-row,
  #tab-estadisticas .accordion-toggle, #tab-estadisticas .fact-card {
    transition: background var(--pf-fast, .15s) ease;
  }
  #tab-estadisticas .category-row:hover, #tab-estadisticas .category-detail-row:hover, #tab-estadisticas .pf-bar-row:hover,
  #tab-estadisticas .pf-split-row:hover, #tab-estadisticas .pf-row:hover, #tab-estadisticas .settings-nav-row:hover,
  #tab-estadisticas .accordion-toggle:hover {
    background: color-mix(in srgb, var(--accent) 7%, var(--card-bg)); transform: none;
  }
  #tab-estadisticas .fact-card:hover { background: color-mix(in srgb, var(--accent) 7%, var(--card-bg)); }
  /* Ajuste: el tinte con esquinas redondeadas y un poco de aire, sin marco negro al hacer clic. */
  #tab-estadisticas .category-row-toggle, #tab-estadisticas .pf-bar-row, #tab-estadisticas .pf-split-row, #tab-estadisticas .category-detail-row {
    border-radius: 12px; margin-left: -8px; margin-right: -8px; padding-left: 8px; padding-right: 8px;
    border: 0; outline: none; box-sizing: border-box; width: calc(100% + 16px);
  }
  #tab-estadisticas .category-row-toggle:hover { background: color-mix(in srgb, var(--accent) 7%, var(--card-bg)); }
  #tab-estadisticas .category-row-toggle:focus:not(:focus-visible), #tab-estadisticas .accordion-toggle:focus:not(:focus-visible) { outline: none; }
  #tab-estadisticas .category-row-toggle:focus-visible, #tab-estadisticas .accordion-toggle:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 12px; }
  /* Plegables: sin bloque de fondo (quedaba cuadrado dentro de la tarjeta redonda); se mueve la flecha. */
  #tab-estadisticas .accordion-toggle:hover { background: transparent; }
  #tab-estadisticas .accordion-toggle .accordion-chevron { transition: transform var(--pf-fast, .15s) ease; }
  #tab-estadisticas .accordion-toggle:hover .accordion-chevron { transform: translateY(2px); }
  #tab-estadisticas .accordion-toggle:hover .accordion-title { color: var(--accent-strong); }
  /* Hover (24 sep): solo se marca la opción bajo el cursor, nunca la hoja entera. */
  .plus-sheet.card:hover { transform: none; box-shadow: var(--shadow); border-color: var(--card-border); }
  .plus-sheet.card:hover::before { opacity: 0; }
  .plus-assist, .plus-card { transition: background var(--pf-fast, .15s) ease, border-color var(--pf-fast, .15s) ease; cursor: pointer; }
  .plus-assist:hover { background: color-mix(in srgb, var(--accent) 20%, var(--card-bg)); }
  .plus-card:hover { background: var(--card-bg-strong); border-color: color-mix(in srgb, var(--accent) 45%, var(--card-border)); }
  .plus-card-ico { width: 52px; height: 52px; border-radius: 50%; display: grid; place-items: center; font-size: 22px; }
  .plus-card.is-gasto .plus-card-ico { background: color-mix(in srgb, var(--c-rosa) 24%, transparent); }
  .plus-card.is-ingreso .plus-card-ico { background: color-mix(in srgb, #3F7D6E 28%, transparent); }
  .plus-card-title { font-size: 15px; font-weight: 700; }
  .plus-card-sub { font-size: 12.5px; color: var(--text-secondary); }

  /* Anillo pulsante retirado: el "+" ahora es más discreto. */
  .fab::after { content: none; }
  /* El "+" se puede arrastrar para reubicarlo; la posición se guarda por dispositivo. */
  #fabAddBtn { touch-action: none; cursor: grab; }
  .fab.dragging { cursor: grabbing; transition: none; }
  @keyframes fabPulse {
    0%   { opacity: .7; transform: scale(1); }
    70%  { opacity: 0;  transform: scale(1.45); }
    100% { opacity: 0;  transform: scale(1.45); }
  }
  @media (prefers-reduced-motion: reduce) { .fab::after { animation: none; opacity: 0; } }
  .fab:hover { transform: scale(1.06); }
  .fab:active { transform: scale(.92); }

  /* Popover: al tocar/clicar un nombre largo se muestra completo y en grande. */
  .concept-popover {
    position: fixed; z-index: 300; max-width: 340px;
    background: var(--card-bg-strong); color: var(--text-primary);
    border: 1px solid var(--card-border); border-radius: 12px;
    padding: 10px 14px; font-size: 15px; font-weight: 650; line-height: 1.38;
    box-shadow: var(--shadow); backdrop-filter: blur(20px) saturate(160%); -webkit-backdrop-filter: blur(20px) saturate(160%);
    overflow-wrap: anywhere; white-space: normal; pointer-events: none;
    opacity: 0; transform: translateY(4px) scale(.97);
    transition: opacity .14s ease, transform .14s ease;
  }
  .concept-popover.show { opacity: 1; transform: translateY(0) scale(1); }

  /* ---------- Toasts ---------- */
  #toastContainer { position: fixed; bottom: 96px; left: 50%; transform: translateX(-50%); display: flex; flex-direction: column; gap: 8px; z-index: 9998; max-width: 90vw; }
  /* Con un modal abierto el toast caía justo sobre sus campos y los textos se
     pisaban: baja al borde inferior y se vuelve opaco para leerse solo. */
  body:has(.modal-overlay.active) #toastContainer { bottom: calc(14px + env(safe-area-inset-bottom)); }
  body:has(.modal-overlay.active) .toast { background: var(--surface); border-color: var(--accent); backdrop-filter: none; }
  .toast {
    background: var(--card-bg-strong); border: 1px solid var(--card-border); backdrop-filter: blur(20px);
    padding: 12px 18px; border-radius: 12px; font-size: 13.5px; font-weight: 600; box-shadow: var(--shadow);
    animation: toastIn .3s cubic-bezier(.2,.8,.3,1); text-align: center;
  }
  .toast.success { border-color: color-mix(in srgb, var(--green) 45%, transparent); color: var(--green); }
  .toast.error { border-color: color-mix(in srgb, var(--red) 45%, transparent); color: var(--red); }
  @keyframes toastIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
  .toast.leaving { animation: toastOut .25s ease forwards; }
  @keyframes toastOut { to { opacity: 0; transform: translateY(6px); } }

  /* ---------- Responsive ---------- */
  @media (max-width: 720px) {
    .charts-grid { grid-template-columns: 1fr; }
    .topbar-title h1 { font-size: 22px; }
    .fab { width: 52px; height: 52px; font-size: 28px; bottom: calc(82px + env(safe-area-inset-bottom)); right: 22px; }
  }
  @media (max-width: 420px) {
    .home-hero .hero-value { font-size: 34px; }
    .home-subrow { gap: 8px; }
    .home-subrow .value { font-size: 15px; }
    .fin-add-row input.fin-amount-input { width: 74px; }
    .card { padding: 18px; }
  }

  /* ============================================================
     PWA / INSTALACIÓN
  ============================================================ */
  .install-app-btn {
    display: inline-flex; align-items: center; gap: 6px;
    padding: 8px 10px; border-radius: 12px;
    background: var(--card-bg); border: 1px solid var(--card-border);
    color: var(--text-primary); font-size: 12.5px; font-weight: 700;
    white-space: nowrap;
  }
  .install-app-btn[hidden] { display: none !important; }
  .install-app-btn:hover { border-color: var(--accent); }
  @media (max-width: 560px) {
    .install-app-btn .install-label { display: none; }
    .install-app-btn { width: 38px; height: 38px; padding: 0; justify-content: center; font-size: 17px; }
  }

  /* ============================================================
     SUPABASE AUTH
  ============================================================ */
  #authOverlay {
    position: fixed;
    inset: 0;
    z-index: 99999;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 20px;
    background: var(--bg-grad);
  }
  #authOverlay[hidden] { display: none !important; }
  /* Dos tarjetas, un solo overlay: se alterna cuál se muestra. */
  #authOverlay.show-login #authWelcomeCard,
  #authOverlay:not(.show-login) #authLoginCard { display: none; }
  #authOverlay { overflow-y: auto; align-items: flex-start; }
  #authOverlay .auth-card { margin: auto; }
  .auth-mark { width: 62px; height: 62px; display: block; margin: 0 0 16px; border-radius: 18px; }
  .auth-welcome-title { margin: 0 0 8px; font-size: 28px; font-weight: 800; letter-spacing: -0.025em; line-height: 1.12; }
  .auth-welcome-sub { margin: 0 0 20px; font-size: 15px; line-height: 1.55; color: var(--text-secondary); text-wrap: pretty; }
  .auth-points { list-style: none; margin: 0 0 22px; padding: 0; display: flex; flex-direction: column; gap: 10px; }
  .auth-points li { display: flex; align-items: flex-start; gap: 11px; font-size: 13.5px; line-height: 1.45; }
  .auth-points .ap-ico {
    flex: 0 0 auto; width: 32px; height: 32px; border-radius: 12px; display: grid; place-items: center;
    font-size: 15px; background: color-mix(in srgb, #FFFFFF 88%, var(--accent) 12%);
    border: 1px solid rgba(0,0,0,.07);
  }
  .auth-try-btn { width: 100%; padding: 15px 18px; font-size: 15px; border-radius: 18px; }
  .auth-try-note { margin: 10px 0 0; font-size: 12.5px; line-height: 1.45; color: var(--text-secondary); text-align: center; }
  .auth-welcome-alt {
    margin-top: 20px; padding-top: 16px; border-top: 1px solid var(--card-border);
    display: flex; flex-direction: column; align-items: center; gap: 4px; text-align: center;
  }
  .auth-welcome-alt span { font-size: 12.5px; color: var(--text-secondary); }
  .auth-welcome-alt button { font-size: 15px; font-weight: 750; color: var(--accent-strong); padding: 6px 4px; }
  .auth-step-back { font-size: 13.5px; font-weight: 700; color: var(--text-secondary); padding: 2px 0 12px; }
  .auth-card {
    width: min(430px, 100%);
    padding: 28px;
    border: 1px solid var(--card-border);
    border-radius: 26px;
    background: var(--card-bg-strong);
    box-shadow: var(--shadow);
    backdrop-filter: blur(18px);
    -webkit-backdrop-filter: blur(18px);
  }
  .auth-card h2 { margin-bottom: 8px; }
  .auth-sub { color: var(--text-secondary); line-height: 1.5; margin-bottom: 20px; }
  .auth-status { min-height: 20px; margin-top: 12px; font-size: 13.5px; color: var(--text-secondary); }
  .auth-error { color: var(--red); }
  .auth-success { color: var(--green); }
  .auth-user {
    display: inline-flex; align-items: center; gap: 7px;
    max-width: 180px; padding: 8px 10px; border-radius: 12px;
    background: var(--card-bg); color: var(--text-secondary); font-size: 12.5px;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  }
  #authLoading {
    position: fixed; inset: 0; z-index: 100000; display: flex; flex-direction: column;
    align-items: center; justify-content: center; gap: 14px; background: var(--bg-grad);
    color: var(--text-secondary); font-size: 13.5px;
  }
  #authLoading[hidden] { display: none !important; }
  #authLoading img {
    width: 64px; height: 64px; border-radius: 18px;
    animation: authLoadingPulse 1.6s ease-in-out infinite;
  }
  @keyframes authLoadingPulse {
    0%, 100% { transform: scale(1); opacity: .85; }
    50% { transform: scale(1.08); opacity: 1; }
  }


  /* ================================================================
     ALINEACIÓN VISUAL (23 sep 2026) — una sola escala para toda la app.
     Solo presentación: no cambia marcado, ids, datos ni comportamiento.
     Escala (Brandbook): cifra 40/800 · veredicto 25/800 · título de
     tarjeta 15/750 · fila 14,5/700 · secundario 13/500 · etiqueta de
     sección 12/750 mayúsculas. Movimiento: una curva, tres duraciones.
     ================================================================ */
  :root { --pf-ease: cubic-bezier(.2,.8,.3,1); --pf-fast: .16s; --pf-mid: .24s; }

  /* Títulos de pantalla */
  .savings-screen-body > h2, .tab-panel > h2 { font-size: 22px; font-weight: 800; letter-spacing: -0.02em; line-height: 1.2; }

  /* Etiqueta de sección (fuera de tarjeta y grupos dentro de ella) */
  .fin-group-label, .ah-sec-title, .plan-group-label, .fin-sum-group, .mov-section-title, .pf-section-label {
    font-size: 12.5px; font-weight: 750; text-transform: uppercase; letter-spacing: .08em;
    color: var(--text-secondary); opacity: 1;
  }
  .fin-group-sub, .ah-sec-sub { font-size: 13.5px; font-weight: 500; color: var(--text-secondary); line-height: 1.5; }

  /* Título de tarjeta */
  .accordion-title, .percent-toggle, .pending-block-title, .fact-card-title, .plan-switch-title,
  .chart-card h2, .onpace-card h2, .pf-card-title {
    font-size: 15px; font-weight: 750; letter-spacing: -0.01em; color: var(--text-primary);
  }
  .accordion-meta { font-size: 13.5px; font-weight: 500; color: var(--text-secondary); }

  /* Etiqueta de cifra + cifra protagonista: una sola versión */
  .home-hero .hero-label, .ah-hero-label, .limit-card-label, .micaja-label {
    font-size: 13.5px; font-weight: 600; color: var(--text-secondary); letter-spacing: 0; text-transform: none;
  }
  .home-hero .hero-value, .ah-hero-total, .limit-card-value {
    font-size: 40px; font-weight: 800; letter-spacing: -0.03em; line-height: 1.05;
    color: var(--text-primary); font-variant-numeric: tabular-nums;
  }
  .home-hero .hero-value.positive { color: var(--green); }
  .home-hero .hero-value.negative { color: var(--red); }
  .an-verdict { font-size: 28px; font-weight: 800; letter-spacing: -0.01em; }
  .hero-note, .ah-hero-note, .limit-card-foot, .extra-sub, .micaja-sub, .plan-switch-sub, .unassigned-sub, .settings-nav-sub {
    font-size: 13.5px; font-weight: 500; color: var(--text-secondary); line-height: 1.5;
  }

  /* Filas: mismo título, mismo importe, mismo gesto */
  .mov-concept, .settings-nav-title, .unassigned-title, .pk-title, .expense-concept, .fin-item .fin-concept {
    font-size: 15px; font-weight: 700;
  }
  .mov-amount, .expense-amount, .fin-item .fin-amount, .settings-nav-row .value, .pk-value {
    font-size: 15px; font-weight: 700; font-variant-numeric: tabular-nums;
  }
  .mov-cat { font-size: 13.5px; font-weight: 500; }
  .mov-day-head { font-size: 13.5px; font-weight: 700; color: var(--text-secondary); margin: 18px 4px 8px; }
  .mov-day-total { font-weight: 700; font-variant-numeric: tabular-nums; }

  /* Movimientos: filas agrupadas por día en un solo bloque (antes, una tarjeta por gasto) */
  .mov-row { margin-bottom: 0; border-radius: 0; border-bottom-width: 0; padding: 12px 16px;
    transition: background var(--pf-fast) ease; }
  .mov-day-head + .mov-row, .mov-row:first-child { border-top-left-radius: 16px; border-top-right-radius: 16px; }
  .mov-row:not(:has(+ .mov-row)) { border-bottom-width: 1px; border-bottom-left-radius: 16px; border-bottom-right-radius: 16px; }
  .mov-row + .mov-row { border-top-color: color-mix(in srgb, var(--card-border) 65%, transparent); }
  .mov-row.is-actionable:hover { background: color-mix(in srgb, var(--accent) 7%, var(--card-bg)); }
  .mov-icon, .expense-icon { background: color-mix(in srgb, #FFFFFF 88%, var(--accent) 12%); }

  /* Filas viejas (fijos, ingresos, huchas, debo): mismo tratamiento que las nuevas */
  .expense-item, .fin-item { border-radius: 12px; padding: 10px 12px; background: var(--input-bg); }
  .expense-item:hover, .fin-item:hover { box-shadow: none; background: color-mix(in srgb, var(--accent) 7%, var(--input-bg)); transform: none; }
  #accSummaryBody .fin-summary-row { font-size: 15px; padding: 8px 0; }
  #accSummaryBody .fin-summary-row .value { font-weight: 700; font-variant-numeric: tabular-nums; }
  #accSummaryBody .fin-summary-row:hover { transform: none; background: transparent; }
  #accSummaryBody .fin-summary-row:hover::before { opacity: 0; }
  #accSummaryBody .fin-summary-row:hover .value { transform: none; color: inherit; }
  #accSummaryBody .fin-summary-row.total { font-size: 15px; font-weight: 750; }

  /* Hover: nada salta. Tarjetas y filas solo se tiñen; botones suben 1px */
  .card:hover { transform: none; border-color: var(--card-border); background: var(--card-bg); box-shadow: var(--shadow); }
  .card:hover::before { opacity: 0; }
  .week-card:hover, .goal-item:hover, .percent-row-item:hover, .category-detail-row:hover, .hucha-item:hover, .micaja-row:hover {
    transform: none;
  }
  .settings-nav-row { transition: background var(--pf-fast) ease, border-color var(--pf-fast) ease; }
  .settings-nav-row:hover { transform: none; background: color-mix(in srgb, var(--accent) 7%, var(--card-bg-strong)); border-color: var(--card-border); }
  .settings-nav-row:hover .settings-nav-icon { transform: none; }
  .settings-nav-row:hover .settings-nav-chevron { transform: translateX(3px); }
  .category-chip:hover { transform: translateY(-1px); box-shadow: none; }
  .btn { transition: transform var(--pf-fast) var(--pf-ease), background var(--pf-fast) ease, border-color var(--pf-fast) ease, box-shadow var(--pf-fast) ease; }
  .btn:hover { transform: translateY(-1px); box-shadow: none; }
  .btn:active, .ah-new-btn:active, .mov-act:active { transform: scale(.97); }

  /* Botones: todos con la esquina de la fila (14-16px), no pastilla */
  .btn { border-radius: 12px; font-size: 15px; font-weight: 750; }
  .ah-new-btn { border-radius: 12px; font-size: 13.5px; padding: 9px 14px; }
  .pending-add-details summary { font-size: 15px; font-weight: 750; color: var(--accent-strong); }

  /* Entradas: una sola curva y duración */
  .card, .savings-banner { animation-duration: .4s; animation-timing-function: var(--pf-ease); }
  .mov-row, .settings-nav-row, .peek-row { animation: itemIn .3s var(--pf-ease) both; }
  .expense-item, .fin-item { animation-duration: .3s; }

  /* Una sola puerta (23 sep): los formularios viejos de Fijos y Pendientes
     quedan en el DOM, cerrados y ocultos. Si Pinky los abre por código
     (details.open = true) se ven igual que antes: nada se rompe. */
  .pending-add-details:not([open]) { display: none; }
  .pf-add-row { display: flex; flex-wrap: wrap; gap: 8px; margin: 14px 0 4px; }
  .pf-add-row .btn { flex: 1 1 180px; width: auto; }

  /* Alineación tanda 2 (23 sep): títulos de modal/ajustes, campos y grupos */
  .modal h2, .settings-screen h2, .huchas-head h2 { font-size: 22px; font-weight: 800; letter-spacing: -0.02em; }
  .privacy-card h4 { font-size: 15px; font-weight: 700; }
  .hucha-block-title { font-size: 12.5px; font-weight: 750; letter-spacing: .08em; }
  .plus-card-title, .plus-assist-title { font-size: 15px; font-weight: 750; }
  .field > span:first-child { font-size: 13.5px; font-weight: 600; color: var(--text-secondary); }
  .field input, .field select, .fin-add-row input, .add-goal-row input, .pf-input {
    border-radius: 12px; padding: 12px 14px; font-size: 15px;
    background: var(--input-bg); border: 1px solid var(--card-border); color: var(--text-primary); outline: none;
    transition: border-color var(--pf-fast) ease;
  }
  .field input:focus, .field select:focus, .fin-add-row input:focus, .add-goal-row input:focus, .pf-input:focus { border-color: var(--accent); }
  .onboarding-body input[type="text"], .onboarding-body input[type="number"] { border-radius: 12px; }
  .privacy-card, .onb-philosophy-card, .dv-signup-card { border-radius: 18px; }

  /* ================================================================
     BLOQUES COMO INICIO (23 sep). Inicio usa solo dos formas:
     A) Tarjeta de cifra: fondo tarjeta, esquina 26, relleno 22, sombra.
     B) Grupo de filas: fondo tarjeta, esquina 18, sin sombra, filas
        pegadas separadas por una línea fina (como Mi caja / fijos / ahorro).
     Todo bloque de las otras pestañas pasa a ser A o B. Solo presentación.
     ================================================================ */
  :root { --pf-sep: color-mix(in srgb, var(--card-border) 70%, transparent); }

  /* A) Tarjetas de cifra: Mi caja, Fijos, Plan (límite) */
  .ah-hero, .limit-card {
    background: var(--card-bg); border: 1px solid var(--card-border); border-radius: 26px;
    padding: 22px; box-shadow: var(--shadow); gap: 4px;
    backdrop-filter: blur(24px) saturate(160%); -webkit-backdrop-filter: blur(24px) saturate(160%);
  }
  .caja-bloque { border-radius: 26px; box-shadow: var(--shadow); }
  .caja-bloque .ah-hero { box-shadow: none; }
  #dineroCuentasList .caja-partes { border-radius: 0 0 26px 26px; }

  /* B) Grupos de filas: toda lista de filas se ve como la de Inicio */
  .settings-nav-list, .fin-list:not(:empty), .expense-list:not(:empty) {
    display: flex; flex-direction: column; gap: 0;
    background: var(--card-bg); border: 1px solid var(--card-border); border-radius: 18px;
    overflow: hidden; padding: 0;
  }
  .expense-list:not(:empty) { max-height: none; }
  .settings-nav-list:has(> .caja-partes), .settings-nav-list:empty { background: transparent; border: 0; border-radius: 0; overflow: visible; }
  .settings-nav-list > .settings-nav-row, .fin-list > .fin-item, .expense-list > .expense-item {
    background: transparent; border: 0; border-radius: 0; box-shadow: none;
    border-top: 1px solid var(--pf-sep); padding: 12px 16px; margin: 0;
  }
  .settings-nav-list > .settings-nav-row:first-child, .fin-list > .fin-item:first-child, .expense-list > .expense-item:first-child { border-top: 0; }
  .settings-nav-list > .settings-nav-row:hover, .fin-list > .fin-item:hover, .expense-list > .expense-item:hover {
    background: var(--input-bg); border-color: var(--pf-sep);
  }
  .card .fin-list:not(:empty), .card .expense-list:not(:empty) { background: transparent; border: 0; border-radius: 0; }
  .card .fin-list > .fin-item, .card .expense-list > .expense-item { padding-left: 2px; padding-right: 2px; }
  .card .fin-list > .fin-item:hover, .card .expense-list > .expense-item:hover { background: transparent; }

  /* Filas sueltas (una sola): mismo aspecto que un grupo de una fila */
  .settings-nav-row, .plan-switch, .unassigned-card {
    background: var(--card-bg); border: 1px solid var(--card-border); border-radius: 18px;
    padding: 12px 16px; box-shadow: none;
  }
  .unassigned-card { border-style: solid; }
  .settings-nav-row:hover, .unassigned-card:hover { background: var(--input-bg); border-color: var(--card-border); }
  .settings-nav-icon { width: 34px; height: 34px; border-radius: 50%; }

  /* Filas de Mi caja y de alcancías: separadas por línea, sin cajitas */
  .micaja-rows { gap: 0; }
  .micaja-row { background: transparent; border: 0; border-radius: 0; border-top: 1px solid var(--pf-sep); padding: 12px 2px; }
  .micaja-row:first-child { border-top: 0; }
  .micaja-row:hover { background: transparent; border-color: var(--pf-sep); }
  .hucha-item { border-radius: 18px; background: var(--card-bg); box-shadow: none; }
  .hucha-item:hover { border-color: var(--card-border); }

  /* Todas las tarjetas: misma esquina, relleno y sombra que las de Inicio */
  .card { border-radius: 26px; }
  .accordion-card { padding: 2px 22px; }
  .accordion-toggle { padding: 18px 0; }
  .week-card, .fact-card, .percent-card, .chart-card, .current-week-card { border-radius: 26px; }

  /* Recuadros internos (dentro de una tarjeta): una sola forma */
  .op-compare, .next-month-nudge, .privacy-card, .onb-philosophy-card, .dv-signup-card, .limit-alert {
    border-radius: 18px; background: var(--input-bg); border: 1px solid var(--card-border);
  }

  /* Separación entre bloques: la de Inicio en todas las pestañas y pantallas */
  .tab-panel { gap: 14px; }
  .savings-screen-body > * + * { margin-top: 14px; }
  .savings-screen-body > .ah-sec-head { margin-top: 22px; }
  .fin-group-label { margin: 22px 4px 0; }

  /* Ajustes: sin tarjeta-dentro-de-tarjeta, como Inicio */
  .settings-screen.card { background: transparent; border: 0; box-shadow: none; padding: 0; backdrop-filter: none; -webkit-backdrop-filter: none; }
  .settings-nav-list > .fin-group-label, .settings-nav-list > h3 { margin: 0; padding: 14px 16px 8px; }
  .settings-nav-list > .fin-group-label + .settings-nav-row, .settings-nav-list > h3 + .settings-nav-row { border-top: 0; }
  .fact-card-title { text-transform: none; letter-spacing: -0.01em; }

  .settings-back-btn { white-space: nowrap; width: auto; padding: 9px 14px; border-radius: 12px; font-size: 13.5px; }
  .tab-panel > .savings-screen-head { display: flex; justify-content: flex-start; }
  .ah-sec-head > div { flex: 1 1 auto; min-width: 0; }
  #addIncomeBtn.ah-new-btn { width: auto; display: inline-block; flex: none; background: var(--accent-fill, var(--accent)); color: var(--on-accent, #fff); border: 0; border-radius: 12px; font-size: 13.5px; font-weight: 750; padding: 9px 14px; }
  #addIncomeBtn.ah-new-btn:hover { background: var(--accent-fill, var(--accent)); color: var(--on-accent, #fff); filter: brightness(1.06); }

  /* Dinero: grupos debajo de Mi caja, misma forma que los bloques de Inicio */
  .pf-groups { display: flex; flex-direction: column; }
  .pf-group-label { font-size: 12.5px; font-weight: 750; text-transform: uppercase; letter-spacing: .08em; color: var(--text-secondary); margin: 22px 4px 8px; }
  .pf-group { background: var(--card-bg); border: 1px solid var(--card-border); border-radius: 18px; overflow: hidden; }
  .pf-group > .settings-nav-row { background: transparent; border: 0; border-radius: 0; box-shadow: none; border-top: 1px solid var(--pf-sep); padding: 12px 16px; margin: 0; }
  .pf-group > .settings-nav-row:first-child { border-top: 0; }
  .pf-group > .settings-nav-row:hover { background: var(--input-bg); }
  .pf-row-value { font-size: 15px; font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap; color: var(--text-primary); }
  .caja-bloque { background: var(--card-bg); border: 1px solid var(--card-border); overflow: hidden; }
  .caja-bloque .ah-hero { border: 0; border-radius: 0; background: transparent; backdrop-filter: none; -webkit-backdrop-filter: none; }
  .caja-bloque .caja-partes, #dineroCuentasList .caja-partes { border: 0; border-top: 1px solid var(--pf-sep); border-radius: 0; background: transparent; margin: 0; }

  /* Filas de pendientes / fijos / ingresos: una línea, importe y acciones a la derecha */
  .fin-item { flex-wrap: nowrap; align-items: center; gap: 10px; }
  .fin-item .fin-concept { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
  .fin-item .fin-amount { flex: none; margin-left: auto; }
  .fin-item .fin-actions { flex: none; display: flex; align-items: center; gap: 6px; }
  .fin-toggle-btn { font-size: 13.5px; font-weight: 700; padding: 7px 12px; border-radius: 12px; background: var(--card-bg-strong); border: 1px solid var(--card-border); color: var(--text-primary); cursor: pointer; }
  .expense-edit, .fin-delete { width: 32px; height: 32px; display: grid; place-items: center; border-radius: 12px; background: transparent; border: 1px solid transparent; cursor: pointer; font-size: 13.5px; }
  .expense-edit:hover, .fin-delete:hover { background: var(--input-bg); border-color: var(--card-border); }
  .pf-pend-list { list-style: none; margin: 0; padding: 0; }
  .pf-pend-row { background: transparent !important; border: 0; border-radius: 0 !important; border-top: 1px solid var(--pf-sep); padding: 12px 16px !important; }
  .pf-pend-row:first-child { border-top: 0; }
  .pf-pend-text { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
  .pf-pend-text .fin-concept { font-size: 15px; font-weight: 700; white-space: nowrap; }
  .pf-pend-sub { font-size: 13.5px; font-weight: 500; color: var(--text-secondary); }
  .pf-pend-list + .settings-nav-row { border-top: 1px solid var(--pf-sep); }
  .pf-group-empty { margin: 0; padding: 14px 16px; font-size: 13.5px; color: var(--text-secondary); border-bottom: 1px solid var(--pf-sep); }
  #dineroPendientesInline { margin-top: 8px; }
  @media (max-width: 480px) { .fin-toggle-btn { padding: 6px 10px; font-size: 12.5px; } }

  .savings-screen-body > h2 + .extra-sub { margin-top: 6px !important; }
  .savings-screen-body > h2 { display: flex; align-items: center; gap: 10px; }
  /* Tarjeta dentro de tarjeta (Pendientes › Ya pagado): pasa a ser una sección con línea */
  .card .card.accordion-card { background: transparent; border: 0; border-top: 1px solid var(--pf-sep); border-radius: 0; box-shadow: none; padding: 0; margin-top: 14px !important; backdrop-filter: none; -webkit-backdrop-filter: none; }
  .card .card.accordion-card .accordion-toggle { padding: 16px 0 10px; }
  .pending-block-header { margin-bottom: 4px; }
  .pending-block .fin-list { background: transparent; border: 0; }
  .pending-block .fin-item { background: transparent; border-top: 1px solid var(--pf-sep); border-radius: 0; padding: 12px 2px; }
  .pending-block .fin-item:first-child { border-top: 0; }
  /* Selector Todos / Suscripciones: el mismo segmentado compacto del +, no dos botones grandes */
  .move-money-direction { display: flex; gap: 4px; padding: 4px; border-radius: 12px; background: var(--input-bg); border: 1px solid var(--card-border); }
  .move-money-direction .period-type-option { flex: 1 1 0; padding: 8px 12px; border-radius: 12px; border: 0; background: transparent; font-size: 13.5px; font-weight: 700; color: var(--text-secondary); box-shadow: none; }
  .move-money-direction .period-type-option.active { background: var(--card-bg-strong); color: var(--text-primary); box-shadow: 0 1px 3px rgba(0,0,0,.08); border: 0; }

  /* Plan: la semana es una tarjeta más, como las de Inicio (sin borde de color ni degradado) */
  .week-card-featured { border: 1px solid var(--card-border); background-image: none; }
  .week-card-featured .week-header { padding: 22px 22px 16px; }
  .week-card-featured .week-body { padding: 0 22px 22px; }
  #searchInput, .cselect-btn, .weeks-controls .cselect > .cselect-btn { border-radius: 12px; height: 44px; font-size: 15px; }
  .weeks-control-btn { border-radius: 12px; min-height: 44px; }
  .btn.add-expense { background: var(--accent-fill, var(--accent)); color: var(--on-accent, #fff); border: 0; }
  .btn.add-expense:hover { background: var(--accent-fill, var(--accent)); filter: brightness(1.06); }
  .btn.close-week { border-width: 1px; border-color: var(--card-border); color: var(--text-primary); }
  /* Analizar › En qué se fue: filas con separadores, no mini-tarjetas dentro de la tarjeta */
  .percent-body { gap: 0; }
  .percent-body > .percent-row-item, .percent-body > .category-detail-row, .percent-body > * {
    background: transparent; border: 0; border-radius: 0; box-shadow: none; border-top: 1px solid var(--pf-sep); padding-left: 2px; padding-right: 2px;
  }
  .percent-body > *:first-child { border-top: 0; }
  .percent-row-item:hover, .category-detail-row:hover { background: transparent; }

  .percent-body .category-block { border-top: 1px solid var(--pf-sep); }
  .percent-body .category-block:first-child { border-top: 0; }
  .percent-body .percent-row-item { background: transparent !important; border: 0 !important; border-radius: 0; box-shadow: none; padding: 12px 2px; }
  .percent-body .pr-pct { white-space: nowrap; font-size: 13.5px; font-weight: 700; font-variant-numeric: tabular-nums; }
  .percent-body .pr-label { font-size: 15px; font-weight: 700; }
  .week-card .expense-list .expense-item, .week-body .expense-item { flex-wrap: nowrap; }
  /* (26 sep, v26) En Plan la fila no se parte: los botones ocupan solo su ancho
     y el concepto el resto (antes los botones tomaban el 100%, el concepto
     quedaba en 0 y editar/borrar se salían de la tarjeta). */
  .week-card .expense-list .expense-item .expense-actions, .week-body .expense-item .expense-actions { flex: 0 0 auto; gap: 4px; }
  .week-card .expense-list .expense-item .expense-concept, .week-body .expense-item .expense-concept { min-width: 0; }

  /* Analizar sin tortas */
  #pieChart, #allocChart { display: none !important; }
  .pf-bars { display: flex; flex-direction: column; gap: 0; }
  .pf-bar-row { padding: 11px 2px; border-top: 1px solid var(--pf-sep); display: flex; flex-direction: column; gap: 7px; }
  .pf-bar-row:first-child { border-top: 0; }
  .pf-bar-top { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; }
  .pf-bar-name { font-size: 15px; font-weight: 700; }
  .pf-bar-name em { font-style: normal; font-size: 12.5px; font-weight: 650; color: var(--text-secondary); margin-left: 6px; }
  .pf-bar-row.is-current .pf-bar-name em:first-child { color: var(--accent-strong); }
  .pf-bar-num { font-size: 15px; font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap; }
  .pf-bar-num small { font-size: 12.5px; font-weight: 500; color: var(--text-secondary); }
  .pf-bar-track { display: block; height: 8px; border-radius: 999px; background: var(--track); overflow: hidden; }
  .pf-bar-fill { display: block; height: 100%; border-radius: 999px; background: color-mix(in srgb, var(--accent) 55%, var(--track)); transition: width .5s var(--pf-ease); }
  .pf-bar-row.is-current .pf-bar-fill { background: var(--accent-fill, var(--accent)); }
  .pf-bar-fill.over { background: var(--red) !important; }
  .pf-split { display: flex; flex-direction: column; gap: 12px; }
  .pf-split-bar { display: flex; gap: 3px; height: 14px; border-radius: 999px; overflow: hidden; }
  .pf-split-bar > span { display: block; min-width: 4px; }
  .pf-split-rows { display: flex; flex-direction: column; }
  .pf-split-row { display: grid; grid-template-columns: 10px minmax(0,1fr) auto auto; align-items: center; column-gap: 10px; padding: 10px 2px; border-top: 1px solid var(--pf-sep); }
  .pf-split-row:first-child { border-top: 0; }
  .pf-split-dot { width: 10px; height: 10px; border-radius: 50%; }
  .pf-split-name { font-size: 15px; font-weight: 700; }
  .pf-split-pct { font-size: 13.5px; color: var(--text-secondary); font-variant-numeric: tabular-nums; }
  .pf-split-num { font-size: 15px; font-weight: 700; font-variant-numeric: tabular-nums; min-width: 84px; text-align: right; }
  .pf-pace-legend { display: flex; flex-wrap: wrap; gap: 6px 16px; margin-top: 12px; font-size: 13.5px; color: var(--text-secondary); }
  .pf-pace-legend span { display: inline-flex; align-items: center; gap: 6px; }
  .pf-pace-legend i { width: 14px; height: 3px; border-radius: 2px; display: inline-block; }
  .pf-pace-legend i.dash { background: repeating-linear-gradient(90deg, var(--text-secondary) 0 4px, transparent 4px 7px); }

  #anDetalleBody .chart-card, #anDetalleBody .percent-card { border-radius: 0; border-left: 0; border-right: 0; border-bottom: 0; background: transparent; box-shadow: none; }

  .pf-pace-dot { position: absolute; width: 11px; height: 11px; border-radius: 50%; transform: translate(-50%,-50%); box-shadow: 0 0 0 3px var(--card-bg); }
  .pf-pace-top { position: absolute; right: 0; transform: translateY(-120%); font-size: 12.5px; font-weight: 600; color: var(--text-secondary); }
  .pf-pace-axis { position: relative; height: 18px; margin-top: 6px; font-size: 12.5px; color: var(--text-secondary); }
  .pf-pace-axis span { position: absolute; top: 0; }
  .pf-pace-axis span:first-child { left: 0; }
  .pf-pace-axis span:last-child { right: 0; }
  .pf-pace-axis .is-today { transform: translateX(-50%); font-weight: 750; color: var(--text-primary); }
  #anPaceText strong.pos { color: var(--green); }
  #anPaceText strong.neg { color: var(--red); }

  /* Debo / me deben: título del grupo arriba, cada cosa abajo; acciones como enlaces */
  .pf-pend-group + .pf-pend-group { margin-top: 10px; }
  .pf-pend-head { display: flex; justify-content: space-between; align-items: baseline; padding: 14px 16px 4px; }
  .pf-pend-title { font-size: 15px; font-weight: 750; }
  .pf-pend-total { font-size: 15px; font-weight: 750; font-variant-numeric: tabular-nums; }
  .pf-pend-group .pf-pend-row:first-child { border-top: 0; }
  .pf-pend-group .pf-pend-row .fin-concept { font-size: 15px; font-weight: 600; color: var(--text-primary); }
  .pf-pend-group .pf-pend-row .fin-amount { font-size: 15px; font-weight: 700; }
  .pf-pend-links { display: flex; justify-content: space-between; align-items: center; gap: 12px; padding: 10px 4px 0; }
  .pf-link-btn { background: none; border: 0; padding: 8px 4px; font: inherit; font-size: 13.5px; font-weight: 750; color: var(--accent-strong); cursor: pointer; }
  .pf-link-btn.is-quiet { color: var(--text-secondary); font-weight: 650; }
  .pf-link-btn:hover { text-decoration: underline; }

  #anBar[hidden], #anBarLegend[hidden] { display: none !important; }
  #tab-estadisticas > .pf-group-label { margin: 26px 4px 10px; }
  #tab-estadisticas > #anMesLabel { margin-top: 20px; }
  #anAllocCard h2, #anWeekChartBlock .accordion-title { font-size: 15px; font-weight: 750; }

  /* Evolución por mes en HTML */
  #monthChart, #incomeChart, #savingsChart { display: none !important; }
  .pf-evo { margin-top: 14px; }
  .pf-evo-plot { position: relative; height: 170px; display: flex; align-items: flex-end; gap: 10px; padding-top: 24px; border-bottom: 1px solid var(--card-border); }
  .pf-evo-col { flex: 1 1 0; max-width: 72px; margin: 0 auto; height: 100%; display: flex; flex-direction: column; justify-content: flex-end; align-items: center; gap: 6px; background: none; border: 0; padding: 0; cursor: pointer; font: inherit; transition: opacity .2s var(--pf-ease); }
  .pf-evo-num { font-size: 12.5px; font-weight: 700; color: var(--text-secondary); font-variant-numeric: tabular-nums; white-space: nowrap; }
  .pf-evo-col.is-current .pf-evo-num, .pf-evo-col.is-sel .pf-evo-num { color: var(--text-primary); }
  .pf-evo-bar { width: 100%; max-width: 44px; min-height: 3px; display: flex; flex-direction: column; border-radius: 8px 8px 3px 3px; overflow: hidden; opacity: .5; transition: height .5s var(--pf-ease), opacity .2s var(--pf-ease); }
  .pf-evo-bar > span { display: block; min-height: 2px; }
  .pf-evo-col.is-current .pf-evo-bar { opacity: 1; }
  .pf-evo.has-sel .pf-evo-col .pf-evo-bar { opacity: .3; }
  .pf-evo.has-sel .pf-evo-col.is-sel .pf-evo-bar { opacity: 1; }
  .pf-evo-avg { position: absolute; left: 0; right: 0; border-top: 1.5px dashed var(--text-secondary); opacity: .55; pointer-events: none; z-index: 1; }
  .pf-evo-avg em { position: absolute; right: 0; top: -18px; font-style: normal; font-size: 11px; font-weight: 650; color: var(--text-secondary); background: var(--card-bg); padding: 0 4px; }
  .pf-evo-labels { display: flex; gap: 10px; margin-top: 8px; }
  .pf-evo-labels span { flex: 1 1 0; max-width: 72px; margin: 0 auto; text-align: center; font-size: 12.5px; color: var(--text-secondary); text-transform: capitalize; }
  .pf-evo-labels span.is-current { color: var(--text-primary); font-weight: 750; }
  .pf-evo-empty { margin: 0; padding: 26px 0; text-align: center; font-size: 13.5px; color: var(--text-secondary); }
  #accHistoryMeta { display: none !important; }

  .pf-evo-plot { height: auto; display: block; padding-top: 26px; }
  .pf-evo-area { position: relative; height: 150px; display: flex; align-items: flex-end; gap: 10px; }
  .pf-evo-col { height: 100%; gap: 0; }
  .pf-evo-bar { position: relative; overflow: visible; }
  .pf-evo-bar > span:not(.pf-evo-num) { overflow: hidden; }
  .pf-evo-bar > span:not(.pf-evo-num):first-of-type { border-radius: 8px 8px 0 0; }
  .pf-evo-num { position: absolute; bottom: calc(100% + 5px); left: 50%; transform: translateX(-50%); }
  .pf-evo-bar { opacity: 1; }
  .pf-evo-bar > span:not(.pf-evo-num) { opacity: .5; transition: opacity .2s var(--pf-ease); }
  .pf-evo-col.is-current .pf-evo-bar > span:not(.pf-evo-num) { opacity: 1; }
  .pf-evo.has-sel .pf-evo-col .pf-evo-bar > span:not(.pf-evo-num) { opacity: .3; }
  .pf-evo.has-sel .pf-evo-col.is-sel .pf-evo-bar > span:not(.pf-evo-num) { opacity: 1; }
  .pf-evo-avg em { top: auto; bottom: 3px; }

  /* Ingresos fijos */
  .pf-evo-bar > span.is-ghost { background: transparent !important; border: 1.5px dashed var(--accent); border-bottom: 0; border-radius: 8px 8px 0 0; opacity: .7 !important; }
  .pf-evo-num small { font-size: 11px; font-weight: 600; color: var(--text-secondary); }
  .pf-rec-row { display: flex; align-items: center; gap: 10px; padding: 12px 16px; border-top: 1px solid var(--pf-sep); }
  .pf-rec-row:first-child { border-top: 0; }
  .pf-rec-row .fin-amount { margin-left: auto; font-size: 15px; font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap; }
  .pf-rec-edit { flex: 1; display: grid; grid-template-columns: minmax(0,1fr) 90px; gap: 10px; align-items: end; }
  .pf-rec-edit .field { margin: 0; }
  .pf-rec-actions { grid-column: 1 / -1; display: flex; justify-content: space-between; align-items: center; }
  #recurringIncomeWrap .pf-group-label:first-child { margin-top: 18px; }
  #recurringIncomeWrap { margin-bottom: 14px; }
  /* Dinero › Mi caja partida en "En la app" / "En tus cuentas" (24 sep) */
  .pf-sub-head { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; padding: 14px 20px 6px 20px; font-size: 12.5px; font-weight: 750; text-transform: uppercase; letter-spacing: .08em; color: var(--text-secondary); font-variant-numeric: tabular-nums; }
  .pf-caja-eq { margin: 6px 0 0; font-size: 13.5px; font-weight: 500; color: var(--text-secondary); font-variant-numeric: tabular-nums; }
  .caja-partes .settings-nav-row + .pf-sub-head { border-top: 1px solid var(--pf-sep); margin-top: 4px; }

/* (antes dentro del HTML) */
.privacy-card .extra-sub + .extra-sub { margin-top: 8px; }
body.is-guest .solo-cuenta { display: none; }
body:not(.is-guest) .solo-invitado { display: none; }

/* (26 sep, v43) Botones de arriba con texto: Pinky y Ocultar/Mostrar importes. */
.icon-btn.con-texto { width: auto; padding: 0 13px 0 9px; gap: 6px; font-size: 13.5px; font-weight: 700; color: var(--text-primary); }
.icon-btn.con-texto svg { width: 18px; height: 18px; }
.davide-btn.con-texto { padding: 0 13px 0 5px; }
.davide-btn.con-texto img { width: 30px; height: 30px; margin: 0; }
.icon-btn-txt { white-space: nowrap; line-height: 1; }

/* (26 sep, v43) Plan: barra con el reparto del mes. */
.pb-titulo { font-size: 13.5px; font-weight: 650; color: var(--text-secondary); margin: 2px 0 8px; }
.pb-barra { display: flex; gap: 3px; height: 14px; border-radius: 12px; overflow: hidden; background: var(--track, rgba(0,0,0,.08)); }
.pb-seg { display: block; min-width: 4px; }
.pb-leyenda { display: flex; flex-wrap: wrap; gap: 6px 14px; margin-top: 10px; font-size: 13.5px; color: var(--text-secondary); }
.pb-item { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }
.pb-item b { color: var(--text-primary); font-weight: 700; }
.pb-punto { width: 10px; height: 10px; border-radius: 50%; display: inline-block; }
.pb-fijos { background: var(--c-fijos); }
.pb-dia { background: var(--c-dia); }
.pb-ahorro { background: var(--c-ahorro); }
.pb-libre { background: var(--c-libre); }
.pb-calculo-btn { background: none; border: none; padding: 8px 0 0; font: inherit; font-size: 12.5px; font-weight: 650; color: var(--accent-strong, var(--accent)); text-decoration: underline; cursor: pointer; }
.pb-calculo { margin: 4px 0 0; line-height: 1.5; }

/* (26 sep, v44) Ficha de banco */
.banco-cabeza { display: flex; flex-direction: column; gap: 2px; margin: 0 0 14px; }
.banco-titulo { margin: 0 0 6px; font-size: 22px; font-weight: 800; }
.banco-saldo-label { font-size: 13.5px; font-weight: 600; color: var(--text-secondary); }
.banco-saldo-valor { font-size: 34px; font-weight: 800; letter-spacing: -0.02em; line-height: 1.1; }
.banco-ficha { border: none; background: transparent; box-shadow: none; padding: 0; }
.banco-ficha .hucha-panel { padding: 0; background: transparent; border: none; }
.banco-acciones { display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 12px; }
.banco-acciones .btn { width: auto; flex: 1 1 auto; padding: 10px 12px; font-size: 13.5px; }
.banco-corregir-panel { margin-bottom: 12px; }
.banco-mas { margin-top: 16px; }
.banco-mas summary { cursor: pointer; font-size: 13.5px; font-weight: 650; color: var(--text-secondary); padding: 6px 0; }
.banco-mas .cta-foot { margin-top: 8px; }
.banco-corregir-panel[hidden] { display: none !important; }
.hucha-item.banco-ficha, .hucha-item.banco-ficha.open { border: none; background: transparent; box-shadow: none; padding: 0; }
.hucha-item.banco-ficha .hucha-panel { background: transparent; border: none; padding: 0; margin: 0; }

/* (26 sep, v44) Mismo efecto al pulsar en TODOS los botones de la app.
   :where() deja la especificidad en 0: cualquier botón que ya tenga su propio
   efecto (o un transform de posición, como el "+") lo conserva. */
:where(button, .settings-nav-row, .peek-row, summary) { transition: transform .12s ease, background-color .2s ease, filter .2s ease; }
:where(button:not(:disabled):active, .settings-nav-row:active, .peek-row:active, summary:active) { transform: scale(.97); }
@media (hover: hover) {
  :where(button:not(:disabled):hover, summary:hover) { filter: brightness(.97); }
}
@media (prefers-reduced-motion: reduce) {
  :where(button, .settings-nav-row, .peek-row, summary) { transition: none; }
  :where(button:not(:disabled):active, .settings-nav-row:active, .peek-row:active, summary:active) { transform: none; }
}

/* (26 sep, v44) "En qué se fue": el nombre de la categoría no se parte
   ("🚗 Transporte" en dos líneas); la barra cede espacio. */
.percent-body .percent-row-item .pr-label { flex: 0 0 auto; min-width: 92px; max-width: 46%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.percent-body .percent-row-item .pr-bar-outer { min-width: 40px; }

/* (26 sep, v45) Colores por concepto FIJOS, independientes del color que elija
   el usuario (con verde de color principal, Día a día y Ahorro se confundían). */
:root { --c-dia: #C9694A; }
:root[data-theme="dark"] { --c-dia: #D2714F; }
.pb-ahorro { background: #3F8F6B; }
:root[data-theme="dark"] .pb-ahorro { background: #5FA491; }

/* ===== (26 sep, v45) Ahorro: Apartar / Sacar, chips y acciones rápidas ===== */
.ah-hero-acciones { display: flex; gap: 10px; margin-top: 14px; }
.ah-hero-acciones .btn { flex: 1; min-height: 44px; }
.ah-panel {
  margin-top: 12px; padding: 14px; border-radius: 18px;
  background: var(--input-bg); border: 1px solid var(--card-border);
  text-align: left; animation: ahPanelIn .18s ease-out;
}
@keyframes ahPanelIn { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: none; } }
.ah-panel-titulo { margin: 0 0 10px; font-size: 15px; font-weight: 700; }
.ah-panel-k { margin: 12px 0 6px; font-size: 12.5px; opacity: .7; }
.ah-panel .hucha-input { width: 100%; font-size: 17px; }
.ah-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.ah-chip {
  display: inline-flex; flex-direction: column; align-items: flex-start; gap: 1px;
  padding: 8px 12px; border-radius: 999px; font: inherit; font-size: 13.5px; cursor: pointer;
  background: var(--card-bg-strong); color: inherit; border: 1.5px solid var(--card-border);
  transition: border-color .15s, background .15s;
}
.ah-chip small { font-size: 11px; opacity: .65; }
.ah-chip.is-sel { border-color: var(--accent); background: color-mix(in srgb, var(--accent) 12%, transparent); font-weight: 600; }
.ah-panel .hu-btns { display: flex; gap: 8px; margin-top: 14px; }
.ah-panel .hu-btns .btn { flex: 1; }
.hu-acciones { display: flex; flex-wrap: wrap; gap: 8px; margin: 10px 0 4px; }
.hu-acciones .btn { flex: 1 1 0; min-width: 0; min-height: 40px; font-size: 13.5px; padding: 8px 10px; white-space: nowrap; }
.ah-nueva-btn { font-size: 13.5px; padding: 6px 12px; border-radius: 999px; }
.ah-nueva-form { margin: 10px 0 14px; padding: 14px; border-radius: 18px; border: 1px solid var(--card-border); }
#newHuchaOrigenRow { margin: 10px 0 4px; }
.ah-movs-general { margin-top: 16px; }
.ah-movs-general > summary { cursor: pointer; list-style: none; font-size: 13.5px; opacity: .75; padding: 8px 0; }
.ah-movs-general > summary::-webkit-details-marker { display: none; }
.ah-movs-general > summary::after { content: " ›"; }
.ah-movs-general[open] > summary::after { content: " ⌄"; }

/* ===== (26 sep, v46) Libre en dos pasos ===== */
.sa-pregunta { margin: 14px 0 10px; font-size: 15px; font-weight: 700; }
.sa-opciones { display: flex; flex-direction: column; gap: 8px; }
.sa-opcion {
  display: flex; align-items: center; gap: 12px; width: 100%; text-align: left;
  padding: 12px 14px; border-radius: 18px; font: inherit; color: inherit; cursor: pointer;
  background: var(--input-bg); border: 1px solid var(--card-border);
}
.sa-opcion:hover { border-color: var(--accent); }
.sa-op-ico { font-size: 22px; }
.sa-op-txt { flex: 1; display: flex; flex-direction: column; gap: 2px; }
.sa-op-txt strong { font-size: 15px; }
.sa-op-txt small { font-size: 12.5px; color: var(--text-secondary); }
.sa-op-chev { opacity: .5; font-size: 17px; }
.sa-volver { background: none; border: 0; padding: 6px 0; font: inherit; font-size: 13.5px; font-weight: 650; color: var(--accent-strong); cursor: pointer; }
.sa-monto {
  width: 100%; box-sizing: border-box; font-size: 28px; font-weight: 750; text-align: center;
  padding: 14px; border-radius: 18px; border: 2px solid var(--accent); background: var(--input-bg); color: var(--text-primary);
}
.sa-rapidos { justify-content: center; margin-top: 10px; }
.sa-ok { width: 100%; margin-top: 16px; min-height: 48px; }
.sa-ok:disabled { opacity: .5; }

/* ===== (26 sep, v46) Préstamos y deudas más visibles ===== */
.pf-pend-intro { margin: 2px 4px 10px; font-size: 13.5px; color: var(--text-secondary); line-height: 1.45; }
.pf-pend-tiles { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: 10px; }
.pf-pend-tile {
  display: flex; flex-direction: column; align-items: flex-start; gap: 4px; text-align: left;
  padding: 14px; border-radius: 18px; font: inherit; color: inherit; cursor: pointer;
  background: var(--card-bg); border: 1px solid var(--card-border);
}
.pf-pend-tile:hover { border-color: var(--accent); }
.pf-tile-ico { font-size: 22px; }
.pf-pend-tile strong { font-size: 15px; color: var(--accent-strong); }
.pf-pend-tile small { font-size: 12px; color: var(--text-secondary); line-height: 1.35; }

/* ===== (26 sep, v47) Emojis sin placa blanca: solo el emoji, un poco más grande ===== */
.settings-nav-icon, .choice-list .ch-badge, .category-manage-item .cm-emoji,
.help-item .help-emoji, .auth-points .ap-ico, .mov-icon, .expense-icon {
  background: none !important; border: 0 !important; box-shadow: none !important;
  font-size: 22px !important;
}
.settings-nav-row.secondary .settings-nav-icon { font-size: 18px !important; }
.auth-points .ap-ico { font-size: 18px !important; }

/* ===== (26 sep, v47) Aire ===== */
/* Título de grupo pegado a su bajada (el gap de la pestaña lo separaba de más). */
.tab-panel > .fin-group-label + #dineroPendientesInline { margin-top: -10px; }
.pf-pend-intro { margin-top: 0; }
/* Analizar › Ver más: las tarjetas iban pegadas unas a otras. */
#anMasWrap { display: flex; flex-direction: column; gap: 18px; }
/* Tarjetas plegables de Analizar con la misma sangría que el resto. */
#tab-estadisticas .percent-card { padding: 2px 22px !important; }
#tab-estadisticas .percent-card > .percent-toggle { padding: 18px 0 !important; }
#tab-estadisticas .percent-card > .percent-body { padding-bottom: 18px; }

/* ===== (26 sep, v47) "¿Sabías qué?" con flechas y puntos: se nota que hay más ===== */
#factCard {
  display: grid !important; grid-template-columns: 34px 1fr 34px; column-gap: 8px; row-gap: 10px;
  align-items: center; padding: 16px 14px 14px !important;
}
#factCard .fact-card-header, #factCard .fact-card-nav { display: contents !important; }
#factCard .fact-card-title, #factCard .fact-card-hint { display: none; }
#factCard #factPrevBtn { grid-column: 1; grid-row: 1; }
#factCard #factNextBtn { grid-column: 3; grid-row: 1; }
#factCard #factCardBody { grid-column: 2; grid-row: 1; min-height: 44px; justify-content: center; text-align: center; }
#factCard #factDots { grid-column: 2; grid-row: 2; justify-content: center; }
#factCard .fact-nav-btn {
  width: 34px; height: 34px; border-radius: 50%; border: 1px solid var(--card-border);
  background: var(--input-bg); color: var(--text-primary); font-size: 20px; line-height: 1; cursor: pointer;
  transition: background .15s, border-color .15s;
}
#factCard .fact-nav-btn:hover { border-color: var(--accent); }
#factCard.fact-una .fact-nav-btn, #factCard.fact-una #factDots { visibility: hidden; }
.pf-pend-intro { margin-top: 6px !important; }
#tab-estadisticas .accordion-toggle .accordion-chevron { margin-left: auto; }

/* ===== (26 sep, v48) Aire: lo último de cada pestaña ya no toca la barra de abajo ===== */
body { padding-bottom: calc(112px + env(safe-area-inset-bottom)) !important; }
/* Préstamos y deudas: título algo separado de sus bloques (la frase de ayuda sigue pegada). */
#dineroPendientesInline > .pf-pend-group:first-child { margin-top: 10px; }

/* ===== (26 sep, v49) "Vas bien" sigue el color del tema =====
   Antes el número grande y "Vas muy bien" iban siempre en verde, también en
   morado o rosa. Ahora el estado bueno usa el color del tema; ámbar y rojo
   (avisos) no cambian, para que se sigan notando. El verde queda solo para
   lo que es "ahorro" y para los importes que entran (+). */
:root[data-theme="dark"] { --ok: var(--accent-strong); }
:root[data-theme="light"] { --ok: var(--accent); }
.home-hero .hero-value.positive, .an-verdict.positive, .onpace-verdict.ok,
#anPaceText strong.pos { color: var(--ok) !important; }

/* Lista desplegable nativa (<select>): fondo del tema, no el azul petróleo fijo. */
:root[data-theme="dark"] select option { --select-option-bg: var(--surface); }
select option:checked { background-color: var(--accent-fill, var(--accent)); color: #fff; }

/* ===== (27 sep, v50) Botones con texto largo: nunca se sale del botón ===== */
.dv-registro .modal-actions .btn { padding-left: 10px; padding-right: 10px; white-space: normal; line-height: 1.2; text-align: center; }
.dv-registro .modal-actions .btn.secondary { flex: 0 0 auto; padding-left: 16px; padding-right: 16px; }
.dv-registro .modal-actions .btn.primary { flex: 1 1 0; }


/* ============================================================
   (27 sep, v51) ESCRITORIO — desde 1100 px de ancho.
   Panel al estilo de las apps de banco: menú a la izquierda, una
   tarjeta grande con el número que importa y gráficos a los lados.
   En el móvil no se ve nada de esto (las piezas .dk-* están ocultas).
============================================================ */
:root { --c-ahorro: #3F8F6B; }
:root[data-theme="dark"] { --c-ahorro: #5FA491; }
.dk-nav, .dk-head, .dk-solo { display: none; }

@media (min-width: 1100px) {
  .brandbar, .tabbar, .tabbar-blur, .app > .topbar, #dineroBackInicioBtn { display: none !important; }
  body { padding-bottom: 48px !important; }
  .app { max-width: none !important; margin: 0 !important; padding: 26px 40px 0 288px !important; }
  .app > * { width: 100%; max-width: 1180px; margin-left: auto; margin-right: auto; box-sizing: border-box; }
  .app > .savings-screen, .app > #tab-ajustes { max-width: 860px; }
  .dk-ic { fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; flex-shrink: 0; }

  /* ---------- Menú lateral ---------- */
  .dk-nav {
    display: flex; flex-direction: column; gap: 6px; position: fixed; z-index: 80;
    left: 0; top: 0; bottom: 0; width: 248px; box-sizing: border-box; padding: 26px 18px 18px;
    border-right: 1px solid var(--card-border);
    background: color-mix(in srgb, var(--surface, #10231F) 88%, transparent);
    backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px);
  }
  .dk-logo { display: flex; align-items: center; gap: 10px; padding: 0 8px 20px; font-size: 20px; font-weight: 800; letter-spacing: -0.02em; }
  .dk-logo img { width: 38px; height: 38px; }
  .dk-logo b { color: #E58FA0; font-weight: 800; }
  :root[data-theme="dark"] .dk-logo b { color: #F0A7B3; }
  .dk-add {
    height: 48px; margin-bottom: 14px; border: 0; border-radius: 999px; cursor: pointer;
    background: var(--text-primary); color: var(--surface, #10231F); font: inherit; font-size: 15px; font-weight: 800;
    display: flex; align-items: center; justify-content: center; gap: 8px;
  }
  .dk-add:hover { filter: brightness(1.06); }
  .dk-nav-item {
    display: flex; align-items: center; gap: 12px; height: 46px; padding: 0 14px; border: 0; border-radius: 14px;
    background: transparent; color: var(--text-secondary); font: inherit; font-size: 15px; font-weight: 600; cursor: pointer; text-align: left;
  }
  .dk-nav-item:hover { background: var(--input-bg); color: var(--text-primary); }
  .dk-nav-item.is-activo { background: color-mix(in srgb, var(--accent) 18%, transparent); color: var(--text-primary); font-weight: 750; }
  .dk-nav-item.is-activo .dk-ic { color: var(--accent-strong); }
  .dk-nav-sp { flex-grow: 1; }
  .dk-pinky {
    border-radius: 20px; padding: 16px; margin-bottom: 8px; display: flex; flex-direction: column; gap: 10px;
    background: color-mix(in srgb, #F0A7B3 11%, transparent); border: 1px solid color-mix(in srgb, #F0A7B3 26%, transparent);
  }
  .dk-pinky-head { display: flex; align-items: center; gap: 10px; font-size: 15px; }
  .dk-pinky-head img { width: 32px; height: 32px; }
  .dk-pinky p { margin: 0; font-size: 13px; line-height: 1.45; color: var(--text-secondary); }
  .dk-pinky button {
    height: 38px; border-radius: 999px; cursor: pointer; font: inherit; font-size: 13.5px; font-weight: 700;
    background: transparent; border: 1px solid color-mix(in srgb, #E58FA0 55%, transparent); color: var(--text-primary);
  }
  .dk-pinky button:hover { background: color-mix(in srgb, #F0A7B3 14%, transparent); }
  .dk-atajo { margin: 8px 0 0; font-size: 11px; text-align: center; color: var(--text-secondary); opacity: .8; }
  .dk-atajo kbd { font: inherit; font-weight: 800; padding: 1px 6px; border-radius: 6px; border: 1px solid var(--card-border); }

  /* ---------- Cabecera ---------- */
  .dk-head { display: flex; align-items: center; gap: 14px; margin-bottom: 22px !important; }
  .dk-head-tit h1 { margin: 0; font-size: 26px; font-weight: 800; letter-spacing: -0.02em; }
  .dk-head-tit p { margin: 3px 0 0; font-size: 13.5px; color: var(--text-secondary); }
  .dk-head-sp { flex-grow: 1; }
  .dk-pill, .dk-mes {
    height: 44px; display: flex; align-items: center; gap: 8px; padding: 0 16px; border-radius: 999px;
    background: var(--input-bg); border: 1px solid var(--card-border); color: var(--text-primary);
    font: inherit; font-size: 13.5px; font-weight: 700; cursor: pointer;
  }
  .dk-mes { padding: 0 6px; gap: 2px; cursor: default; }
  .dk-mes button { border: 0; background: transparent; color: var(--text-primary); font: inherit; cursor: pointer; }
  .dk-mes > button:not(.dk-mes-txt) { width: 34px; height: 34px; border-radius: 999px; font-size: 18px; }
  .dk-mes > button:not(.dk-mes-txt):hover { background: var(--card-bg-strong); }
  .dk-mes-txt { font-size: 13.5px !important; font-weight: 800 !important; letter-spacing: .06em; text-transform: uppercase; padding: 0 4px; }

  /* ---------- Piezas comunes ---------- */
  .dk-card { display: block; border-radius: 24px; padding: 20px 22px; background: var(--card-bg); border: 1px solid var(--card-border); box-sizing: border-box; }
  .dk-card h2, .dk-an-cats-l h2 { margin: 0; font-size: 15px; font-weight: 800; }
  .dk-card-head { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; margin-bottom: 14px; }
  .dk-card-num { font-size: 22px; font-weight: 800; letter-spacing: -0.02em; }
  .dk-card-link { border: 0; background: none; padding: 0; font: inherit; font-size: 13px; font-weight: 700; color: var(--accent-strong); cursor: pointer; }
  .dk-click { cursor: pointer; transition: border-color .15s; }
  .dk-click:hover { border-color: color-mix(in srgb, var(--accent) 45%, var(--card-border)); }
  .dk-vacio { margin: 0; font-size: 13px; line-height: 1.45; color: var(--text-secondary); }
  .dk-nota { margin: 10px 0 0; font-size: 13px; color: var(--text-secondary); }
  .dk-barra { height: 8px; border-radius: 999px; background: var(--track, rgba(127,127,127,.18)); overflow: hidden; }
  .dk-barra > span { display: block; height: 100%; border-radius: 999px; background: var(--c-ahorro); }
  .dk-segs { display: flex; gap: 3px; height: 12px; border-radius: 999px; overflow: hidden; margin-bottom: 14px; }
  .dk-segs > span { height: 100%; }
  .dk-cats { display: flex; flex-direction: column; }
  .dk-cats-2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px 18px; }
  .dk-cat { display: flex; align-items: center; gap: 9px; font-size: 13.5px; min-height: 26px; }
  .dk-cats:not(.dk-cats-2) .dk-cat { min-height: 42px; border-top: 1px solid var(--card-border); }
  .dk-cat i { width: 10px; height: 10px; border-radius: 999px; flex-shrink: 0; }
  .dk-cat-n { flex-grow: 1; font-weight: 650; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .dk-cat-p { font-size: 12.5px; color: var(--text-secondary); }
  .dk-cats-2 .dk-cat-p { display: none; }
  .dk-cat b { font-weight: 800; min-width: 70px; text-align: right; }
  .dk-eje { display: flex; justify-content: space-between; margin-top: 8px; font-size: 11px; color: var(--text-secondary); }
  .dk-btn-linea {
    margin-top: auto; height: 40px; border-radius: 999px; cursor: pointer; font: inherit; font-size: 13.5px; font-weight: 700;
    background: transparent; color: var(--text-primary); border: 1px solid var(--card-border);
  }
  .dk-btn-linea:hover { background: var(--input-bg); }
  .dk-btn-lleno {
    height: 44px; padding: 0 22px; border: 0; border-radius: 999px; cursor: pointer; font: inherit; font-size: 14px; font-weight: 800;
    background: var(--text-primary); color: var(--surface, #10231F); white-space: nowrap;
  }

  /* ---------- Tarjeta grande (hero) ---------- */
  .dk-hero {
    display: flex; flex-direction: column; gap: 14px; position: relative; overflow: hidden;
    border-radius: 28px; padding: 28px 32px 26px; box-sizing: border-box; color: #F6EEE6;
    background:
      radial-gradient(520px 300px at 92% 0%, rgba(240,167,179,0.22), rgba(240,167,179,0) 70%),
      radial-gradient(700px 360px at 5% 115%, rgba(255,255,255,0.10), rgba(255,255,255,0) 70%),
      linear-gradient(135deg, color-mix(in srgb, var(--hero-base, var(--accent)) 78%, #0B1714) 0%, color-mix(in srgb, var(--hero-base, var(--accent)) 48%, #0B1714) 100%);
    border: 1px solid rgba(255,255,255,0.10);
    box-shadow: 0 24px 60px -30px color-mix(in srgb, var(--hero-base, var(--accent)) 70%, transparent);
  }
  .dk-hero-top { display: flex; justify-content: space-between; align-items: center; }
  .dk-hero-lab { font-size: 14px; font-weight: 600; color: rgba(246,238,230,0.78); }
  .dk-hero-pill { height: 34px; padding: 0 16px; border-radius: 999px; border: 1px solid rgba(255,255,255,0.22); background: rgba(255,255,255,0.08); color: #F6EEE6; font: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }
  .dk-hero-pill:hover { background: rgba(255,255,255,0.16); }
  .dk-hero-num { font-size: 72px; font-weight: 800; letter-spacing: -0.045em; line-height: 1; margin-top: -4px; }
  .dk-hero-sub { margin: 0; font-size: 15px; color: rgba(246,238,230,0.82); }
  .dk-hero-sub b { color: #fff; }
  .dk-hero-barra { position: relative; height: 8px; border-radius: 999px; background: rgba(255,255,255,0.16); max-width: 620px; }
  .dk-hero-barra > span { display: block; height: 100%; border-radius: 999px; background: #F2A6B4; }
  .dk-hero-barra > i { position: absolute; top: -4px; width: 2px; height: 16px; border-radius: 2px; background: rgba(255,255,255,0.8); }
  .dk-hero-leyenda { display: flex; justify-content: space-between; max-width: 620px; font-size: 12.5px; color: rgba(246,238,230,0.72); }
  .dk-leyenda-izq { justify-content: flex-start; gap: 22px; flex-wrap: wrap; font-size: 13px; }
  .dk-leyenda-izq span { display: flex; align-items: center; gap: 7px; }
  .dk-leyenda-izq i { width: 9px; height: 9px; border-radius: 999px; }
  .dk-leyenda-izq b { color: #fff; }
  .dk-segs-grande { height: 14px; margin: 4px 0 0; max-width: 720px; }
  .dk-acciones { display: flex; gap: 24px; margin-top: 6px; }
  .dk-accion { border: 0; background: transparent; color: #F6EEE6; padding: 0; width: 70px; display: flex; flex-direction: column; align-items: center; gap: 8px; font: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }
  .dk-accion-ico { width: 54px; height: 54px; border-radius: 999px; display: flex; align-items: center; justify-content: center; background: rgba(255,255,255,0.14); border: 1px solid rgba(255,255,255,0.18); transition: background .15s, transform .15s; }
  .dk-accion:hover .dk-accion-ico { background: rgba(255,255,255,0.24); transform: translateY(-1px); }

  /* ---------- Sobres ---------- */
  .dk-sobres { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
  .dk-sobre {
    border-radius: 22px; padding: 18px 20px; box-sizing: border-box; text-align: left; font: inherit; color: var(--text-primary);
    background: var(--card-bg); border: 1px solid var(--card-border); display: flex; flex-direction: column; gap: 6px; cursor: pointer;
  }
  button.dk-sobre:hover { border-color: color-mix(in srgb, var(--accent) 45%, var(--card-border)); }
  .dk-sobre-fijo { cursor: default; gap: 10px; padding: 20px; }
  .dk-sobre-lab { display: flex; align-items: center; gap: 8px; font-size: 13px; font-weight: 700; color: var(--text-secondary); }
  .dk-sobre-lab i { width: 9px; height: 9px; border-radius: 999px; }
  .dk-sobre-num { font-size: 26px; font-weight: 800; letter-spacing: -0.03em; }
  .dk-sobre-fijo .dk-sobre-num { font-size: 30px; }
  .dk-sobre-nota { font-size: 12.5px; line-height: 1.45; color: var(--text-secondary); }

  /* ---------- Inicio ---------- */
  .app.dk-mes-actual #tab-inicio.active {
    display: grid !important; grid-template-columns: minmax(0, 1fr) 360px; column-gap: 24px; row-gap: 20px; align-items: start;
  }
  .app.dk-mes-actual #tab-inicio > * { grid-column: 1; }
  .app.dk-mes-actual #tab-inicio > .card.summary-card { display: none !important; }
  .app.dk-mes-actual #dkInicioHero { display: flex; }
  .app.dk-mes-actual #dkInicioSobres { display: grid; }
  .app.dk-mes-actual #dkInicioLado { display: flex; flex-direction: column; gap: 18px; grid-column: 2; grid-row: 1 / span 30; position: sticky; top: 20px; }
  #tab-inicio .mov-section { border-radius: 24px; padding: 18px 20px 10px; background: var(--card-bg); border: 1px solid var(--card-border); }
  .dk-pinky-dice { display: flex; gap: 12px; align-items: flex-start; }
  .dk-pinky-dice img { width: 40px; height: 40px; flex-shrink: 0; }
  .dk-pinky-dice p { margin: 0; padding: 12px 16px; border-radius: 18px 18px 18px 6px; font-size: 13.5px; line-height: 1.45;
    background: color-mix(in srgb, #F0A7B3 12%, transparent); border: 1px solid color-mix(in srgb, #F0A7B3 25%, transparent); }
  .dk-dias { height: 110px; display: flex; align-items: flex-end; gap: 3px; border-bottom: 1px solid var(--card-border); }
  .dk-dia { flex: 1 1 0; border-radius: 4px 4px 2px 2px; background: var(--track, rgba(127,127,127,.2)); min-height: 2px; }
  .dk-dia.is-gasto { background: var(--c-dia); }
  .dk-dia.is-futuro { opacity: .35; }
  .dk-hucha { display: flex; flex-direction: column; gap: 7px; }
  .dk-hucha + .dk-hucha { margin-top: 14px; }
  .dk-hucha-top { display: flex; justify-content: space-between; font-size: 14px; }
  .dk-hucha-top span { font-weight: 800; }
  .dk-hucha small { font-size: 12px; color: var(--text-secondary); }
  .dk-prox { display: flex; align-items: center; gap: 14px; }
  .dk-prox-ico { width: 42px; height: 42px; border-radius: 999px; display: flex; align-items: center; justify-content: center; background: color-mix(in srgb, var(--c-ahorro) 18%, transparent); color: var(--c-ahorro); }
  .dk-prox-t { flex-grow: 1; display: flex; flex-direction: column; gap: 2px; font-size: 14px; }
  .dk-prox-t small { font-size: 12.5px; color: var(--text-secondary); }
  .dk-prox-v { font-size: 16px; color: var(--c-ahorro); }

  /* ---------- Dinero ---------- */
  .app.dk-mes-actual #tab-finanzas.active {
    display: grid !important; grid-template-columns: minmax(0, 1fr) 360px; grid-template-rows: auto auto auto 1fr;
    column-gap: 24px; row-gap: 18px; align-items: start;
  }
  .app.dk-mes-actual #tab-finanzas > * { grid-column: 1 / -1; }
  .app.dk-mes-actual #tab-finanzas > .caja-bloque, .app.dk-mes-actual #dineroCuentasListExtra { display: none !important; }
  .app.dk-mes-actual #dkDineroMain { display: flex; flex-direction: column; gap: 20px; grid-column: 1; grid-row: 1 / span 4; }
  .app.dk-mes-actual #tab-finanzas > .fin-group-label { grid-column: 2; grid-row: 1; margin: 6px 4px 0 !important; }
  .app.dk-mes-actual #dineroPendientesInline { grid-column: 2; grid-row: 2; margin-top: -8px !important; }
  .app.dk-mes-actual #dkDineroMovidos { display: block; grid-column: 2; grid-row: 3; }
  .dk-bancos { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
  .dk-banco { display: flex; align-items: center; gap: 12px; padding: 14px; border-radius: 18px; text-align: left; font: inherit; color: var(--text-primary); background: var(--input-bg); border: 1px solid var(--card-border); cursor: pointer; }
  .dk-banco:hover { border-color: color-mix(in srgb, var(--accent) 45%, var(--card-border)); }
  .dk-banco-ico { width: 40px; height: 40px; flex-shrink: 0; border-radius: 12px; display: flex; align-items: center; justify-content: center; background: color-mix(in srgb, var(--accent) 16%, transparent); color: var(--accent-strong); }
  .dk-banco-ico.dk-grande { width: 56px; height: 56px; border-radius: 18px; }
  .dk-banco-t { flex-grow: 1; display: flex; flex-direction: column; gap: 3px; font-size: 14px; min-width: 0; }
  .dk-banco-t small { font-size: 13px; line-height: 1.45; color: var(--text-secondary); }
  .dk-vacio-card { display: flex; align-items: center; gap: 18px; border-style: dashed; }
  .dk-fila { display: flex; align-items: center; gap: 12px; min-height: 56px; border-top: 1px solid var(--card-border); }
  .dk-fila-ico { width: 36px; height: 36px; flex-shrink: 0; border-radius: 999px; display: flex; align-items: center; justify-content: center; background: color-mix(in srgb, var(--c-ahorro) 16%, transparent); color: var(--c-ahorro); }
  .dk-fila-t { flex-grow: 1; display: flex; flex-direction: column; gap: 2px; font-size: 13.5px; min-width: 0; }
  .dk-fila-t small { font-size: 12px; color: var(--text-secondary); }
  .dk-movidos .dk-card-head { margin-bottom: 6px; }

  /* ---------- Analizar ---------- */
  .app.dk-mes-actual #tab-estadisticas.active {
    display: grid !important; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); column-gap: 20px; row-gap: 20px; align-items: stretch;
  }
  .app.dk-mes-actual #tab-estadisticas > * { grid-column: 1 / -1; }
  .app.dk-mes-actual #anMesLabel, .app.dk-mes-actual #anVerdictCard, .app.dk-mes-actual #tab-estadisticas > .percent-card { display: none !important; }
  .app.dk-mes-actual #dkAnHero, .app.dk-mes-actual #dkAnCats { display: flex; grid-column: 1; }
  .app.dk-mes-actual #dkAnRitmo, .app.dk-mes-actual #dkAnSemanas { display: block; grid-column: 2; }
  .app.dk-mes-actual #anMasBtn { justify-self: center; width: auto !important; padding: 0 28px; }
  #factCard {
    border-radius: 24px !important; padding: 14px 16px !important;
    background: color-mix(in srgb, #F0A7B3 10%, var(--card-bg)) !important; border: 1px solid color-mix(in srgb, #F0A7B3 24%, transparent) !important;
  }
  #factCard .fact-card-text { font-size: 16px !important; }
  .dk-an-hero { gap: 16px; }
  .dk-veredicto { font-size: 46px; font-weight: 800; letter-spacing: -0.035em; line-height: 1; color: #DDF2EB; }
  .dk-veredicto.is-warn { color: #FFE2A8; }
  .dk-veredicto.is-orange { color: #FFC9A8; }
  .dk-veredicto.is-danger { color: #FFB3B3; }
  .dk-comp { display: flex; flex-direction: column; gap: 6px; }
  .dk-comp-t { display: flex; justify-content: space-between; font-size: 13px; }
  .dk-barra-hero { height: 10px; background: rgba(255,255,255,0.14); }
  .dk-hero-datos { display: flex; gap: 32px; margin-top: auto; }
  .dk-hero-datos span { display: flex; flex-direction: column; gap: 2px; }
  .dk-hero-datos small { font-size: 12.5px; color: rgba(246,238,230,0.72); }
  .dk-hero-datos b { font-size: 22px; font-weight: 800; }
  .dk-ritmo { width: 100%; height: 190px; display: block; overflow: visible; }
  .dk-eje-l { stroke: var(--card-border); stroke-width: 1; }
  .dk-eje-t { stroke: var(--card-border); stroke-width: 1; stroke-dasharray: 2 4; }
  .dk-ideal { stroke: var(--text-secondary); stroke-width: 2; stroke-dasharray: 6 6; fill: none; opacity: .7; }
  .dk-ley { display: flex; gap: 14px; font-size: 12px; color: var(--text-secondary); }
  .dk-ley span { display: flex; align-items: center; gap: 6px; }
  .dk-ley i { width: 14px; height: 3px; border-radius: 2px; }
  .dk-ley i.dk-ley-dash { height: 0; border-top: 2px dashed var(--text-secondary); }
  .dk-an-cats { align-items: center; gap: 26px; }
  .dk-an-cats-l { flex-grow: 1; min-width: 0; display: flex; flex-direction: column; gap: 8px; }
  .dk-donut { position: relative; width: 176px; height: 176px; flex-shrink: 0; }
  .dk-donut svg { width: 176px; height: 176px; display: block; }
  .dk-donut-fondo { fill: none; stroke: var(--track, rgba(127,127,127,.18)); stroke-width: 22; }
  .dk-donut-c { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; }
  .dk-donut-c small { font-size: 12px; color: var(--text-secondary); }
  .dk-donut-c b { font-size: 21px; font-weight: 800; letter-spacing: -0.02em; }
  .dk-semanas { height: 210px; display: flex; gap: 18px; align-items: stretch; }
  .dk-sem { flex: 1 1 0; display: flex; flex-direction: column; align-items: center; gap: 8px; min-width: 0; }
  .dk-sem b { font-size: 12.5px; font-weight: 800; white-space: nowrap; }
  .dk-sem-col { flex-grow: 1; width: 100%; max-width: 64px; display: flex; align-items: flex-end; border-bottom: 1px solid var(--card-border); }
  .dk-sem-col > span { display: block; width: 100%; border-radius: 12px 12px 4px 4px; background: var(--c-dia); min-height: 2px; }
  .dk-sem small { font-size: 11.5px; color: var(--text-secondary); text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
  #anMasWrap { display: grid !important; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); column-gap: 20px; row-gap: 20px; align-items: start; }
  #anMasWrap[style*="none"] { display: none !important; }
  #anMasWrap > * { grid-column: 1 / -1; }
  #anMasWrap > #accHistoryCard { grid-column: 1; }
  #anMasWrap > #anHuchaCard { grid-column: 2; }

}
@media (min-width: 1100px) {
  .dk-eje { position: relative; }
  .dk-eje-hoy { position: absolute; top: 0; transform: translateX(-50%); font-weight: 700; color: var(--text-primary); }
  .dk-cats-2 .dk-cat b { min-width: 0; }
  .dk-cats-2 { gap: 8px 22px; }
}
@media (min-width: 1100px) {
  /* Pantallas completas (Ahorro, Ingresos, Fijos…): dejan el menú lateral a la vista. */
  .savings-screen { left: 248px !important; padding-top: 40px !important; padding-bottom: 60px !important; }
  .app > .savings-screen { max-width: none !important; width: auto !important; margin: 0 !important; }
}
@media (min-width: 1100px) {
  /* Mirando otro mes: se ve la versión de siempre (el panel es del mes en curso). */
  .app:not(.dk-mes-actual) .dk-solo { display: none !important; }
}
@media (min-width: 1100px) {
  .settings-panel-header-root { display: none !important; }
  #settingsModalOverlay { background: transparent !important; border: 0 !important; box-shadow: none !important; padding: 0 !important; }
}
@media (min-width: 1100px) {
  .dk-sobre-num { font-size: clamp(20px, 1.9vw, 26px); white-space: nowrap; }
  .dk-sobre-fijo .dk-sobre-num { font-size: clamp(22px, 2.1vw, 30px); }
  .dk-sobre { min-width: 0; }
}
/* Portátiles pequeños (1100–1319 px): menú más estrecho y columna derecha más fina. */
@media (min-width: 1100px) and (max-width: 1319px) {
  .dk-nav { width: 216px; padding-left: 14px; padding-right: 14px; }
  .app { padding-left: 244px !important; padding-right: 28px !important; }
  .savings-screen { left: 216px !important; }
  .app.dk-mes-actual #tab-inicio.active, .app.dk-mes-actual #tab-finanzas.active { grid-template-columns: minmax(0, 1fr) 310px; column-gap: 20px; }
  .dk-sobres { gap: 12px; }
  .dk-sobre, .dk-sobre-fijo { padding: 16px; }
  .dk-sobre-num, .dk-sobre-fijo .dk-sobre-num { font-size: 20px; }
  .dk-cats-2 { grid-template-columns: minmax(0, 1fr); }
  .dk-cats-2 .dk-cat-p { display: inline; }
  .dk-hero { padding: 24px 26px 22px; }
  .dk-hero-num { font-size: 58px; }
  .dk-acciones { gap: 14px; }
  .dk-veredicto { font-size: 38px; }
  .dk-an-cats { flex-direction: column; align-items: stretch; }
  .dk-donut { align-self: center; }
}

/* ===== (27 sep, v52) Semanas: bloque propio en Plan ===== */
#weeklySplitBlock .weeks-controls { display: none !important; }
.sem-promo {
  border-radius: 26px; padding: 20px; display: flex; flex-direction: column; gap: 16px;
  background: color-mix(in srgb, var(--accent) 14%, var(--card-bg)); border: 1px solid color-mix(in srgb, var(--accent) 35%, var(--card-border));
}
.sem-promo-top { display: flex; gap: 14px; align-items: flex-start; }
.sem-promo-ico { font-size: 28px; line-height: 1; }
.sem-promo h3 { margin: 0 0 6px; font-size: 17px; font-weight: 800; }
.sem-promo p { margin: 0; font-size: 13.5px; line-height: 1.5; color: var(--text-secondary); }
.sem-activar { width: 100%; min-height: 48px; }
.sem-fila { display: flex; gap: 10px; overflow-x: auto; padding: 2px 2px 6px; margin: 0 -2px; scrollbar-width: none; }
.sem-fila::-webkit-scrollbar { display: none; }
.sem-pill {
  flex: 0 0 auto; min-width: 118px; box-sizing: border-box; display: flex; flex-direction: column; gap: 4px; text-align: left;
  padding: 12px 14px; border-radius: 18px; background: var(--card-bg); border: 1px solid var(--card-border); color: var(--text-primary); font: inherit;
}
.sem-pill b { font-size: 13.5px; font-weight: 800; display: flex; align-items: center; gap: 6px; white-space: nowrap; }
.sem-pill b i { font-style: normal; font-size: 10.5px; font-weight: 800; padding: 2px 7px; border-radius: 999px; background: var(--accent-fill, var(--accent)); color: var(--surface, #fff); }
.sem-pill small { font-size: 12px; color: var(--text-secondary); white-space: nowrap; }
.sem-pill em { font-style: normal; font-size: 12.5px; font-weight: 750; white-space: nowrap; }
.sem-fila-preview .sem-pill { min-width: 104px; background: var(--card-bg-strong); }
.sem-fila-preview .sem-pill em { color: var(--accent-strong); font-size: 14px; }
.sem-boton { cursor: pointer; transition: border-color .15s, background .15s; }
.sem-boton:hover { border-color: color-mix(in srgb, var(--accent) 45%, var(--card-border)); }
.sem-boton.es-elegida { border-color: var(--accent); background: color-mix(in srgb, var(--accent) 16%, var(--card-bg)); box-shadow: 0 0 0 1px var(--accent) inset; }
.sem-boton.es-cerrada, .sem-boton.es-futura { opacity: .72; }
.sem-boton.es-pasada em { color: var(--red); }
.sem-boton.es-justa em { color: var(--amber); }
.sem-mini { display: block; height: 5px; border-radius: 999px; background: var(--track, rgba(127,127,127,.2)); overflow: hidden; margin-top: 2px; }
.sem-mini > span { display: block; height: 100%; border-radius: 999px; background: var(--c-dia); }
.sem-boton.es-pasada .sem-mini > span { background: var(--red); }
.sem-activo { display: flex; flex-direction: column; gap: 10px; }
.sem-head { display: flex; justify-content: space-between; align-items: center; gap: 10px; font-size: 12.5px; color: var(--text-secondary); padding: 0 4px; }
.sem-head-acc { display: flex; gap: 14px; }
.sem-head-acc button { border: 0; background: none; padding: 4px 0; font: inherit; font-size: 12.5px; font-weight: 700; color: var(--accent-strong); cursor: pointer; }
.sem-head-acc button[data-sem="off"] { color: var(--text-secondary); }
#weeklySplitBlock { margin-top: -6px; }
@media (min-width: 1100px) {
  .sem-fila { flex-wrap: wrap; overflow: visible; }
  .sem-pill { flex: 1 1 0; min-width: 96px; }
  .sem-fila-preview .sem-pill { min-width: 90px; }
  .sem-promo { padding: 24px; }
}
.sem-pill .sem-hoy { font-style: normal; font-size: 10px; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; color: var(--accent-strong); margin-bottom: -2px; }
.sem-pill .sem-est { font-size: 11px; margin-top: -3px; }
.sem-boton.es-actual { border-color: color-mix(in srgb, var(--accent) 55%, var(--card-border)); }
.sem-pill { justify-content: flex-end; }
.sem-fila { padding-top: 10px; position: relative; }
.sem-pill { position: relative; justify-content: flex-start; }
.sem-pill .sem-hoy {
  position: absolute; top: -9px; left: 12px; margin: 0; padding: 2px 8px; border-radius: 999px; white-space: nowrap;
  background: var(--accent-fill, var(--accent)); color: var(--surface, #fff); font-size: 9.5px; letter-spacing: .05em;
}

/* ===== (28 sep, v53) Escritorio: aviso de "Modo prueba" y Plan por prioridades ===== */
@media (min-width: 1100px) {
  body.is-guest .dk-nav { top: 36px; }
  body.is-guest .app { padding-top: 64px !important; }
  body.is-guest .savings-screen { top: 36px !important; }

  #tab-semanas.dk-plan-cols.active {
    display: grid !important; grid-template-columns: minmax(0, 1fr) 360px; column-gap: 24px; align-items: start;
  }
  #tab-semanas.dk-plan-cols > :not(.plan-col) { grid-column: 1 / -1; }
  .plan-col { display: flex; flex-direction: column; gap: 16px; min-width: 0; }
  #planColSide { position: sticky; top: 20px; }
  body.is-guest #planColSide { top: 56px; }
  .plan-col > .plan-group-label { margin: 8px 4px -6px !important; }
  .plan-col > .plan-group-label:first-child { margin-top: 0 !important; }

  /* Izquierda: el día a día como tarjeta grande */
  #planColMain #diaADiaLimitCard {
    border-radius: 28px; padding: 26px 30px; color: #F6EEE6; border: 1px solid rgba(255,255,255,0.10);
    background:
      radial-gradient(520px 300px at 92% 0%, rgba(240,167,179,0.20), rgba(240,167,179,0) 70%),
      linear-gradient(135deg, color-mix(in srgb, var(--accent) 78%, #0B1714) 0%, color-mix(in srgb, var(--accent) 48%, #0B1714) 100%);
    box-shadow: 0 24px 60px -30px color-mix(in srgb, var(--accent) 70%, transparent);
  }
  #planColMain #diaADiaLimitCard * { color: inherit !important; border-color: rgba(255,255,255,0.14) !important; }
  #planColMain #diaADiaLimitCard #diaADiaLimitValue { font-size: 56px !important; letter-spacing: -0.04em; }
  #planColMain #diaADiaLimitCard .limit-bar { background: rgba(255,255,255,0.16) !important; height: 8px; }
  #planColMain #diaADiaLimitCard .limit-bar-fill { background: #F2A6B4 !important; }
  #planColMain #diaADiaLimitCard .btn { background: rgba(255,255,255,0.10) !important; border: 1px solid rgba(255,255,255,0.22) !important; }
  #planColMain .sem-fila { flex-wrap: nowrap; }
  #planColMain .sem-pill { flex: 1 1 0; min-width: 0; }

  /* Derecha: consultas, en tarjetas sobrias */
  #planColSide #planResumenLinea { border-radius: 24px; padding: 20px 22px; margin: 0 !important; background: var(--card-bg); border: 1px solid var(--card-border); }
  #planColSide #planProximoIngreso { margin: -8px 6px 0 !important; font-size: 12.5px; }
  #planColSide .weeks-controls, #planColSide #planSearchRow { margin: 0; }
  #planColSide #searchResultsList { max-height: 460px; overflow-y: auto; }
}
@media (min-width: 1100px) {
  #planColSide::before {
    content: "Tu mes"; display: block; margin: 0 4px -6px; font-size: 12.5px; font-weight: 750;
    text-transform: uppercase; letter-spacing: 1px; color: var(--text-secondary);
  }
}

/* ===== (28 sep, v54) Semanas: pregunta clara, semana actual en grande ===== */
.sem-vacio { display: none; }
#semanasLabel:has(+ .sem-vacio) { margin-bottom: 0 !important; }
.sem-pregunta {
  border-radius: 26px; padding: 20px; display: flex; flex-direction: column; gap: 14px;
  background: color-mix(in srgb, var(--accent) 12%, var(--card-bg)); border: 1px solid color-mix(in srgb, var(--accent) 30%, var(--card-border));
}
.sem-pregunta-t { margin: 0; font-size: 17px; font-weight: 800; }
.sem-pregunta-n { margin: 0; font-size: 12.5px; color: var(--text-secondary); text-align: center; }
.sem-opciones { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.sem-opcion {
  display: flex; flex-direction: column; align-items: flex-start; gap: 4px; text-align: left; cursor: pointer;
  padding: 14px; border-radius: 18px; font: inherit; color: var(--text-primary);
  background: var(--card-bg); border: 1.5px solid var(--card-border); transition: border-color .15s, background .15s;
}
.sem-opcion:hover { border-color: var(--accent); }
.sem-opcion-dest { border-color: color-mix(in srgb, var(--accent) 60%, var(--card-border)); }
.sem-op-ico { font-size: 24px; line-height: 1; margin-bottom: 4px; }
.sem-opcion b { font-size: 15px; font-weight: 800; }
.sem-opcion small { font-size: 12.5px; line-height: 1.4; color: var(--text-secondary); }
.sem-linea {
  display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap;
  padding: 12px 16px; border-radius: 18px; border: 1px dashed var(--card-border); font-size: 13px; color: var(--text-secondary);
}
.sem-linea button { border: 0; background: none; padding: 4px 0; font: inherit; font-size: 13px; font-weight: 750; color: var(--accent-strong); cursor: pointer; }
.sem-pie { display: flex; justify-content: center; align-items: center; gap: 8px; margin-top: 10px; font-size: 12px; color: var(--text-secondary); }
.sem-pie:empty { display: none; }
.sem-pie button { border: 0; background: none; padding: 4px 2px; font: inherit; font-size: 12px; font-weight: 600; color: var(--text-secondary); cursor: pointer; text-decoration: underline; text-underline-offset: 3px; text-decoration-color: color-mix(in srgb, var(--text-secondary) 40%, transparent); }
.sem-pie button:hover { color: var(--text-primary); }
.week-hoy-tag {
  display: inline-block; margin-bottom: 6px; padding: 3px 9px; border-radius: 999px; font-size: 10.5px; font-weight: 800;
  letter-spacing: .06em; text-transform: uppercase; background: var(--accent-fill, var(--accent)); color: var(--surface, #fff);
}
.week-card-featured .week-numbers .value { font-size: 30px !important; letter-spacing: -0.02em; }
.week-por-dia { margin: 2px 0 0; font-size: 13px; color: var(--text-secondary); }
.week-por-dia b { color: var(--text-primary); }
#weeklySplitBlock { margin-top: 0; }

/* ===== (28 sep, v54) Analizar por jerarquía: cómo voy → en qué → a qué ritmo → en el tiempo ===== */
/* Móvil: el dato curioso de Pinky baja; primero la respuesta. */
#tab-estadisticas > #anMesLabel { order: 1; }
#tab-estadisticas > #anVerdictCard { order: 2; }
#tab-estadisticas > .percent-card { order: 3; }
#tab-estadisticas > #factCard { order: 4; }
#tab-estadisticas > #anMasBtn { order: 5; }
#tab-estadisticas > #anMasWrap { order: 6; }
#anMasWrap > #accSummaryCard { order: -1; }
@media (min-width: 1100px) {
  .app.dk-mes-actual #tab-estadisticas #anMasWrap,
  .app.dk-mes-actual #tab-estadisticas #anMasWrap[style] { display: contents !important; }
  .app.dk-mes-actual #anMasBtn, .app.dk-mes-actual #anPaceCard, .app.dk-mes-actual #anAllocCard,
  .app.dk-mes-actual #anWeekChartBlock { display: none !important; }
  .app.dk-mes-actual #tab-estadisticas #anMesLabel { display: none !important; }
  .app.dk-mes-actual #tab-estadisticas #dkAnHero { order: 2; }
  .app.dk-mes-actual #tab-estadisticas #dkAnCats { order: 3; grid-column: 2; }
  .app.dk-mes-actual #tab-estadisticas #accSummaryCard { order: 4; grid-column: 1 / -1; }
  .app.dk-mes-actual #tab-estadisticas #dkAnLabRitmo { display: block; order: 5; grid-column: 1 / -1; }
  .app.dk-mes-actual #tab-estadisticas #dkAnRitmo { order: 6; grid-column: 1; }
  .app.dk-mes-actual #tab-estadisticas #dkAnSemanas { order: 7; grid-column: 2; }
  .app.dk-mes-actual #tab-estadisticas #factCard { order: 8; }
  .app.dk-mes-actual #tab-estadisticas #anGeneralLabel { order: 9; grid-column: 1 / -1; }
  .app.dk-mes-actual #tab-estadisticas #evoCard { order: 10; grid-column: 1 / -1; }
  .app.dk-mes-actual #tab-estadisticas #accHistoryCard { order: 11; grid-column: 1; align-self: start; }
  .app.dk-mes-actual #tab-estadisticas #anHuchaCard { order: 12; grid-column: 2; align-self: start; }
  .app.dk-mes-actual #tab-estadisticas #accSummaryCard { align-self: start; }
  .app.dk-mes-actual #tab-estadisticas .pf-group-label { margin: 10px 4px -8px !important; }
  .app.dk-mes-actual #tab-estadisticas > #anMesLabel { margin-top: 0 !important; }
  .dk-an-lab { font-size: 12.5px; }
}

/* ============================================================
   (28 sep, v56) Gasto compartido
   ============================================================ */
.comp-wrap { margin: -4px 0 14px; padding: 14px; border-radius: 16px; background: var(--card-bg); border: 1px solid var(--card-border); }
.comp-k { margin: 0 0 8px; font-size: 13px; font-weight: 700; color: var(--text-secondary); }
.comp-personas { display: flex; flex-wrap: wrap; gap: 6px; }
.comp-personas:empty { display: none; }
.comp-personas + .comp-add { margin-top: 10px; }
.comp-chip { display: inline-flex; align-items: center; gap: 4px; padding: 6px 6px 6px 12px; border-radius: 999px; background: var(--accent-fill, var(--accent)); color: var(--on-accent, #fff); font-size: 14px; font-weight: 700; }
.comp-chip button { width: 22px; height: 22px; border: 0; border-radius: 50%; background: rgba(255,255,255,.25); color: #fff; font-size: 15px; line-height: 1; cursor: pointer; padding: 0; }
.comp-add { display: flex; gap: 8px; }
.comp-add input { flex: 1; min-width: 0; }
.comp-add .btn { flex: 0 0 auto; padding-left: 14px; padding-right: 14px; }
.comp-sugeridas { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.comp-sugeridas:empty { display: none; }
.comp-sug { border: 1px dashed var(--card-border); background: transparent; color: var(--text-secondary); border-radius: 999px; padding: 5px 11px; font: inherit; font-size: 13px; cursor: pointer; }
.comp-sug:hover { color: var(--accent); border-color: var(--accent); }
.comp-modo { display: flex; gap: 4px; margin-top: 12px; padding: 3px; border-radius: 12px; background: var(--input-bg); border: 1px solid var(--card-border); }
.comp-modo-btn { flex: 1; border: 0; background: transparent; border-radius: 9px; padding: 8px 6px; font: inherit; font-size: 13px; font-weight: 700; color: var(--text-secondary); cursor: pointer; }
.comp-modo-btn.is-sel { background: var(--accent-fill, var(--accent)); color: var(--on-accent, #fff); }
.comp-yo { display: flex; align-items: center; gap: 8px; margin-top: 10px; font-size: 14px; color: var(--text-secondary); cursor: pointer; }
.comp-yo input { width: 18px; height: 18px; accent-color: var(--accent); }
.comp-montos { display: grid; gap: 8px; margin-top: 10px; }
.comp-montos:empty { display: none; }
.comp-monto { display: flex; align-items: center; gap: 10px; }
.comp-monto span { flex: 1; font-size: 14px; font-weight: 700; }
.comp-monto input { width: 110px; text-align: right; }
.comp-resumen { margin: 12px 0 0; font-size: 14px; color: var(--text-secondary); }
.comp-resumen b { color: var(--text-primary, inherit); }
.comp-resumen.is-error { color: var(--red); }
.comp-nota { display: block; margin-top: 4px; font-size: 12.5px; opacity: .85; }
.comp-monto input { padding: 9px 12px; border-radius: 12px; background: var(--input-bg); border: 1px solid var(--card-border); color: var(--text-primary); font: inherit; font-weight: 700; }
.comp-monto input:focus { outline: 2px solid var(--accent); outline-offset: 1px; }
/* (v58) Campos del compartido: mismo look redondeado que el resto */
#expenseCompartidoWrap .pf-input { border-radius: 14px; padding: 12px 14px; outline: none; box-shadow: none; }
#expenseCompartidoWrap .pf-input:focus { border-color: var(--accent); outline: none; box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 22%, transparent); }
#expenseCompartidoWrap .comp-add .btn { border-radius: 14px; }
.comp-monto input.pf-input { width: 110px; text-align: right; font-weight: 700; }
/* (v59) Debo / Me deben: personas a un toque */
.persona-sug { margin: -4px 0 14px; }
.comp-sug.is-sel { background: var(--accent-fill, var(--accent)); border-color: var(--accent); border-style: solid; color: var(--on-accent, #fff); }

/* (28 sep, v60) Ticket: categoría por producto */
.ticket-item-row { flex-wrap: wrap; }
.ticket-item-row .ti-concept button.ti-cat-label { display: block; width: auto; height: auto; padding: 0; margin: 1px 0 0; background: none; border: 0; font: inherit; font-size: 11.5px; color: var(--text-secondary); font-weight: 600; opacity: 1; border-radius: 0; cursor: pointer; }
.ticket-item-row .ti-concept button.ti-cat-label:hover { background: none; color: var(--accent); }
.ticket-item-row button.ti-cat { width: 28px; height: 28px; font-size: 19px; opacity: 1; background: none; border: 0; flex: 0 0 auto; cursor: pointer; }
.ticket-item-row button.ti-cat:hover { background: none; transform: scale(1.1); }
.ticket-item-row.is-cat-open .ti-cat-label { color: var(--accent) !important; }
.ticket-item-row .ti-cat-picker { flex: 0 0 100%; display: flex; flex-wrap: wrap; gap: 6px; padding: 8px 0 2px; }
.ticket-item-row .ti-cat-picker .category-chip { width: auto; height: auto; font-size: 12.5px; opacity: 1; padding: 6px 10px; gap: 4px; border-radius: 999px; }
.ticket-items-list:has(.is-cat-open) { max-height: 360px; }
.ticket-cat-resumen { display: flex; flex-wrap: wrap; gap: 6px 12px; margin: -4px 0 14px; font-size: 13px; color: var(--text-secondary); }
.ticket-cat-resumen b { color: var(--text-primary); font-weight: 700; }

/* (28 sep, v61) Pantallas estrechas (360 px): que "PinkFlow" no se corte y el título de movimientos quepa en una línea. */
@media (max-width: 380px) {
  .brandbar { padding-left: 12px; padding-right: 10px; }
  .brandbar-id { gap: 6px; padding-right: 4px; }
  .brandbar-id img { width: 30px; height: 30px; }
  .month-nav-label { letter-spacing: .04em; padding: 4px 5px; font-size: 13px; }
  .month-nav-arrow { width: 26px; }
  .mov-section-title { white-space: nowrap; }
  #inicioMovAllBtn { font-size: 13px; }
}
.mov-all-corto { display: none; }
@media (max-width: 440px) { .mov-all-largo { display: none; } .mov-all-corto { display: inline; } }
/* (v62) Tres colores, una fila */
.accent-card-grid { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
.accent-card-grid .accent-card-name { line-height: 1.2; }

/* ============================================================
   (28 sep, v63) Escritorio más vivo: menú con indicador, hover con
   movimiento, Ajustes destacado y tarjetas que responden al cursor.
   ============================================================ */
@media (min-width: 1100px) {
  .dk-nav { background: var(--card-bg); box-shadow: 1px 0 0 var(--card-border), 12px 0 40px -34px rgba(0,0,0,.35); }
  :root[data-theme="light"] .dk-nav { background: color-mix(in srgb, var(--surface) 70%, #fff); }
  .dk-logo img { width: 40px; height: 40px; transition: transform .35s cubic-bezier(.34,1.56,.64,1); }
  .dk-logo:hover img { transform: rotate(-8deg) scale(1.08); }
  .dk-add { transition: transform .18s cubic-bezier(.34,1.56,.64,1), box-shadow .2s ease, filter .2s ease; box-shadow: 0 10px 24px -14px rgba(0,0,0,.45); }
  .dk-add:hover { transform: translateY(-2px); box-shadow: 0 16px 30px -14px rgba(0,0,0,.5); }
  .dk-add:active { transform: scale(.97); }
  .dk-add .dk-ic { transition: transform .3s ease; }
  .dk-add:hover .dk-ic { transform: rotate(90deg); }
  .dk-nav-item { position: relative; transition: background .18s ease, color .18s ease, transform .18s ease; }
  .dk-nav-item .dk-ic { transition: transform .22s cubic-bezier(.34,1.56,.64,1), color .18s ease; }
  .dk-nav-item:hover { transform: translateX(3px); }
  .dk-nav-item:hover .dk-ic { transform: scale(1.12); color: var(--accent-strong); }
  .dk-nav-item:active { transform: scale(.98); }
  .dk-nav-item.is-activo { background: color-mix(in srgb, var(--accent-fill, var(--accent)) 16%, transparent); }
  .dk-nav-item.is-activo::before {
    content: ""; position: absolute; left: -18px; top: 10px; bottom: 10px; width: 4px; border-radius: 0 4px 4px 0;
    background: var(--accent-fill, var(--accent)); animation: dkBarra .25s ease both;
  }
  @keyframes dkBarra { from { transform: scaleY(.2); opacity: 0; } to { transform: none; opacity: 1; } }
  /* Ajustes: tarjeta propia al pie, con subtítulo, para que no se pierda */
  .dk-nav-item.dk-ajustes {
    height: auto; min-height: 56px; padding: 10px 14px; flex-wrap: wrap; column-gap: 12px; row-gap: 0;
    background: var(--card-bg-strong); border: 1px solid var(--card-border); color: var(--text-primary); font-weight: 750;
  }
  .dk-nav-item.dk-ajustes span { flex: 1; }
  .dk-ajustes-sub { flex-basis: 100%; padding-left: 32px; font-style: normal; font-size: 11.5px; font-weight: 600; color: var(--text-secondary); margin-top: -4px; }
  .dk-nav-item.dk-ajustes:hover .dk-ic { transform: rotate(60deg); }
  .dk-nav-item.dk-ajustes.is-activo::before { top: 14px; bottom: 14px; }
  .dk-pinky { transition: transform .2s ease, box-shadow .2s ease; }
  .dk-pinky:hover { transform: translateY(-2px); box-shadow: 0 16px 30px -22px rgba(0,0,0,.4); }
  /* Tarjetas del panel: se levantan un poco al pasar el cursor */
  .dk-card, .dk-sobre, #tab-inicio .mov-section { transition: transform .2s ease, box-shadow .2s ease, border-color .2s ease; }
  .dk-card:hover, button.dk-sobre:hover { transform: translateY(-3px); box-shadow: 0 18px 36px -26px rgba(0,0,0,.45); }
  .mov-row { transition: background .15s ease, transform .15s ease; }
  .mov-row:hover { transform: translateX(2px); }
  .dk-card-link { transition: letter-spacing .2s ease, opacity .2s ease; }
  .dk-card-link:hover { letter-spacing: .01em; }
  .dk-pinky-dice p { animation: dkBurbuja .45s cubic-bezier(.34,1.56,.64,1) both .15s; transform-origin: 0 100%; }
  @keyframes dkBurbuja { from { opacity: 0; transform: scale(.92) translateY(6px); } to { opacity: 1; transform: none; } }
}
@media (prefers-reduced-motion: reduce) {
  .dk-nav *, .dk-card, .dk-sobre, .mov-row, .dk-pinky-dice p { transition: none !important; animation: none !important; }
}

/* ============================================================
   (28 sep, v63) Colores de gráficas solo de marca: verde, rosa y
   negro (blanco en oscuro) + un gris. El ámbar/rojo queda solo para
   avisos (cuando vas justo o te pasas).
   ============================================================ */
:root {
  --c-verde: #2F6B5C; --c-verde-2: #8CC5B5; --c-rosa: #D9728F; --c-rosa-2: #F2A6B4;
  --c-tinta: #1A1A1A; --c-gris: #B3B8B5;
  --c-dia: var(--c-rosa); --c-ahorro: var(--c-verde); --c-fijos: var(--c-tinta); --c-libre: var(--c-gris);
}
:root[data-theme="dark"] {
  --c-verde: #7FBCAC; --c-verde-2: #3F7D6E; --c-rosa: #F2A6B4; --c-rosa-2: #B8566F;
  --c-tinta: #E9E9E9; --c-gris: #6F7571;
  --c-dia: var(--c-rosa); --c-ahorro: var(--c-verde); --c-fijos: var(--c-tinta); --c-libre: var(--c-gris);
}

/* (v63) Tarjeta grande del escritorio: siempre oscura para que el texto blanco se lea. */
:root[data-accent="rosa"] { --hero-base: #B8395F; }
:root[data-theme="dark"][data-accent="negro"] { --hero-base: #2E2E2E; }
/* (v63) "Añadir" del menú: color del tema */
@media (min-width: 1100px) {
  .dk-add { background: var(--accent-fill, var(--accent)); color: var(--on-accent, #fff); }
}
/* (v63) "+" en Rosa: rosa cerdito con signo rosa oscuro */
:root[data-accent="rosa"] .fab { --fab-color: #F2A6B4; --fab-ink: #8A2346; }
:root[data-theme="dark"][data-accent="rosa"] .fab { --fab-color: #F2A6B4; --fab-ink: #5A1630; }

/* ============================================================
   (28 sep, v64) Escritorio limpio y con jerarquía: menos cajas,
   menos negrita, sin información repetida.
   ============================================================ */
@media (min-width: 1100px) {
  /* Menú */
  .dk-nav-item:focus:not(:focus-visible) { outline: none; }
  .dk-nav-item { font-weight: 500; }
  .dk-nav-item.is-activo { font-weight: 650; }
  .dk-pinky-item img { width: 22px; height: 22px; margin-left: -1px; flex-shrink: 0; transition: transform .25s cubic-bezier(.34,1.56,.64,1); }
  .dk-pinky-item:hover img { transform: rotate(-10deg) scale(1.12); }
  .dk-nav-item.dk-ajustes {
    min-height: 46px; height: 46px; padding: 0 14px; flex-wrap: nowrap; background: transparent; border: 0; border-radius: 14px;
    color: var(--text-secondary); font-weight: 500; position: relative; margin-top: 10px;
  }
  .dk-nav-item.dk-ajustes::after { content: ""; position: absolute; left: 4px; right: 4px; top: -8px; border-top: 1px solid var(--card-border); }
  .dk-nav-item.dk-ajustes:hover { background: var(--input-bg); color: var(--text-primary); }
  .dk-nav-item.dk-ajustes.is-activo { background: color-mix(in srgb, var(--accent-fill, var(--accent)) 16%, transparent); color: var(--text-primary); }
  .dk-atajo { margin-top: 10px; }

  /* Tarjetas: sin borde, fondo suave; títulos más ligeros */
  .dk-card, .dk-sobre, #tab-inicio .mov-section, #planColSide .pf-group, #planColSide .settings-nav-row, #planResumenLinea { border-color: transparent !important; }
  .dk-card h2 { font-weight: 650; }
  .dk-sobre-lab, .dk-card-link { font-weight: 600; }
  .dk-card-sub { display: block; margin-top: 3px; font-size: 13px; font-weight: 500; color: var(--text-secondary); letter-spacing: 0; }
  .dk-card-ritmo.is-info h2 { color: var(--text-primary); }
  .dk-sobre { cursor: pointer; }
  span.dk-barra { display: block; margin-top: 10px; }

  /* Inicio */
  #dkInicioHero { gap: 16px; padding-bottom: 32px; }
  #dkInicioHero .dk-hero-sub { margin: 0; }
  #dkInicioHero .dk-hero-barra { margin-top: 8px; }

  /* Dinero */
  .app.dk-mes-actual #dkDineroMovidos.is-vacio { display: none !important; }
  .app.dk-mes-actual #tab-finanzas > .fin-group-label { display: none !important; }
  .app.dk-mes-actual #dineroPendientesInline { grid-row: 1 !important; margin-top: 0 !important; }
  .app.dk-mes-actual #dkDineroMovidos { grid-row: 2 !important; }
  .app.dk-mes-actual #dineroPendientesInline .pf-pend-intro { display: none; }
  .app.dk-mes-actual #dineroPendientesInline .pf-pend-tile small { display: none; }
  .app.dk-mes-actual #dineroPendientesInline .pf-pend-tile { min-height: 0; padding: 16px 18px; flex-direction: row; align-items: center; gap: 10px; border-color: transparent; }

  /* Plan: "Tu mes" arriba y en grande; el día a día como tarjeta clara */
  #planColSide::before { content: none !important; }
  #tab-semanas .plan-group-label, #planColSide #planSearchRow, #planColSide #searchStatus, #planColSide #searchResultsList { display: none !important; }
  #planColMain #planResumenLinea { border-radius: 26px; padding: 26px 28px; margin: 0 !important; background: var(--card-bg); }
  #planColMain #planResumenLinea .pb-barra { height: 16px; }
  #planColMain #planResumenLinea .pb-leyenda { font-size: 14.5px; gap: 8px 22px; margin-top: 14px; }
  #planColMain #diaADiaLimitCard {
    background: var(--card-bg) !important; color: var(--text-primary) !important; border: 0 !important; box-shadow: none !important;
  }
  #planColMain #diaADiaLimitCard * { color: inherit !important; border-color: var(--card-border) !important; }
  #planColMain #diaADiaLimitCard #diaADiaLimitValue { font-size: 40px !important; }
  #planColMain #diaADiaLimitCard .limit-bar { background: var(--track) !important; }
  #planColMain #diaADiaLimitCard .limit-bar-fill { background: var(--c-dia) !important; }
  #planColMain #diaADiaLimitCard .btn { background: transparent !important; border: 1px solid var(--card-border) !important; }
  #planColSide #planProximoIngreso { margin: -8px 8px 0 !important; }

  /* Analizar: sin la banda del dato (va dentro del veredicto), sin "Resumen del mes", sin rótulos */
  .app.dk-mes-actual #factCard, .app.dk-mes-actual #accSummaryCard, #tab-estadisticas .pf-group-label, .dk-an-lab { display: none !important; }
  .dk-hero-fact { margin: 4px 0 0; font-size: 14px; line-height: 1.45; color: rgba(246,238,230,0.78); }
  .dk-veredicto.is-info { font-size: 34px; color: #F6EEE6; }
}
/* Sin meses anteriores: fuera "Evolución por mes" y "Meses anteriores" (también en el móvil) */
body.sin-historial #evoCard, body.sin-historial #accHistoryCard { display: none !important; }
/* Veredicto neutro (sin gastos) */
.onpace-verdict.info, .an-verdict.neutral { color: var(--text-primary); }
@media (min-width: 1100px) {
  #anMesLabel, #anGeneralLabel { display: none !important; }
  #tab-estadisticas .card, #tab-estadisticas .dk-card { border-color: transparent !important; box-shadow: none !important; }
}

/* ============================================================
   (28 sep, v65) Pinky con caras, etiqueta "Asistente IA", menú
   replegable, Ahorro a todo el ancho y foco suave.
   ============================================================ */
/* Foco: fino y suave, del color del tema (no el marco negro grueso) */
button:focus-visible, a:focus-visible, input:focus-visible, select:focus-visible, .color-swatch:focus-visible {
  outline: 2px solid color-mix(in srgb, var(--accent-fill, var(--accent)) 45%, transparent) !important; outline-offset: 2px;
}
button:focus:not(:focus-visible) { outline: none !important; }
.dk-nav-item:focus-visible, .dk-add:focus-visible, #anHuchaCard button:focus-visible { outline-offset: -2px; }

/* Caras de Pinky */
.pig-cara { display: inline-block; flex-shrink: 0; object-fit: contain; }
#opVerdict, #anVerdict { display: inline-flex; align-items: center; gap: 10px; }
#opVerdict .pig-cara { width: 34px; height: 34px; }
#anVerdict .pig-cara { width: 46px; height: 46px; }
.pig-vacio { display: flex; align-items: center; gap: 14px; padding: 18px 16px; color: var(--text-secondary); font-size: 14px; line-height: 1.45; }
.pig-vacio .pig-cara { width: 54px; height: 54px; animation: pigHola 2.6s ease-in-out infinite; }
.pig-vacio p { margin: 0; }
.pig-vacio-chico { padding: 4px 0; }
.pig-vacio-chico .pig-cara { width: 44px; height: 44px; }
@keyframes pigHola { 0%, 100% { transform: rotate(0); } 8% { transform: rotate(-8deg); } 16% { transform: rotate(6deg); } 24% { transform: rotate(0); } }
@media (min-width: 1100px) {
  .dk-card-head-cara { justify-content: flex-start !important; align-items: center !important; gap: 12px; }
  .dk-card-head-cara .pig-cara { width: 46px; height: 46px; }
  .dk-an-hero { position: relative; }
  .dk-hero-cara { position: absolute; top: 20px; right: 22px; width: 84px; height: 84px; filter: drop-shadow(0 8px 18px rgba(0,0,0,.25)); }
}

/* Etiqueta "Asistente IA" hasta que se usa Pinky por primera vez */
.pinky-ia {
  font-style: normal; font-size: 10.5px; font-weight: 700; letter-spacing: .02em; white-space: nowrap;
  padding: 3px 8px; border-radius: 999px; margin-left: 6px;
  background: color-mix(in srgb, #F2A6B4 30%, transparent); color: var(--text-primary);
}
body.pinky-conocido .pinky-ia { display: none; }
.davide-btn .pinky-ia { font-size: 9.5px; padding: 2px 6px; margin-left: 4px; }
@media (min-width: 1100px) { .dk-pinky-item .pinky-ia { margin-left: auto; } }

/* Menú replegable (escritorio) */
.dk-pliegue { display: none; }
@media (min-width: 1100px) {
  .dk-pliegue {
    display: flex; align-items: center; justify-content: center; position: absolute; top: 36px; right: -13px; z-index: 2;
    width: 26px; height: 26px; border-radius: 50%; cursor: pointer; padding: 0;
    background: var(--surface); border: 1px solid var(--card-border); color: var(--text-secondary);
    box-shadow: 0 4px 12px -6px rgba(0,0,0,.3); opacity: 0; transition: opacity .2s ease, transform .25s ease, color .2s ease;
  }
  .dk-nav:hover .dk-pliegue, .dk-pliegue:focus-visible, body.dk-menu-mini .dk-pliegue { opacity: 1; }
  .dk-pliegue:hover { color: var(--text-primary); transform: scale(1.1); }
  .dk-nav { transition: width .25s ease, padding .25s ease; }
  .app { transition: padding-left .25s ease; }
  body.dk-menu-mini .dk-nav { width: 80px !important; padding-left: 14px !important; padding-right: 14px !important; }
  body.dk-menu-mini .app { padding-left: 120px !important; }
  body.dk-menu-mini .savings-screen { left: 80px !important; }
  body.dk-menu-mini .dk-pliegue svg { transform: rotate(180deg); }
  body.dk-menu-mini .dk-logo span, body.dk-menu-mini .dk-nav-item > span, body.dk-menu-mini .dk-add span,
  body.dk-menu-mini .dk-atajo, body.dk-menu-mini .pinky-ia { display: none !important; }
  body.dk-menu-mini .dk-logo { justify-content: center; padding-left: 0; padding-right: 0; }
  body.dk-menu-mini .dk-nav-item, body.dk-menu-mini .dk-add { justify-content: center; padding-left: 0 !important; padding-right: 0 !important; }
  body.dk-menu-mini .dk-add { width: 52px; height: 52px; border-radius: 50%; align-self: center; }
  body.dk-menu-mini .dk-nav-item:hover { transform: none; }
  body.dk-menu-mini .dk-nav-item.is-activo::before { left: -14px; }
}

/* Analizar: "Ahorro por alcancía" a todo el ancho, abajo */
@media (min-width: 1100px) {
  .app.dk-mes-actual #tab-estadisticas #anHuchaCard, #anMasWrap > #anHuchaCard { grid-column: 1 / -1 !important; }
  #anHuchaCard .percent-toggle { border: 0 !important; outline: none; }
}

/* Por semana: las semanas sin gasto en gris */
.dk-sem.is-cero .dk-sem-col > span { background: var(--track) !important; }

/* ============================================================
   (28 sep, v67) Logo con "Pink" en el tono oscuro del tema y
   Mi caja como una sola tarjeta con sus partes.
   ============================================================ */
:root { --logo-pink: #111111; --logo-flow: #D9728F; }
:root[data-accent="verde"] { --logo-pink: #1F4E42; }
:root[data-accent="rosa"] { --logo-pink: #8A2346; }
:root[data-theme="dark"] { --logo-pink: #F5F5F5; --logo-flow: #F2A6B4; }
:root[data-theme="dark"][data-accent="verde"] { --logo-pink: #CDE7DF; }
:root[data-theme="dark"][data-accent="rosa"] { --logo-pink: #FBE3E9; }
.brandbar-id .brand-name, .dk-logo span { color: var(--logo-pink) !important; }
.brandbar-id .brand-name b, .dk-logo b { color: var(--logo-flow) !important; font-weight: inherit; }

@media (min-width: 1100px) {
  .app.dk-mes-actual #dkInicioSobres.dk-caja-una { display: block !important; }
  /* Mi caja en columnas: total + partes (sin barra) */
  .dk-caja-card { display: flex; align-items: stretch; padding: 10px; border-radius: 24px; background: var(--card-bg); gap: 4px; }
  .dk-caja-total, .dk-caja-parte {
    display: flex; flex-direction: column; justify-content: center; gap: 4px; text-align: left; font: inherit; color: var(--text-primary);
    background: transparent; border: 0; border-radius: 16px; cursor: pointer; transition: background .18s ease, transform .18s ease;
  }
  .dk-caja-total { flex: 1.25 1 0; padding: 12px 16px; }
  .dk-caja-parte { flex: 1 1 0; padding: 12px 18px; position: relative; }
  .dk-caja-parte::before { content: ""; position: absolute; left: 0; top: 14px; bottom: 14px; border-left: 1px solid var(--card-border); }
  .dk-caja-total:hover, .dk-caja-parte:hover { background: var(--card-bg-strong); }
  .dk-caja-parte:hover::before, .dk-caja-parte:hover + .dk-caja-parte::before { opacity: 0; }
  .dk-caja-total small, .dk-caja-parte small { font-size: 13px; font-weight: 600; color: var(--text-secondary); display: flex; align-items: center; gap: 7px; }
  .dk-caja-parte small i { width: 8px; height: 8px; border-radius: 50%; display: inline-block; }
  .dk-caja-total b { font-size: 30px; font-weight: 800; letter-spacing: -0.03em; white-space: nowrap; }
  .dk-caja-parte b { font-size: 18px; font-weight: 700; white-space: nowrap; }
  .dk-caja-parte em { font-style: normal; font-size: 12px; font-weight: 500; color: var(--text-secondary); }
  /* Tarjeta grande que cambia (Libre / Ahorro) */
  .dk-hero-cambio { animation: dkHeroCambio .35s cubic-bezier(.2,.8,.3,1) both; }
  @keyframes dkHeroCambio { from { opacity: 0; transform: translateY(14px) scale(.985); } to { opacity: 1; transform: none; } }
  .dk-hero-acc { display: flex; gap: 10px; margin-top: 4px; }
  .dk-hero-acc button { height: 40px; padding: 0 18px; border-radius: 999px; font: inherit; font-size: 14px; font-weight: 700; cursor: pointer;
    background: rgba(255,255,255,.10); border: 1px solid rgba(255,255,255,.22); color: #F6EEE6; transition: transform .15s ease, background .15s ease; }
  .dk-hero-acc button.is-main { background: #F6EEE6; color: #111; border-color: transparent; }
  .dk-hero-acc button:hover { transform: translateY(-1px); }
  .dk-hero-huchas { display: flex; flex-direction: column; gap: 10px; max-width: 620px; }
  .dk-hero-hucha span { display: flex; justify-content: space-between; gap: 12px; font-size: 14px; color: #F6EEE6; }
  .dk-hero-hucha small { color: rgba(246,238,230,.75); font-size: 13px; }
  .dk-hero-hucha i { display: block; height: 7px; margin-top: 6px; border-radius: 999px; background: rgba(255,255,255,.16); overflow: hidden; }
  .dk-hero-hucha i span { display: block; height: 100%; border-radius: 999px; background: #8CC5B5; }

  /* Dinero: el total y dónde vive el dinero */
  .dk-dinero-total { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 24px 28px; border-radius: 24px; background: var(--card-bg); }
  .dk-dinero-total span { display: flex; flex-direction: column; gap: 4px; }
  .dk-dinero-total small { font-size: 13.5px; font-weight: 600; color: var(--text-secondary); }
  .dk-dinero-total b { font-size: 40px; font-weight: 800; letter-spacing: -0.035em; }

  /* Plan: el día a día como regla, con mes/semanas */
  #planColMain #diaADiaLimitCard, #planColMain #planResumenLinea { display: none !important; }
  body:not(.plan-semanas-on) #planColMain #semanasBloque, body:not(.plan-semanas-on) #planColMain #semanasPie { display: none !important; }
  .dk-plan-dia { display: flex !important; flex-direction: column; gap: 18px; padding: 26px 28px; border-radius: 26px; background: var(--card-bg); }
  .dk-plan-dia-top { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; }
  .dk-plan-dia-top span { display: flex; flex-direction: column; gap: 4px; }
  .dk-plan-dia-top small { font-size: 14px; font-weight: 600; color: var(--text-secondary); }
  .dk-plan-dia-top b { font-size: 40px; font-weight: 800; letter-spacing: -0.035em; }
  .dk-plan-dia-top em { font-style: normal; font-size: 13.5px; color: var(--text-secondary); }
  .dk-pill-claro { color: var(--text-primary) !important; background: transparent !important; border: 1px solid var(--card-border) !important; }
  .dk-seg { display: inline-flex; align-self: flex-start; padding: 4px; gap: 4px; border-radius: 999px; background: var(--input-bg); }
  .dk-seg button { height: 36px; padding: 0 18px; border: 0; border-radius: 999px; font: inherit; font-size: 14px; font-weight: 600; color: var(--text-secondary); background: transparent; cursor: pointer; transition: background .18s ease, color .18s ease; }
  .dk-seg button.is-on { background: var(--surface); color: var(--text-primary); box-shadow: 0 2px 10px -5px rgba(0,0,0,.3); }
  .dk-plan-inv { display: flex; flex-direction: column; gap: 14px; padding-top: 18px; border-top: 1px solid var(--card-border); }
  .dk-plan-inv p { margin: 0; font-size: 15.5px; font-weight: 650; }
  .dk-plan-inv p small { display: block; margin-top: 4px; font-size: 13.5px; font-weight: 500; color: var(--text-secondary); line-height: 1.45; }
  .dk-prev-sems { display: flex; gap: 8px; }
  .dk-prev-sem { flex: 1 1 0; min-width: 0; display: flex; flex-direction: column; gap: 2px; padding: 10px 12px; border-radius: 14px; background: var(--input-bg); }
  .dk-prev-sem small { font-size: 12px; color: var(--text-secondary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .dk-prev-sem b { font-size: 15px; }
  .dk-prev-sem.is-hoy { background: var(--surface); box-shadow: inset 0 0 0 1.5px var(--text-primary); }
  .dk-plan-inv .dk-btn-lleno { align-self: flex-start; }
}

/* ===== (28 sep, v68) Aviso "Modo prueba" con más aire ===== */
#guestBar { height: calc(46px + env(safe-area-inset-top)); gap: 14px; padding-left: 16px; padding-right: 16px; }
#guestBar .gb-text { font-size: 13px; }
#guestBar .gb-cta { padding: 7px 16px; font-size: 13px; line-height: 1.2; }
body.is-guest .brandbar { top: calc(46px + env(safe-area-inset-top)); }
body.is-guest .app,
body.is-guest.compact-head .app { padding-top: calc(122px + env(safe-area-inset-top)); }
@media (min-width: 1100px) {
  body.is-guest .dk-nav { top: 46px; }
  body.is-guest .app { padding-top: 74px !important; }
  body.is-guest .savings-screen { top: 46px !important; }
  body.is-guest #planColSide { top: 66px; }
}

/* ===== (28 sep, v68) Formularios sólidos: el fondo se difumina, el formulario no ===== */
.modal-overlay {
  background: color-mix(in srgb, var(--surface) 35%, rgba(0,0,0,.38));
  backdrop-filter: blur(14px) saturate(120%); -webkit-backdrop-filter: blur(14px) saturate(120%);
}
.modal, .modal.card {
  background: var(--surface) !important;
  backdrop-filter: none !important; -webkit-backdrop-filter: none !important;
  border: 1px solid var(--card-border);
  box-shadow: 0 30px 80px -20px rgba(0,0,0,.45);
}
.modal .field input, .modal .field select, .modal .field textarea { background: var(--card-bg); }
.savings-screen .modal, .savings-screen .modal.card { background: var(--card-bg) !important; box-shadow: none; }

/* ===== (28 sep, v68) Inicio: la tarjeta del día a día filtra los movimientos ===== */
#dkInicioSobres.is-vacio { display: none !important; }
.dk-hero.dk-hero-toca { cursor: pointer; transition: transform .18s ease, box-shadow .18s ease; }
.dk-hero.dk-hero-toca:hover { transform: translateY(-2px); }
.dk-hero.is-filtrando { box-shadow: 0 0 0 3px var(--surface), 0 0 0 5px var(--accent-fill, var(--accent)), var(--shadow); }
.mov-solo-chip {
  display: inline-flex; align-items: center; gap: 6px; margin-left: 10px;
  padding: 5px 11px; border-radius: 999px; font-size: 12.5px; font-weight: 700;
  background: var(--card-bg-strong); color: var(--text-primary); border: 1px solid var(--card-border);
  text-transform: none; letter-spacing: 0; vertical-align: middle; white-space: nowrap;
}
.mov-solo-chip span { opacity: .6; font-size: 11px; }
.mov-solo-chip:hover span { opacity: 1; }
.mov-solo-chip { margin-right: auto; }

/* ===== (28 sep, v68) Dinero: cómo está repartido ===== */
.dk-reparto { gap: 0 !important; }
.dk-rep-fila { display: grid; grid-template-columns: 12px minmax(0,1fr) auto auto; align-items: center; column-gap: 14px; row-gap: 10px; padding: 16px 0; border-top: 1px solid var(--card-border); }
.dk-reparto .dk-card-head + .dk-rep-fila { border-top: 0; padding-top: 8px; }
.dk-rep-fila > i { width: 10px; height: 10px; border-radius: 50%; }
.dk-rep-t { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.dk-rep-t b { font-size: 15.5px; font-weight: 700; }
.dk-rep-t small { font-size: 12.5px; color: var(--text-secondary); }
.dk-rep-m { font-size: 18px; font-weight: 800; letter-spacing: -0.01em; white-space: nowrap; }
.dk-rep-acc { font-size: 13px; font-weight: 700; padding: 8px 14px; border-radius: 999px; border: 1px solid var(--card-border); background: var(--surface); color: var(--text-primary); white-space: nowrap; transition: background .15s; }
.dk-rep-acc:hover { background: var(--card-bg-strong); }
.dk-rep-barra { grid-column: 2 / 4; height: 6px; border-radius: 99px; background: var(--track); overflow: hidden; }
.dk-rep-barra span { display: block; height: 100%; background: var(--c-dia); border-radius: 99px; }
.dk-rep-huchas { grid-column: 2 / -1; display: flex; flex-direction: column; gap: 10px; }
.dk-rep-hucha > div { display: flex; justify-content: space-between; font-size: 13.5px; margin-bottom: 6px; }
.dk-rep-hucha > div span { color: var(--text-secondary); }
.dk-rep-hucha > i { display: block; height: 6px; border-radius: 99px; background: var(--track); overflow: hidden; }
.dk-rep-hucha > i span { display: block; height: 100%; background: var(--c-ahorro); border-radius: 99px; }

/* ===== (28 sep, v68) Plan: el mes por delante (móvil y ordenador) ===== */
.dk-plan-dia { display: flex; flex-direction: column; gap: 18px; padding: 22px 20px; border-radius: 24px; background: var(--card-bg); border: 1px solid var(--card-border); }
.dk-plan-dia-top { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; }
.dk-plan-dia-top > span { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.dk-plan-dia-top small { font-size: 13.5px; font-weight: 600; color: var(--text-secondary); }
.dk-plan-dia-top b { font-size: 34px; font-weight: 800; letter-spacing: -0.035em; line-height: 1.05; }
.dk-plan-dia-top em { font-style: normal; font-size: 13px; color: var(--text-secondary); }
.dk-plan-dia .dk-hero-pill.dk-pill-claro { height: 34px; padding: 0 16px; border-radius: 999px; font: inherit; font-size: 13px; font-weight: 700; cursor: pointer; flex: none;
  color: var(--text-primary) !important; background: var(--surface) !important; border: 1px solid var(--card-border) !important; }
.dk-plan-dia .dk-seg { display: inline-flex; align-self: flex-start; padding: 4px; gap: 4px; border-radius: 999px; background: var(--input-bg); }
.dk-plan-dia .dk-seg button { height: 36px; padding: 0 16px; border: 0; border-radius: 999px; font: inherit; font-size: 14px; font-weight: 600; color: var(--text-secondary); background: transparent; cursor: pointer; transition: background .18s ease, color .18s ease; }
.dk-plan-dia .dk-seg button.is-on { background: var(--surface); color: var(--text-primary); box-shadow: 0 2px 10px -5px rgba(0,0,0,.3); }
.pl-sep { height: 1px; background: var(--card-border); }
.pl-h3 { margin: 0; font-size: 15px; font-weight: 700; color: var(--text-primary); }
.pl-h3 small { margin-left: 6px; font-size: 13px; font-weight: 500; color: var(--text-secondary); }

/* Línea del tiempo */
.pl-tl { position: relative; height: 112px; margin: 0 8px; }
.pl-tl.is-sin { height: 44px; }
.pl-linea, .pl-lleno { position: absolute; left: 0; top: 50%; height: 8px; margin-top: -4px; border-radius: 99px; }
.pl-linea { right: 0; background: var(--track); }
.pl-lleno { background: var(--text-primary); }
.pl-hoy { position: absolute; top: 50%; width: 2px; height: 30px; margin: -15px 0 0 -1px; background: var(--text-primary); z-index: 2; }
.pl-hoy span { position: absolute; bottom: calc(100% + 4px); left: 50%; transform: translateX(-50%); white-space: nowrap; font-size: 11.5px; font-weight: 800; padding: 3px 9px; border-radius: 99px; background: var(--text-primary); color: var(--surface); }
.pl-ev { position: absolute; top: 50%; width: 0; height: 0; z-index: 1; }
.pl-ev > i { position: absolute; left: -7px; top: -7px; width: 14px; height: 14px; border-radius: 50%; border: 3px solid var(--card-bg); box-sizing: border-box; }
.pl-ev > span { position: absolute; left: 0; transform: translateX(-50%); white-space: nowrap; text-align: center; font-size: 12px; line-height: 1.3; color: var(--text-secondary); }
.pl-ev > span b { display: block; font-size: 12.5px; color: var(--text-primary); }
.pl-ev.is-arriba > span { bottom: 12px; }
.pl-ev.is-abajo > span { top: 12px; }
.pl-ev.is-izq > span { transform: translateX(-12px); text-align: left; }
.pl-ev.is-der > span { transform: translateX(calc(-100% + 12px)); text-align: right; }
.pl-ev.is-pasado > span { opacity: .6; }
.pl-ext { display: flex; justify-content: space-between; margin: -8px 8px 0; font-size: 11.5px; color: var(--text-secondary); }
.pl-lista { display: none; list-style: none; margin: 0; padding: 0; }
.pl-lista li { display: grid; grid-template-columns: 10px 52px minmax(0,1fr) auto; align-items: center; gap: 10px; padding: 9px 0; border-top: 1px solid var(--card-border); font-size: 14px; }
.pl-lista li:first-child { border-top: 0; }
.pl-lista li i { width: 10px; height: 10px; border-radius: 50%; }
.pl-lista li span { font-size: 12.5px; color: var(--text-secondary); }
.pl-lista li b { font-weight: 650; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pl-lista li em { font-style: normal; font-weight: 700; }
.pl-lista li em.is-mas { color: var(--c-verde); }
.pl-lista li.is-pasado { opacity: .55; }
.pl-sin { margin: 0; font-size: 13px; color: var(--text-secondary); line-height: 1.45; }
/* Muchos eventos o pantalla chica: la línea queda con puntos y debajo la lista. */
.pl-tl.is-muchos { height: 60px; }
.pl-tl.is-muchos .pl-ev > span { display: none; }
.pl-tl.is-muchos ~ .pl-lista { display: block; }
@media (max-width: 699px) {
  .pl-tl { height: 60px; }
  .pl-tl .pl-ev > span { display: none; }
  .pl-lista { display: block; }
}

/* Tres cifras */
.pl-cifras { display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: 10px; }
.pl-cifras > div { background: var(--surface); border-radius: 16px; padding: 13px 14px; min-width: 0; }
.pl-cifras small { display: block; font-size: 12.5px; font-weight: 600; color: var(--text-secondary); }
.pl-cifras b { display: block; margin-top: 3px; font-size: 20px; font-weight: 800; letter-spacing: -0.02em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pl-cifras b.is-mal { color: var(--red, #C0573F); }
.pl-cifras em { font-style: normal; font-size: 12px; color: var(--text-secondary); }
@media (max-width: 520px) {
  .pl-cifras { grid-template-columns: 1fr 1fr; }
  .pl-cifras > div:last-child { grid-column: 1 / -1; }
}
.pl-inv { display: flex; justify-content: space-between; align-items: center; gap: 14px; font-size: 14px; color: var(--text-secondary); line-height: 1.4; }
.pl-inv button { flex: none; font: inherit; font-size: 14px; font-weight: 700; color: var(--text-primary); background: none; border: 0; padding: 4px 0; text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }
@media (max-width: 520px) { .pl-inv { flex-direction: column; align-items: flex-start; } }

/* Pastillas de semanas */
.pl-sems { display: grid; grid-template-columns: repeat(auto-fit, minmax(0, 1fr)); grid-auto-flow: column; gap: 8px; }
.pl-sem { display: flex; flex-direction: column; align-items: flex-start; gap: 1px; min-width: 0; padding: 11px 12px; border-radius: 16px; border: 1.5px solid transparent; background: var(--surface); color: var(--text-secondary); font: inherit; font-size: 12px; text-align: left; cursor: pointer; transition: border-color .15s ease, box-shadow .15s ease; }
.pl-sem b { font-size: 14px; color: var(--text-primary); white-space: nowrap; }
.pl-sem small { font-size: 12px; white-space: nowrap; }
.pl-sem em { margin-top: 4px; font-style: normal; font-size: 12px; font-weight: 700; color: var(--text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
.pl-sem.is-bien em { color: var(--c-verde); }
.pl-sem.is-mal em { color: var(--red, #C0573F); }
.pl-sem.is-futura { opacity: .6; }
.pl-sem.is-futura em { font-weight: 600; color: var(--text-secondary); }
.pl-sem:hover { border-color: var(--card-border); }
.pl-sem.is-sel { opacity: 1; border-color: var(--text-primary); box-shadow: 0 6px 18px -10px rgba(0,0,0,.35); }
.pl-sem-hoy { font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .04em; padding: 1px 6px; border-radius: 99px; background: var(--text-primary); color: var(--surface); vertical-align: 2px; }
@media (max-width: 699px) {
  .pl-sems { display: flex; overflow-x: auto; scroll-snap-type: x mandatory; margin: 0 -20px; padding: 2px 20px 6px; scrollbar-width: none; }
  .pl-sems::-webkit-scrollbar { display: none; }
  .pl-sem { flex: 0 0 auto; min-width: 128px; scroll-snap-align: start; }
}
/* Con las pastillas arriba, la lista de "otras semanas" de abajo sobra. */
#weeklySplitBlock #otherWeeksToggle, #weeklySplitBlock #weeksGrid { display: none !important; }

/* Móvil: la tarjeta va primero y reemplaza al límite del día a día y la invitación. */
@media (max-width: 1099px) {
  body.plan-dia-on #tab-semanas.active { display: flex; flex-direction: column; }
  body.plan-dia-on #tab-semanas > .savings-screen-head { order: -10; }
  body.plan-dia-on #tab-semanas > #dkPlanDia { order: -5; margin-bottom: 16px; }
  body.plan-dia-on #tab-semanas > #weeklySplitBlock { order: -4; margin-bottom: 8px; }
  body.plan-dia-on #tab-semanas #planLabelDia,
  body.plan-dia-on #tab-semanas #diaADiaLimitCard,
  body.plan-dia-on #tab-semanas #semanasLabel,
  body.plan-dia-on #tab-semanas #semanasBloque,
  body.plan-dia-on #tab-semanas #weeklySwitchCard { display: none !important; }
}
@media (min-width: 1100px) {
  .dk-plan-dia { padding: 26px 28px; border-radius: 26px; border: 0; }
  .dk-plan-dia-top b { font-size: 40px; }
  body.plan-dia-on #planColMain #semanasBloque { display: none !important; }
}
/* (v68) Semana cerrada: sin velo gris, solo el borde punteado y el sello. */
.week-card.is-closed { background-image: none; }
.btn.reopen-week { color: var(--text-primary); }
.pl-sems { position: relative; }
@media (max-width: 699px) { .pl-sems { scroll-padding-left: 20px; scroll-padding-right: 20px; } }

/* ===== (28 sep, v68) Dinero: "¿Te deben dinero o debes algo?" en un solo bloque ===== */
.pf-pend-card { display: flex; flex-direction: column; gap: 14px; padding: 18px; border-radius: 22px; background: var(--card-bg); border: 1px solid var(--card-border); }
.pf-pend-q { display: flex; flex-direction: column; gap: 3px; }
.pf-pend-q b { font-size: 16px; font-weight: 750; letter-spacing: -0.01em; }
.pf-pend-q small { font-size: 13px; color: var(--text-secondary); }
.pf-pend-card .pf-pend-tiles { margin-top: 0; }
.pf-pend-card .pf-pend-tile,
.app.dk-mes-actual #dineroPendientesInline .pf-pend-card .pf-pend-tile {
  min-height: 0; flex-direction: row; align-items: center; justify-content: center; gap: 8px;
  padding: 12px 14px; border-radius: 999px; background: var(--surface); border: 1px solid var(--card-border);
  white-space: nowrap; transition: transform .15s ease, border-color .15s ease;
}
.pf-pend-card .pf-pend-tile:hover { transform: translateY(-1px); border-color: var(--text-primary); }
.pf-pend-card .pf-pend-tile strong { font-size: 14.5px; color: var(--text-primary); }
.pf-pend-card .pf-tile-ico { font-size: 18px; line-height: 1; }
.pf-pend-card .pf-pend-group { margin: 0 !important; background: var(--surface); border: 0; }
.pf-pend-card .pf-pend-row .fin-concept { white-space: normal; overflow: visible; text-overflow: clip; line-height: 1.3; min-width: 0; }
.pf-pend-card .pf-pend-links { display: flex; justify-content: flex-end; margin: -4px 0 -6px; }

/* ===== (28 sep, v68) Categorías: una sola tarjeta, con entrada suave y galería de emojis ===== */
.cm-lista { display: flex; flex-direction: column; background: var(--card-bg); border: 1px solid var(--card-border); border-radius: 20px; overflow: hidden; }
.cm-lista .category-manage-item {
  margin: 0; padding: 12px 14px; border: 0; border-radius: 0; background: transparent;
  border-top: 1px solid var(--card-border); gap: 12px;
  animation: cmEntra .35s cubic-bezier(.2,.8,.3,1) both; animation-delay: calc(var(--i, 0) * 28ms);
  transition: background .15s ease;
}
.cm-lista .category-manage-item:first-child { border-top: 0; }
.cm-lista .category-manage-item:hover { background: var(--card-bg-strong); }
.cm-lista .category-manage-item .cm-emoji { width: 36px; height: 36px; display: grid; place-items: center; border-radius: 12px; background: var(--surface) !important; font-size: 20px !important; }
.cm-lista .category-manage-item .cm-label { font-weight: 650; }
.cm-lista .cm-actions button { background: transparent !important; opacity: .55; transition: opacity .15s ease, background .15s ease; }
.cm-lista .category-manage-item:hover .cm-actions button { opacity: 1; }
.cm-lista .cm-actions button:hover { background: var(--surface) !important; }
.cm-lista .cm-edit-wrap { padding: 12px 14px; border-top: 1px solid var(--card-border); background: var(--card-bg-strong); animation: cmEntra .25s ease both; }
.cm-lista .cm-edit-wrap:first-child { border-top: 0; }
.cm-lista .category-manage-edit-row { padding: 0; flex-wrap: wrap; }
@keyframes cmEntra { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .cm-lista .category-manage-item, .emo-op { animation: none !important; } }

.cm-nueva-btn {
  display: flex; align-items: center; gap: 12px; width: 100%; margin-top: 12px; padding: 12px 14px;
  border-radius: 20px; border: 1.5px dashed var(--card-border); background: transparent;
  font: inherit; font-size: 15px; font-weight: 700; color: var(--text-primary); cursor: pointer;
  transition: border-color .15s ease, background .15s ease;
}
.cm-nueva-btn:hover { border-color: var(--text-primary); background: var(--card-bg); }
.cm-nueva-ico { width: 36px; height: 36px; border-radius: 12px; display: grid; place-items: center; background: var(--card-bg); font-size: 20px; font-weight: 600; }
.cm-nueva-btn[hidden] { display: none; }
.cm-nueva { margin-top: 12px; padding: 14px; border-radius: 20px; background: var(--card-bg); border: 1px solid var(--card-border); animation: cmEntra .25s ease both; }
.cm-nueva[hidden] { display: none; }
.cm-nueva .add-category-row { margin-top: 0; align-items: center; flex-wrap: nowrap; }
.cm-nueva .add-category-row input:not(.emo-input) { flex: 1 1 auto; min-width: 0; }

/* Botón del emoji y galería */
.emo-input { display: none !important; }
.emo-btn {
  flex: 0 0 48px; width: 48px; height: 48px; border-radius: 14px; display: grid; place-items: center;
  font-size: 24px; background: var(--surface); border: 1.5px solid var(--card-border); cursor: pointer;
  transition: border-color .15s ease, transform .15s ease;
}
.emo-btn:hover { transform: scale(1.04); }
.emo-btn.is-open { border-color: var(--text-primary); }
.emo-btn.is-vacio { filter: grayscale(1); opacity: .6; }
.emo-galeria {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(44px, 1fr)); gap: 4px;
  max-height: 0; overflow: hidden; opacity: 0; margin-top: 0; padding: 0 2px;
  transition: max-height .3s ease, opacity .2s ease, margin-top .3s ease, padding .3s ease;
}
.emo-galeria.is-open { max-height: 340px; opacity: 1; margin-top: 12px; padding: 6px 2px; }
.emo-op {
  height: 44px; border-radius: 12px; border: 1.5px solid transparent; background: transparent;
  font-size: 22px; cursor: pointer; transition: background .12s ease, transform .12s ease;
}
.emo-galeria.is-open .emo-op { animation: emoEntra .28s cubic-bezier(.2,.8,.3,1) both; animation-delay: calc(var(--i, 0) * 7ms); }
.emo-op:hover { background: var(--surface); transform: scale(1.12); }
.emo-op.is-sel { background: var(--surface); border-color: var(--text-primary); }
@keyframes emoEntra { from { opacity: 0; transform: scale(.6); } to { opacity: 1; transform: none; } }
/* En el formulario de gasto, la fila del emoji + nombre */
#addCategoryPanel { align-items: center; }
#addCategoryPanel + .emo-galeria.is-open { margin-bottom: 4px; }
#addCategoryPanel[style*="display: none"] + .emo-galeria { display: none; }
.pf-pend-card .pf-pend-row { flex-wrap: wrap; row-gap: 6px; }
.pf-pend-card .pf-pend-row .fin-concept { flex: 1 1 150px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
#addCategoryPanel.add-category-row { flex-wrap: nowrap; }
#addCategoryPanel input#newCategoryLabel { flex: 1 1 auto; min-width: 0; }
#addCategoryPanel .btn { flex: 0 0 auto; width: auto; padding-left: 16px; padding-right: 16px; }

/* ===== (28 sep, v68) Fijo: "Día __ de cada mes" y marca de suscripción ===== */
.fijo-dia-row { display: flex; align-items: center; gap: 10px; font-size: 15px; color: var(--text-primary); }
.fijo-dia-row input#plusFijoDia { width: 64px; flex: 0 0 64px; text-align: center; font-size: 18px; font-weight: 700; height: 48px; padding: 0; }
.fijo-dia-pre, .fijo-dia-post { font-weight: 600; }
.fijo-dia-post { color: var(--text-secondary); }
/* (v68) Pendientes: el nombre entero arriba con su importe; los botones debajo. */
.pf-pend-card .pf-pend-row { display: grid !important; grid-template-columns: minmax(0,1fr) auto; align-items: center; column-gap: 12px; row-gap: 8px; }
.pf-pend-card .pf-pend-row .fin-concept { display: block; grid-column: 1; -webkit-line-clamp: unset; white-space: normal; }
.pf-pend-card .pf-pend-row .fin-amount { grid-column: 2; }
.pf-pend-card .pf-pend-row .fin-actions { grid-column: 1 / -1; justify-self: end; display: flex; gap: 6px; }
@media (max-width: 1099px) { #dineroPendientesInline { margin-top: 20px !important; } }
