/* FicVault · capa de APP (se carga DESPUÉS de fv-movimiento.css).
   Esqueleto de la web (barra lateral, cabecera móvil, pestañas), Inicio, Biblioteca, Colecciones
   y las ventanas de importar / planes / personalizar. */

/* ===== Esqueleto de la app · barra lateral, cabecera móvil, pestañas ===== */
body.fv-app-body{margin:0;background:var(--bg);color:var(--text);scrollbar-width:none;-ms-overflow-style:none}
body.fv-app-body::-webkit-scrollbar{display:none;width:0;height:0}
.fv-app{display:flex;align-items:flex-start;min-height:100vh;background:var(--bg);color:var(--text);scrollbar-width:none}
.fv-skip{position:absolute;left:12px;top:-60px;z-index:2000;padding:12px 18px;border-radius:99px;background:var(--pri);color:var(--on-pri);font:600 14px/1 Inter,system-ui,sans-serif;text-decoration:none;transition:top var(--t-fast) var(--ease-out)}
.fv-skip:focus{top:12px}
.fv-side{position:sticky;top:0;z-index:var(--z-side);flex:0 0 264px;align-self:stretch;display:flex;flex-direction:column;gap:28px;width:264px;height:100vh;height:100dvh;max-height:100%;padding:28px 20px 24px;border-right:1px solid var(--line);background:var(--bg);overflow-y:auto;overflow-x:hidden;scrollbar-width:none;-ms-overflow-style:none}
.fv-side::-webkit-scrollbar{display:none;width:0;height:0}
.fv-side::-webkit-scrollbar-thumb,.fv-side::-webkit-scrollbar-track{display:none}
.fv-brand{display:flex;align-items:center;gap:12px;padding:0 8px;color:var(--text);text-decoration:none;border-radius:12px}
.fv-brand svg{width:36px;height:36px;flex:none;color:var(--ink);fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.fv-brand b{padding-left:.2em;font:600 20px/1 'Cormorant Garamond',Georgia,serif;letter-spacing:.34em}
.fv-nav{display:flex;flex-direction:column;gap:4px}
.fv-nav a{display:flex;align-items:center;gap:12px;min-height:46px;padding:0 14px;border:1px solid transparent;border-radius:99px;color:var(--muted);font:600 12.5px/1 Inter,system-ui,sans-serif;letter-spacing:.14em;text-transform:uppercase;text-decoration:none;transition:background-color var(--t-fast) var(--ease-out),color var(--t-fast) var(--ease-out),border-color var(--t-fast) var(--ease-out),transform var(--t-press) var(--ease-out)}
@media (hover:hover) and (pointer:fine){
  .fv-nav a:hover{background:var(--sunken);color:var(--text)}
}
.fv-nav a:active{transform:scale(.98)}
.fv-nav a[aria-current="page"]{border-color:var(--line);color:var(--text);view-transition-name:fv-nav-on}
.fv-nav a.adm{color:var(--gold-ink)}
.fv-nav .n{margin-left:auto;min-width:24px;padding:3px 8px;border-radius:99px;background:var(--sunken);color:var(--text);font:600 12px/1.2 Inter,system-ui,sans-serif;letter-spacing:0;text-align:center;font-variant-numeric:tabular-nums}
.fv-side-h{margin:0 0 6px;padding:0 14px;font:700 10.5px/1.25 Inter,system-ui,sans-serif;letter-spacing:.2em;text-transform:uppercase;color:var(--muted)}
.fv-cols{display:flex;flex-direction:column;gap:2px;margin:0;padding:0;list-style:none}
.fv-cols a{display:flex;align-items:center;gap:12px;min-height:40px;padding:0 14px;border-radius:10px;color:var(--text);font-size:14px;text-decoration:none;transition:background-color var(--t-fast) var(--ease-out)}
@media (hover:hover) and (pointer:fine){
  .fv-cols a:hover{background:var(--sunken)}
}
.fv-cols a[aria-current="page"]{background:var(--sunken);font-weight:600}
.fv-cols i{width:10px;height:10px;flex:none;border-radius:50%;background:var(--c,var(--gold))}
.fv-cols .n{margin-left:auto;color:var(--muted);font-size:13px;font-variant-numeric:tabular-nums}
.fv-newc{display:flex;align-items:center;gap:10px;width:100%;min-height:40px;margin-top:6px;padding:0 14px;border:1px dashed var(--line-strong);border-radius:10px;background:none;color:var(--gold-ink);font:500 14px/1 Inter,system-ui,sans-serif;cursor:pointer;text-decoration:none;transition:background-color var(--t-fast) var(--ease-out),transform var(--t-press) var(--ease-out)}
@media (hover:hover) and (pointer:fine){
  .fv-newc:hover{background:var(--sunken)}
}
.fv-seeall{display:flex;align-items:center;min-height:36px;margin-top:2px;padding:0 14px;border-radius:10px;color:var(--gold-ink);font-size:13px;font-weight:500;text-decoration:none;transition:background-color var(--t-fast) var(--ease-out)}
@media (hover:hover) and (pointer:fine){
  .fv-seeall:hover{background:var(--sunken)}
}
.fv-ib[aria-expanded="true"]{background:var(--hov)}
.fv-newc:active{transform:scale(.98)}
[data-fv-instalar][hidden]{display:none!important}
.fv-instalar{margin:0 0 12px;border-style:solid}
.fv-grow{flex:1}
.fv-bagcard{display:flex;flex-direction:column;gap:10px;padding:16px;border:1px solid var(--line);border-radius:16px}
.fv-bagcard .t{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:13px;line-height:1.3;color:var(--muted)}
.fv-tag{display:inline-flex;align-items:center;min-height:22px;padding:0 9px;border:1px solid var(--line-strong);border-radius:99px;color:var(--gold-ink);font:700 11px/1.1 Inter,system-ui,sans-serif;letter-spacing:.04em;white-space:nowrap}
.fv-tag.gold{background:var(--gold);border-color:var(--gold);color:#1F1D1B}
.fv-tag.bad{border-color:var(--error);color:var(--error)}
/* Libro de muestra (app/muestra.py): en la tarjeta va junto al autor; en el estante, arriba a la izquierda de la portada */
.fv-sub .fv-tag.muestra{flex:none;min-height:18px;padding:0 7px;font-size:10px}
.fv-sbook .fv-tag.muestra{position:absolute;z-index:3;top:8px;left:8px;min-height:20px;padding:0 8px;font-size:10px;background:var(--card)}
.fv-bagcard .v{font:600 22px/1.1 'Cormorant Garamond',Georgia,serif;color:var(--text);font-variant-numeric:tabular-nums}
.fv-bagcard .v small{font:500 13px/1 Inter,system-ui,sans-serif;color:var(--muted)}
.fv-bagcard p{margin:0;font-size:12px;line-height:1.45;color:var(--muted)}
.fv-bagcard .fv-btn{width:100%}
.fv-bagcard.is-debt .v{color:var(--error)}
.fv-bagcard.is-debt .fv-bar{border-color:var(--error)}
.fv-bagcard.is-debt .fv-bar i{background:var(--error)}
.fv-me{display:flex;align-items:center;gap:10px;padding:0 4px}
.fv-av{display:grid;place-items:center;width:40px;height:40px;flex:none;border-radius:50%;background:var(--hl);color:#1F1D1B;font:600 19px/1 'Cormorant Garamond',Georgia,serif;text-decoration:none}
.fv-me b{min-width:0;overflow:hidden;font-weight:600;text-overflow:ellipsis;white-space:nowrap}
.fv-me .fv-ib{color:var(--muted)}
@media (hover:hover) and (pointer:fine){
  .fv-me .fv-ib:hover{color:var(--text)}
}
.fv-me form{display:contents}
.fv-me .sp{margin-left:auto;display:flex;gap:0}
.fv-theme .sun{display:none}
[data-theme="dark"] .fv-theme .sun{display:block}
[data-theme="dark"] .fv-theme .moon{display:none}

/* ===== Contenido principal · títulos, volver, pie, avisos ===== */
.fv-main{flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:36px;padding:36px 44px 48px}
.fv-main.narrow{max-width:1040px}
.fv-main[data-fondo="rayado"]{background-image:repeating-linear-gradient(0deg,transparent 0 31px,rgba(122,92,36,.08) 31px 32px)}
.fv-over{margin:0;font:700 11px/1.2 Inter,system-ui,sans-serif;letter-spacing:.24em;text-transform:uppercase;color:var(--gold-ink)}
.fv-h1{margin:6px 0 0;font:500 48px/1.08 'Cormorant Garamond',Georgia,serif;letter-spacing:-.005em;text-wrap:balance}
.fv-h2{margin:0;font:500 32px/1.12 'Cormorant Garamond',Georgia,serif;text-wrap:balance}
.fv-h3{margin:0;font:600 22px/1.15 'Cormorant Garamond',Georgia,serif}
.fv-sub{margin:8px 0 0;font:italic 400 17px/1.5 Lora,Georgia,serif;color:var(--muted);text-wrap:pretty}
.fv-sec-h{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px 16px;margin-bottom:16px}
.fv-sec-h .l{display:flex;align-items:center;gap:14px;min-width:0}
.fv-sec-h .l .dib{width:56px;flex:none}
.fv-sec-h .cnt{font-size:14px;color:var(--muted);font-variant-numeric:tabular-nums}
.fv-more-link{display:inline-flex;align-items:center;gap:6px;min-height:44px;color:var(--gold-ink);font:600 15px/1 Inter,system-ui,sans-serif;text-decoration:none}
@media (hover:hover) and (pointer:fine){
  .fv-more-link:hover{text-decoration:underline;text-underline-offset:4px}
}
.fv-more-link .fv-ic{width:18px;height:18px;transition:transform var(--t-fast) var(--ease-out)}
@media (hover:hover) and (pointer:fine){
  .fv-more-link:hover .fv-ic{transform:translateX(3px)}
}
.fv-back{display:inline-flex;align-items:center;gap:8px;align-self:flex-start;min-height:44px;margin:-8px 0 -20px -12px;padding:0 12px;border-radius:99px;color:var(--muted);font:600 12px/1 Inter,system-ui,sans-serif;letter-spacing:.14em;text-transform:uppercase;text-decoration:none;transition:background-color var(--t-fast) var(--ease-out),color var(--t-fast) var(--ease-out)}
@media (hover:hover) and (pointer:fine){
  .fv-back:hover{background:var(--sunken);color:var(--text)}
}
.fv-back .fv-ic{width:18px;height:18px}
.fv-foot{margin-top:auto;padding-top:8px}
.fv-foot .div{display:block;width:min(420px,70%);margin:0 auto 18px;color:var(--ink)}
.fv-foot p{margin:0 0 4px;font-size:13px;line-height:1.55;color:var(--muted);text-wrap:pretty}
.fv-foot a{color:var(--gold-ink);font-weight:600}
.fv-foot .legal{display:flex;flex-wrap:wrap;gap:6px 18px;margin-top:10px}
.fv-flash{display:flex;flex-direction:column;gap:10px}
.fv-flash .fv-al{animation:fv-in var(--t-enter) var(--ease-out) both}
.fv-top,.fv-tabs,.fv-fabwrap{display:none}
.fv-sin-pestanas .fv-tabs{display:none!important}
@media (max-width:859px){
  .fv-app{display:block}
  .fv-side{display:none}
  .fv-top{position:sticky;top:0;z-index:var(--z-top);display:flex;align-items:center;justify-content:space-between;gap:8px;height:56px;padding:0 8px 0 16px;border-bottom:1px solid transparent;transition:background-color var(--t-base) var(--ease-out),border-color var(--t-base) var(--ease-out)}
  .fv-top .fv-brand{padding:0}
  .fv-top .fv-brand svg{width:30px;height:30px}
  .fv-top .fv-brand b{font-size:17px}
  .fv-top .acts{display:flex;align-items:center;gap:2px}
  [data-scrolled="true"] .fv-top{background:var(--glass);-webkit-backdrop-filter:blur(var(--blur)) saturate(1.3);backdrop-filter:blur(var(--blur)) saturate(1.3)}
  /* Al bajar, la barra no corta la página con una línea: el papel se desvanece 14 px por debajo (borde suave) */
  .fv-top::after{content:"";position:absolute;left:0;right:0;top:100%;height:14px;background:linear-gradient(var(--glass),transparent);opacity:0;pointer-events:none;transition:opacity var(--t-base) var(--ease-out)}
  [data-scrolled="true"] .fv-top::after{opacity:1}
  @media (prefers-contrast:more){
    [data-scrolled="true"] .fv-top{border-bottom-color:var(--glass-line)}
    .fv-top::after{display:none}
  }
  /* Bolsa de páginas en el celular: anillo dorado que se vacía con el día; rojo solo en deuda */
  .fv-ring{position:relative;display:inline-grid;place-items:center;width:44px;height:44px;padding:0;border:0;border-radius:50%;background:none;color:var(--text);text-decoration:none;cursor:pointer;transition:background-color var(--t-fast) var(--ease-out),transform var(--t-press) var(--ease-out)}
  .fv-ring:active{transform:scale(.92)}
  .fv-ring svg{position:absolute;inset:3px;width:38px;height:38px;transform:rotate(-90deg)}
  .fv-ring circle{fill:none;stroke-width:3;stroke-linecap:round}
  .fv-ring .bg{stroke:var(--line);opacity:.45}
  .fv-ring .fg{stroke:var(--gold);transition:stroke-dashoffset .5s var(--ease-out)}
  .fv-ring b{position:relative;max-width:26px;overflow:hidden;font:600 11px/1 Inter,system-ui,sans-serif;letter-spacing:0;font-variant-numeric:tabular-nums;white-space:nowrap}
  .fv-ring.is-debt .fg{stroke:var(--error)}
  .fv-ring.is-debt b{color:var(--error);font-size:14px}
  span.fv-ring{cursor:default}
  .fv-main{gap:28px;padding:8px 16px calc(112px + env(safe-area-inset-bottom,0px))}
  .fv-h1{font-size:34px}
  .fv-h2{font-size:28px}
  .fv-tabs{position:fixed;left:0;right:0;bottom:0;z-index:var(--z-top);display:grid;grid-template-columns:repeat(var(--tabs,4),1fr);height:calc(72px + env(safe-area-inset-bottom,0px));padding:0 6px env(safe-area-inset-bottom,0px);border-top:1px solid var(--glass-line);background:var(--glass);-webkit-backdrop-filter:blur(var(--blur)) saturate(1.3);backdrop-filter:blur(var(--blur)) saturate(1.3)}
  .fv-tabs a{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;min-height:56px;border-radius:14px;color:var(--muted);font:600 10px/1 Inter,system-ui,sans-serif;letter-spacing:.12em;text-transform:uppercase;text-decoration:none;transition:color var(--t-fast) var(--ease-out),transform var(--t-press) var(--ease-out)}
  .fv-tabs a:active{transform:scale(.94)}
  .fv-tabs a .fv-ic{width:24px;height:24px;transition:transform var(--t-base) var(--ease-out)}
  .fv-tabs a[aria-current="page"]{color:var(--text)}
  .fv-tabs a[aria-current="page"] .fv-ic{transform:translateY(-1px)}
  .fv-tabs a[aria-current="page"]::before{content:"";position:absolute;top:0;left:50%;width:26px;height:2px;margin-left:-13px;border-radius:2px;background:var(--hl)}
  .fv-tabs .n{position:absolute;top:6px;left:calc(50% + 8px);min-width:18px;padding:2px 5px;border-radius:99px;background:var(--pri);color:var(--on-pri);font:700 10px/1.2 Inter,system-ui,sans-serif;letter-spacing:0;text-align:center}
  .fv-fabwrap{position:fixed;right:16px;bottom:calc(88px + env(safe-area-inset-bottom,0px));z-index:var(--z-top);display:block}
  .fv-fab .lb{display:inline-block;white-space:nowrap}
  .fv-back{margin-bottom:-12px}
  .fv-foot{padding-top:0}
}

/* ===== Inicio · saludo y buscador ===== */
.fv-hero{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:20px 28px}
.fv-greet{display:flex;align-items:center;gap:24px;min-width:0;flex:1 1 560px}
.fv-saludo{display:none;width:108px;flex:none;color:var(--ink)}
.fv-s-tarde{display:block}
[data-momento]:not([data-momento="tarde"]) .fv-s-tarde{display:none}
[data-momento="manana"] .fv-s-manana,[data-momento="atardecer"] .fv-s-atardecer,[data-momento="noche"] .fv-s-noche{display:block}
.fv-hi{display:none}
.fv-hi-tarde{display:inline}
[data-momento]:not([data-momento="tarde"]):not([data-momento="atardecer"]) .fv-hi-tarde{display:none}
[data-momento="atardecer"] .fv-hi-tarde{display:inline}
[data-momento="manana"] .fv-hi-manana,[data-momento="noche"] .fv-hi-noche{display:inline}
.fv-greet .tx{min-width:0}
.fv-hero .hl{padding:0 .2em;margin:0 -.05em;color:#1F1D1B;-webkit-box-decoration-break:clone;box-decoration-break:clone}
.fv-phrase{display:flex;align-items:center;gap:4px;margin:8px 0 0;font:italic 500 21px/1.3 'Cormorant Garamond',Georgia,serif;color:var(--muted)}
.fv-phrase .fv-ib{width:44px;height:44px;margin:-8px 0;color:var(--muted)}
@media (hover:hover) and (pointer:fine){
  .fv-phrase .fv-ib:hover{color:var(--text)}
}
.fv-tools{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin-left:auto}
.fv-searchf{display:flex;margin:0}
.fv-tools .fv-search{width:340px;max-width:100%}
.fv-tools .fv-search:focus-within .fv-ic{color:var(--ink)}
/* Personalizar, al lado del buscador (solo icono); en el celular está en la cabecera */
.fv-tools .fv-pz-ib{width:48px;height:48px}
/* /library · la ventana: arco más grande y la lámpara que se enciende de noche (una vez, ver fv-movimiento.css) */
@media (min-width:860px){.fv-inicio .fv-saludo{width:140px}}
.fv-s-noche{position:relative;isolation:isolate}
.fv-s-noche::before{content:"";position:absolute;inset:-40%;z-index:-1;background:radial-gradient(circle at 50% 40%,rgba(197,164,109,.18),transparent 60%);pointer-events:none}
.fv-memo{font-style:italic}
/* En Estantes la barra de filtros no queda pegada arriba (tapaba los encabezados de los estantes) */
.fv-lib-bar.quieta{position:static}
[data-scrolled="true"] .fv-lib-bar.quieta{background:transparent;border-bottom-color:transparent;-webkit-backdrop-filter:none;backdrop-filter:none}
.fv-search .clear{display:none}
.fv-search.has-value kbd{display:none}
.fv-search.has-value .clear{display:inline-grid}

/* ===== Inicio · continuar leyendo ===== */
.fv-cont{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:16px 28px}
.fv-ccard{position:relative;display:flex;gap:14px;padding:18px 0 4px;border-top:1px solid var(--line);color:inherit;text-decoration:none;transition:border-color var(--t-fast) var(--ease-out)}
.fv-ccard.first{border-top:2px solid var(--text)}
.fv-ccard::before{content:"";position:absolute;left:0;right:0;top:-1px;height:2px;background:var(--gold-ink);transform:scaleX(0);transform-origin:0 50%;transition:transform var(--t-base) var(--ease-out)}
@media (hover:hover) and (pointer:fine){
  .fv-ccard:hover::before{transform:scaleX(1)}
}
.fv-ccard .fv-mc{width:64px;height:96px;transition:transform var(--t-base) var(--ease-out)}
@media (hover:hover) and (pointer:fine){
  .fv-ccard:hover .fv-mc{transform:translateY(-3px) rotate(-1.5deg)}
}
.fv-ccard .ct{display:flex;flex-direction:column;gap:4px;min-width:0;flex:1}
.fv-ccard .k{font:700 11px/1.2 Inter,system-ui,sans-serif;letter-spacing:.2em;text-transform:uppercase;color:var(--gold-ink)}
.fv-ccard .tt{margin:0;font:600 20px/1.15 'Cormorant Garamond',Georgia,serif;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.fv-ccard .ss{font-size:13px;color:var(--muted)}
.fv-ccard .pp{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:auto;font-size:13px;font-weight:600;font-variant-numeric:tabular-nums}
.fv-ccard .go{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:0 4px;color:var(--text)}
.fv-ccard .go .fv-ic{width:18px;height:18px;transition:transform var(--t-fast) var(--ease-out)}
@media (hover:hover) and (pointer:fine){
  .fv-ccard:hover .go .fv-ic{transform:translateX(3px)}
}
.fv-ccard.first .go{padding:0 16px;border-radius:99px;background:var(--pri);color:var(--on-pri)}
@media (hover:hover) and (pointer:fine){
  .fv-ccard.first:hover .go{background:var(--pri-h)}
}

/* ===== Biblioteca · barra (título, vista, orden, filtros) ===== */
.fv-lib-bar{position:sticky;top:0;z-index:var(--z-bar);margin:0 -44px;padding:10px 44px 14px;border-bottom:1px solid transparent;background:transparent;transition:background-color var(--t-base) var(--ease-out),border-color var(--t-base) var(--ease-out)}
[data-scrolled="true"] .fv-lib-bar{background:var(--glass);border-bottom-color:var(--glass-line);-webkit-backdrop-filter:blur(var(--blur)) saturate(1.3);backdrop-filter:blur(var(--blur)) saturate(1.3)}
.fv-lib-bar .row1{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px 20px}
.fv-lib-bar .ttl{display:flex;align-items:center;gap:14px;min-width:0}
.fv-lib-bar .ttl .dib{width:56px;flex:none}
.fv-lib-bar .ctrls{display:flex;flex-wrap:wrap;align-items:center;gap:12px}
.fv-seg button .fv-ic{width:18px;height:18px}
.fv-seg a{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:40px;padding:0 18px;border-radius:99px;color:var(--muted);font:600 12px/1 Inter,system-ui,sans-serif;letter-spacing:.1em;text-transform:uppercase;text-decoration:none;white-space:nowrap;transition:background-color var(--t-fast) var(--ease-out),color var(--t-fast) var(--ease-out),transform var(--t-press) var(--ease-out)}
@media (hover:hover) and (pointer:fine){
  .fv-seg a:hover{background:var(--hov);color:var(--text)}
}
.fv-seg a:active{transform:scale(.97)}
.fv-seg a[aria-current="true"],.fv-seg a[aria-current="page"]{background:var(--pri);color:var(--on-pri)}
.fv-seg a .fv-ic{width:18px;height:18px}
.fv-sortw{position:relative;display:inline-flex;align-items:center}
.fv-sortw select{min-height:48px;padding:0 44px 0 20px;border:1px solid var(--text);border-radius:99px;background:none;color:var(--text);font:600 14px/1 Inter,system-ui,sans-serif;letter-spacing:.04em;cursor:pointer;-webkit-appearance:none;appearance:none;transition:background-color var(--t-fast) var(--ease-out),box-shadow var(--t-fast) var(--ease-out)}
@media (hover:hover) and (pointer:fine){
  .fv-sortw select:hover{background:var(--hov)}
}
.fv-sortw select:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.fv-sortw .chev{position:absolute;right:16px;width:18px;height:18px;pointer-events:none}
.fv-sortw option{background:var(--card);color:var(--text)}
.fv-filters{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:16px}
.fv-filters .vr{width:1px;height:28px;margin:0 6px;background:var(--line)}
.fv-chip .dot{background:var(--c,var(--gold))}
.fv-filters .fv-chip{text-decoration:none}

/* ===== Biblioteca · cuadrícula y tarjeta de libro ===== */
.fv-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--min,190px),1fr));gap:36px 24px;margin-top:8px}
.fv-grid.m{--min:152px}
.fv-book{position:relative;display:flex;flex-direction:column;gap:14px;min-width:0}
.fv-book[hidden]{display:none}
.fv-cw{position:relative;transition:transform var(--t-base) var(--ease-out)}
.fv-cover{aspect-ratio:2/3;width:100%;color:inherit;text-decoration:none;transition:transform var(--t-press) var(--ease-out),box-shadow var(--t-base) var(--ease-out)}
.fv-cover img{position:absolute;inset:0}
.fv-cover .ttl{left:9%;right:7%;bottom:7%;padding-top:10px;font-size:17px}
.fv-grid.m .fv-cover .ttl{font-size:15px}
.fv-cover .fv-badge{position:absolute;top:10px;left:14px}
.fv-cover .fv-done{position:absolute;top:10px;right:10px}
/* Seguimiento de AO3: insignia dorada «N nuevos» arriba a la izquierda (la del idioma baja un lugar) */
.fv-badge.new{z-index:3;background:var(--gold);border-color:var(--gold);color:#1F1D1B;box-shadow:0 1px 2px rgba(0,0,0,.28),0 0 0 1px rgba(31,29,27,.12);animation:fv-new-in 260ms var(--ease-out) both}
.fv-cover .fv-badge.new+.fv-badge.cv{top:40px}
.fv-sbook .fv-badge.new{position:absolute;top:8px;left:8px;min-height:20px;padding:0 8px;font-size:10px}
@keyframes fv-new-in{from{opacity:0;transform:translateY(-3px) scale(.94)}}
.fv-mi .r .fv-sw{width:40px;height:22px;border-radius:11px;transition:background-color 180ms var(--ease-out)}
.fv-mi .r .fv-sw i{top:3px;left:3px;width:16px;height:16px;transition:transform 180ms var(--ease-out),background-color 180ms var(--ease-out)}
.fv-mi .r .fv-sw.on i{left:3px;transform:translateX(18px)}
.fv-mi[aria-busy="true"]{cursor:progress}
.fv-mi-ao3>.fv-ic{color:var(--gold-ink)}
.fv-act-tx{margin:0;font-size:15px;line-height:1.55;text-wrap:pretty}
.fv-act-ao3{align-self:flex-start}
.fv-act-ao3 .fv-ic{width:16px;height:16px}
#w-actualizar .fv-bk .fv-badge.new{animation:none;box-shadow:none}
@media (prefers-reduced-motion:reduce){.fv-badge.new{animation:none}.fv-mi .r .fv-sw,.fv-mi .r .fv-sw i{transition:none}}
.fv-cover:active{transform:scale(.985)}
.fv-plate{position:absolute;left:8px;right:8px;bottom:14px;display:none;gap:6px;padding:5px;border:1px solid rgba(255,255,255,.22);border-radius:99px;background:rgba(24,22,20,.74);-webkit-backdrop-filter:blur(16px) saturate(1.5);backdrop-filter:blur(16px) saturate(1.5);color:#F7F3EC;opacity:0;transform:translateY(8px);pointer-events:none;transition:opacity var(--t-fast) var(--ease-out),transform var(--t-base) var(--ease-out)}
@media (hover:hover){
  .fv-plate{display:flex}
  .fv-book:hover .fv-cw,.fv-book:focus-within .fv-cw{transform:translateY(-5px)}
  .fv-book:hover .fv-cover,.fv-book:focus-within .fv-cover{box-shadow:0 1px 0 rgba(0,0,0,.35),0 22px 24px -16px rgba(0,0,0,.6)}
  .fv-book:hover .fv-plate,.fv-book:focus-within .fv-plate,.fv-book.is-hover .fv-plate{opacity:1;transform:none;pointer-events:auto}
  .fv-book.is-hover .fv-cw{transform:translateY(-5px)}
}
.fv-book.is-hover .fv-plate{display:flex}
.fv-plate a,.fv-plate button{display:inline-flex;align-items:center;justify-content:center;gap:6px;flex:1;min-height:40px;padding:0 10px;border:0;border-radius:99px;background:none;color:inherit;font:700 11px/1 Inter,system-ui,sans-serif;letter-spacing:.1em;text-transform:uppercase;text-decoration:none;cursor:pointer;transition:background-color var(--t-fast) var(--ease-out),transform var(--t-press) var(--ease-out)}
@media (hover:hover) and (pointer:fine){
  .fv-plate a:hover,.fv-plate button:hover{background:rgba(255,255,255,.16)}
}
.fv-plate a:active,.fv-plate button:active{transform:scale(.96)}
.fv-plate .fv-ic{width:18px;height:18px}
.fv-plate .ic-only{flex:0 0 40px;padding:0}
.fv-plate :focus-visible{outline:2px solid #fff;outline-offset:-2px}
.fv-plate a,.fv-plate button{min-width:0;overflow:hidden;white-space:nowrap}
.fv-grid .fv-cw{container-type:inline-size}
@container (max-width:189px){
  .fv-plate{gap:4px;padding:4px}
  .fv-plate a,.fv-plate button{gap:5px;padding:0 8px;letter-spacing:.06em}
}
@container (max-width:164px){
  .fv-plate .tr{gap:0;font-size:0}
}
.fv-plate [aria-disabled="true"]{opacity:.55;cursor:not-allowed}
.fv-meta{display:flex;align-items:flex-start;justify-content:space-between;gap:4px}
.fv-bt{margin:0;font:600 20px/1.15 'Cormorant Garamond',Georgia,serif;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-wrap:balance}
.fv-bt a{color:inherit;text-decoration:none}
@media (hover:hover) and (pointer:fine){
  .fv-bt a:hover{text-decoration:underline;text-decoration-color:var(--hl);text-decoration-thickness:2px;text-underline-offset:4px}
}
/* Tarjeta más callada: autor y estado comparten un renglón; «Sin empezar» no se dibuja (se entiende solo), aunque queda en el HTML */
.fv-sub{display:flex;align-items:baseline;gap:8px;min-width:0;margin-top:3px}
.fv-au{flex:1 1 auto;margin:0;font-size:13px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fv-st{flex:none;margin:0;font-size:12.5px;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap}
.fv-st.p{color:var(--gold-ink)}
.fv-st.d{font:italic 500 15px/1.2 'Cormorant Garamond',Georgia,serif;letter-spacing:0;color:var(--text)}
.fv-st.z{display:none}
.fv-meta .fv-ib{margin:-10px -10px 0 0;color:var(--muted)}
@media (hover:hover) and (pointer:fine){
  .fv-meta .fv-ib:hover{color:var(--text)}
}
.fv-trans{display:flex;flex-direction:column;gap:6px;margin-top:-2px}
.fv-trans[hidden]{display:none}
.fv-trans .lbl{margin:0;display:flex;align-items:center;gap:8px;font-size:12.5px;line-height:1.3;color:var(--muted);font-variant-numeric:tabular-nums}
.fv-trans .msg{margin:0;min-height:0;font-size:12.5px;line-height:1.4;color:var(--muted)}
.fv-trans .msg:empty{display:none}
.fv-trans .retry{align-self:flex-start;min-height:32px;padding:0;border:0;background:none;font:600 13px/1.2 Inter,system-ui,sans-serif}
.fv-book[data-state="translating"] .fv-cover::after{content:"";position:absolute;inset:0;border-radius:inherit;box-shadow:inset 0 0 0 2px var(--gold);opacity:0;animation:fv-ring 2s var(--ease-move) infinite;pointer-events:none}
@keyframes fv-ring{0%,100%{opacity:0}50%{opacity:.85}}
.fv-book[data-state="failed"] .fv-trans .lbl{color:var(--error)}
.fv-book[data-state="failed"] .fv-bar{border-color:var(--error)}
.fv-book[data-state="failed"] .fv-bar i{background:var(--error)}
.fv-book[data-state="limit"] .fv-plate .tr{opacity:.55}
@media (prefers-reduced-motion:reduce){
  .fv-book[data-state="translating"] .fv-cover::after{animation:none;opacity:.7}
}

/* ===== Biblioteca · estantes ===== */
.fv-shelves{display:flex;flex-direction:column}
.fv-shelf{padding:30px 0 6px}
.fv-shelf:first-child{padding-top:12px}
.fv-shelf-h{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:18px}
.fv-shelf-h h3{margin:0;font:500 28px/1.1 'Cormorant Garamond',Georgia,serif}
.fv-shelf-h h3 small{margin-left:8px;font:500 14px/1 Inter,system-ui,sans-serif;color:var(--muted)}
.fv-row{display:flex;align-items:flex-end;gap:24px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.fv-row::-webkit-scrollbar{display:none}
.fv-sbook{flex:0 0 calc((100% - 5 * 24px) / 6);width:calc((100% - 5 * 24px) / 6);min-width:120px;max-width:170px;position:relative;display:block;aspect-ratio:2/3;color:inherit;text-decoration:none;transition:transform var(--t-base) var(--ease-out),box-shadow var(--t-base) var(--ease-out)}
.fv-sbook .ttl{left:9%;right:7%;bottom:7%;padding-top:10px;font-size:16px}
@media (hover:hover){
  .fv-sbook:hover,.fv-sbook:focus-visible{transform:translateY(-7px);box-shadow:0 1px 0 rgba(0,0,0,.35),0 22px 24px -16px rgba(0,0,0,.6)}
}
.fv-sbook:active{transform:scale(.985)}
.fv-sbook .fv-bar.cv{height:5px}
.fv-deco{flex:0 0 60px;width:60px;align-self:flex-end;pointer-events:none;color:var(--ink);line-height:0}
.fv-plank{position:relative;height:1px;background:var(--text)}
.fv-plank::after{content:"";position:absolute;left:0;right:0;top:1px;height:10px;background:linear-gradient(rgba(0,0,0,.10),transparent)}
[data-theme="dark"] .fv-plank::after{background:linear-gradient(rgba(0,0,0,.35),transparent)}
.fv-shelf-vacio{margin:0;padding:24px 0 20px;font:italic 16px/1.4 'Lora',Georgia,serif;color:var(--muted)}

/* ===== Colecciones · mosaicos ===== */
.fv-cgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:24px}
.fv-colt{position:relative;display:flex;flex-direction:column;align-items:center;gap:4px;padding:46px 24px 22px;border:1px solid var(--line);border-radius:150px 150px 16px 16px;color:inherit;text-align:center;text-decoration:none;transition:border-color var(--t-fast) var(--ease-out),background-color var(--t-base) var(--ease-out),transform var(--t-base) var(--ease-out)}
@media (hover:hover) and (pointer:fine){
  .fv-colt:hover{border-color:var(--text);background:color-mix(in srgb,var(--sunken) 45%,transparent)}
}
.fv-colt:active{transform:scale(.99)}
.fv-colt .fv-mini{display:flex;align-items:flex-end;justify-content:center;gap:6px;width:100%;height:112px;margin-top:8px;padding:0 6px}
.fv-colt .fv-mb{position:relative;flex:none;display:block;width:56px;overflow:hidden;border-radius:2px 5px 5px 2px;box-shadow:0 6px 8px -4px rgba(41,40,43,.55);transition:transform var(--t-base) var(--ease-out)}
.fv-colt .fv-mb .sp{position:absolute;left:0;top:0;bottom:0;width:6px;background:linear-gradient(90deg,rgba(0,0,0,.3),rgba(255,255,255,.2) 45%,rgba(0,0,0,0))}
@media (hover:hover) and (pointer:fine){
  .fv-colt:hover .fv-mb{transform:translateY(-5px)}
  .fv-colt:hover .fv-mb:nth-child(2){transition-delay:.03s}
  .fv-colt:hover .fv-mb:nth-child(3){transition-delay:.06s}
  .fv-colt:hover .fv-mb:nth-child(4){transition-delay:.09s}
}
.fv-colt .more{align-self:center;margin-left:2px;font:700 14px/1 Inter,system-ui,sans-serif;color:var(--muted)}
.fv-colt .fv-mplank{display:block;align-self:stretch;height:1px;margin:-1px 0 16px;background:var(--text)}
.fv-colt .nm{font:500 28px/1.1 'Cormorant Garamond',Georgia,serif}
.fv-colt .cc{font-size:13px;color:var(--muted)}
.fv-colt .fv-menu-btn{position:absolute;top:18px;right:18px}
.fv-colt.add{justify-content:center;border-style:dashed;border-color:var(--line-strong);color:var(--gold-ink);min-height:300px;gap:14px}
.fv-colt.add .plus{display:grid;place-items:center;width:56px;height:56px;border:1px solid currentColor;border-radius:50%}
.fv-colt.add .nm{font-size:26px;color:var(--text)}
.fv-colt.add .plus .fv-ic{width:26px;height:26px}
.fv-cgrid.fan .fv-fan{position:relative;display:block;width:100%;height:168px;margin:8px 0 14px}
.fv-fan .fc{position:absolute;left:50%;bottom:0;width:98px;height:147px;margin-left:-49px;overflow:hidden;border-radius:2px 5px 5px 2px;box-shadow:0 12px 18px -8px rgba(41,40,43,.6);transform-origin:50% 100%;transition:transform var(--t-base) var(--ease-out)}
@media (hover:hover) and (pointer:fine){
  .fv-colt:hover .fv-fan .fc:first-child{transform:translateX(-40px) rotate(-14deg)!important}
  .fv-colt:hover .fv-fan .fc:last-child{transform:translateX(40px) rotate(14deg)!important}
}

/* ===== Estados vacíos y sin resultados ===== */
.fv-empty{display:flex;flex-direction:column;align-items:center;gap:14px;max-width:620px;margin:20px auto 0;text-align:center;border-radius:28px;outline:1.5px dashed transparent;outline-offset:20px;transition:outline-color var(--t-fast) var(--ease-out)}
/* Mientras se arrastra un archivo sobre la página (fv-app.js pone data-drop), la biblioteca vacía muestra dónde soltarlo */
html[data-drop="true"] .fv-empty{outline-color:var(--gold-ink)}
html[data-drop="true"] .fv-empty .dib{color:var(--gold-ink)}
.fv-empty .dib{width:min(300px,70%);color:var(--ink)}
.fv-empty .fv-h2{margin-top:6px}
.fv-empty p{margin:0;font:400 16px/1.6 Lora,Georgia,serif;color:var(--muted);text-wrap:pretty}
.fv-empty .acts{display:flex;flex-wrap:wrap;justify-content:center;gap:12px;margin-top:8px}
.fv-steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;width:100%;margin:28px 0 0;padding:0;list-style:none;text-align:left}
.fv-steps li{display:flex;flex-direction:column;gap:8px;padding-top:16px;border-top:1px solid var(--line)}
.fv-steps .fv-ic{width:26px;height:26px;color:var(--ink)}
.fv-steps b{font:600 21px/1.15 'Cormorant Garamond',Georgia,serif}
.fv-steps span{font-size:14px;line-height:1.5;color:var(--muted)}
.fv-none{display:flex;flex-direction:column;align-items:center;gap:8px;padding:56px 16px;text-align:center}
.fv-none[hidden]{display:none}
.fv-none .fv-h3{font-size:26px}
.fv-none p{margin:0;color:var(--muted)}
.fv-sub-n{align-self:flex-end;padding-bottom:6px;font-size:14px;color:var(--muted);font-variant-numeric:tabular-nums}
html[data-dibujos="off"] :is(.fv-saludo,.fv-deco,.dib,.fv-foot .div){display:none}
html[data-dibujos="off"] .fv-greet{gap:0}
@media (max-width:859px){
  .fv-hero{gap:16px}
  .fv-greet{gap:14px;flex-basis:100%}
  .fv-saludo{width:84px}
  .fv-phrase{font-size:18px}
  .fv-tools{width:100%;margin-left:0}
  .fv-tools .fv-searchf{width:100%;flex:1 1 100%}
  .fv-tools .fv-search{width:100%;flex:1 1 100%}
  .fv-tools .fv-btn,.fv-tools .fv-pz-ib{display:none}
  /* Saludo en dos líneas: «Buenas tardes,» chico en cursiva y el nombre grande abajo (el marcador no se parte) */
  .fv-greet .fv-h1:has(.hl){font-size:22px;font-style:italic}
  .fv-greet .fv-h1 .hl{display:table;margin-top:2px;font-size:34px;font-style:normal;line-height:1.05}
  .fv-cont{display:flex;gap:20px;margin:0 -16px;padding:0 16px 6px;overflow-x:auto;scroll-snap-type:x mandatory;scroll-padding:0 16px;scrollbar-width:none}
  .fv-cont::-webkit-scrollbar{display:none}
  .fv-ccard{flex:0 0 min(290px,82%);scroll-snap-align:start}
  .fv-lib-bar{margin:0 -16px;padding:8px 16px 12px;top:56px}
  .fv-lib-bar .ttl .dib{display:none}
  .fv-lib-bar .fv-seg a span{display:none}
  .fv-lib-bar .fv-seg a{padding:0 14px}
  .fv-lib-bar .ctrls{gap:8px}
  .fv-sortw select{min-height:44px;padding:0 38px 0 16px;font-size:13px}
  .fv-filters{flex-wrap:nowrap;margin:14px -16px 0;padding:0 16px 2px;overflow-x:auto;scrollbar-width:none}
  .fv-filters::-webkit-scrollbar{display:none}
  .fv-filters .fv-chip{flex:none}
  .fv-grid{--min:150px;grid-template-columns:repeat(2,minmax(0,1fr));gap:28px 16px}
  .fv-cover .ttl{font-size:15px}
  .fv-bt{font-size:18px}
  .fv-row{gap:14px}
  .fv-sbook{flex:0 0 calc((100% - 2 * 14px) / 3);width:calc((100% - 2 * 14px) / 3);min-width:86px;max-width:110px}
  .fv-deco{flex:0 0 48px;width:48px;display:block}
  .fv-sbook .ttl{font-size:12px}
  .fv-shelf-h h3{font-size:24px}
  .fv-cgrid{grid-template-columns:minmax(0,1fr);gap:18px}
  .fv-colt{padding:40px 20px 20px}
  .fv-steps{grid-template-columns:minmax(0,1fr);gap:14px}
}

/* ===== Ventanas · importar, planes, personalizar ===== */
.fv-win .fv-wt .sp{display:block;width:56px;height:auto;margin-top:2px;color:var(--ink)}
.fv-wt{display:flex;align-items:center;gap:12px}
.fv-win .fv-fld+.fv-fld{margin-top:2px}
.fv-wb .fv-chk{align-items:flex-start}
.fv-wb .fv-chk b{font-weight:700}
.fv-fileok .fv-mc{box-shadow:0 1px 0 rgba(0,0,0,.35),0 10px 14px -10px rgba(0,0,0,.55)}
.fv-fileok .fv-mc .ttl{left:14%;right:8%;bottom:8%;font-size:9px;padding-top:4px}
.fv-drop{cursor:pointer;transition:background-color var(--t-base) var(--ease-out),border-color var(--t-base) var(--ease-out)}
@media (hover:hover) and (pointer:fine){
  .fv-drop:hover{background:color-mix(in srgb,var(--sunken) 40%,transparent)}
}
.fv-drop .disc{transition:transform var(--t-base) var(--ease-out)}
.fv-drop[data-over="true"] .disc{transform:translateY(-3px)}
.fv-drop .st-idle .fv-btn{cursor:pointer}
.fv-opt .go.price{width:auto;height:auto;min-width:64px;display:flex;flex-direction:column;align-items:flex-end;gap:2px;text-align:right}
.fv-opt .go.price b{font:600 24px/1 'Cormorant Garamond',Georgia,serif;font-variant-numeric:tabular-nums}
.fv-opt .go.price small{font:600 11px/1.2 Inter,system-ui,sans-serif;letter-spacing:.06em;text-transform:uppercase;opacity:.85}
.fv-opt.is-sent{border-color:var(--good);box-shadow:inset 0 0 0 1px var(--good)}
.fv-opt.is-sent .ico{border-color:var(--good);color:var(--good)}
@keyframes fv-slide-r{from{transform:translateX(100%)}to{transform:none}}
@media (min-width:860px){
  .fv-ov.fv-drawer{justify-content:flex-end;align-items:stretch;padding:0}
  .fv-ov.fv-drawer .fv-win{height:100%;max-height:100%;border-width:0 0 0 1px;border-radius:0;box-shadow:-30px 0 60px -30px rgba(0,0,0,.45);padding:28px 28px 22px}
  .fv-ov.fv-drawer:not([hidden]) .fv-win{animation:fv-slide-r var(--t-sheet) var(--ease-sheet)}
  .fv-ov.fv-drawer .fv-win{transition:transform .2s var(--ease-sheet),opacity .2s var(--ease-sheet)}
  .fv-ov.fv-drawer[hidden] .fv-win{opacity:1;transform:translateX(100%)}
  html .fv-ov.fv-drawer[hidden]{transition:visibility 0s linear .2s}
}
.fv-wb.pz{gap:16px}
.pz .fv-seg.big button{padding:0 10px}
.pz-sw{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
.pz-sw i{display:block;width:36px;height:36px;border-radius:50%;background:linear-gradient(135deg,var(--s1) 50%,var(--s2) 50%);box-shadow:0 0 0 1px var(--line-strong)}
.fv-chk.sw{cursor:default}
.fv-chk.sw>span{font-size:15px}
.fv-sw{cursor:pointer}
[data-plans-fb]:empty{display:none}
[data-plans-fb] .fv-al{margin-bottom:2px}
.col-sw{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:10px}
.col-sw label{position:relative;display:grid;place-items:center;min-height:44px;cursor:pointer}
.col-sw i{display:block;width:30px;height:30px;border-radius:50%;background:var(--c);box-shadow:0 0 0 1px var(--line-strong);transition:transform var(--t-fast) var(--ease-out),box-shadow var(--t-fast) var(--ease-out)}
@media (hover:hover) and (pointer:fine){
  .col-sw label:hover i{transform:scale(1.1)}
}
.col-sw label:active i{transform:scale(.94)}
.col-sw input:checked+i{box-shadow:0 0 0 2px var(--card),0 0 0 4px var(--text)}
.col-sw input:focus-visible+i{outline:2px solid var(--focus);outline-offset:4px}
@media (max-width:420px){
  .col-sw{grid-template-columns:repeat(4,minmax(0,1fr))}
}
.pz-sw label{display:flex;flex-direction:column;align-items:center;gap:8px;padding:10px 4px 8px;border:1px solid var(--line-strong);border-radius:14px;color:var(--text);font:600 11px/1.1 Inter,system-ui,sans-serif;letter-spacing:.08em;text-transform:uppercase;cursor:pointer;transition:border-color var(--t-fast) var(--ease-out),background-color var(--t-fast) var(--ease-out),transform var(--t-press) var(--ease-out)}
@media (hover:hover) and (pointer:fine){
  .pz-sw label:hover{background:var(--hov)}
}
.pz-sw label:active{transform:scale(.97)}
.pz-sw label:has(input:checked){border-color:var(--text);box-shadow:inset 0 0 0 1px var(--text)}
.pz-sw label:has(input:checked) i{box-shadow:0 0 0 2px var(--bg),0 0 0 4px var(--text)}
.pz-sw label:has(input:focus-visible){outline:2px solid var(--focus);outline-offset:2px}
.pz-frase{font-family:'Cormorant Garamond',Georgia,serif;font-style:italic;font-size:19px}
.pz .fv-chk.sw{padding:2px 0}
.pz-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.pz-2 .fv-seg.big button{letter-spacing:.06em;padding:0 6px}
.fv-wb.pz{padding-bottom:30px}
.fv-wb.pz::after{content:"";position:sticky;bottom:-4px;display:block;flex:none;height:30px;margin:-30px -8px -4px;background:linear-gradient(rgba(0,0,0,0),var(--card));pointer-events:none}
#w-importar .fv-fileok{min-height:0}
.pz .fv-seg.big button{min-height:40px}
#w-coleccion [data-col-eliminar]{border-color:transparent}
@media (hover:hover) and (pointer:fine){
  #w-coleccion [data-col-eliminar]:hover{background:var(--err-bg)}
}

/* ===== Cabecera de página (perfil, admin, colecciones) ===== */
.fv-ph{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:20px 28px}
.fv-ph .lead{display:flex;align-items:center;gap:24px;min-width:0;flex:1 1 520px}
.fv-ph .dibp{display:block;width:96px;flex:none;color:var(--ink)}
.fv-ph .tx{min-width:0}
.fv-ph .fv-h1{margin-top:10px}
.fv-ph .fv-sub{max-width:58ch}
.fv-ph .acts{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin-left:auto}
.fv-ph .hl{padding:0 .2em;margin:0 -.05em;color:#1F1D1B;background-image:linear-gradient(var(--hl),var(--hl));background-repeat:no-repeat;background-position:0 0;background-size:0% 100%;animation:fv-mark .6s .3s var(--ease-move) forwards;-webkit-box-decoration-break:clone;box-decoration-break:clone}
@media (prefers-reduced-motion:reduce){
  .fv-ph .hl{animation:none;background-size:100% 100%}
}

/* ===== Secciones, datos, cifras y medidores (perfil y admin) ===== */
.fv-sect{display:flex;flex-direction:column;gap:20px;padding:28px;border:1px solid var(--line);border-radius:20px}
.fv-sect>header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:10px 20px}
.fv-sect>header .tx{min-width:0}
.fv-sect>header h2{margin:0;font:600 26px/1.15 'Cormorant Garamond',Georgia,serif}
.fv-sect>header p{margin:4px 0 0;max-width:62ch;font-size:14.5px;line-height:1.5;color:var(--muted)}
.fv-sect>header .dib{width:52px;flex:none}
.fv-dl{display:flex;flex-direction:column;margin:0}
.fv-dl>div{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 20px;min-height:60px;padding:12px 0;border-top:1px solid var(--line)}
.fv-dl>div:first-child{border-top:0;padding-top:0}
.fv-dl dt{min-width:0;flex:1 1 220px;font:600 15px/1.3 Inter,system-ui,sans-serif}
.fv-dl dt small{display:block;margin-top:2px;font:400 13px/1.45 Inter,system-ui,sans-serif;color:var(--muted)}
.fv-dl dd{margin:0;display:flex;align-items:center;justify-content:flex-end;gap:12px;min-width:0;flex:0 1 auto;color:var(--text);font-size:15px}
.fv-dl dd.mut{color:var(--muted)}
.fv-fig{display:flex;flex-direction:column;gap:6px;min-width:0}
.fv-fig .k{font:700 10.5px/1.25 Inter,system-ui,sans-serif;letter-spacing:.18em;text-transform:uppercase;color:var(--muted)}
.fv-fig .v{font:500 44px/1 'Cormorant Garamond',Georgia,serif;font-variant-numeric:lining-nums tabular-nums;letter-spacing:-.005em}
.fv-fig .v small{margin-left:6px;font:500 14px/1 Inter,system-ui,sans-serif;color:var(--muted);letter-spacing:0}
.fv-fig .d{font-size:13px;line-height:1.45;color:var(--muted)}
.fv-fig.bad .v{color:var(--error)}
.fv-meter{position:relative;height:8px;border:1px solid var(--line-strong);border-radius:99px;background:none;overflow:hidden}
.fv-meter>i{display:block;height:100%;border-radius:99px;background:var(--gold);transform-origin:0 50%;transition:width var(--t-sheet) var(--ease-out)}
.fv-meter.warn>i{background:var(--gold-ink)}
.fv-meter.bad{border-color:var(--error)}
.fv-meter.bad>i{background:var(--error)}
html.fv-enter .fv-meter>i{animation:fv-grow .7s .2s var(--ease-out) both}
@keyframes fv-grow{from{transform:scaleX(0)}}
@media (prefers-reduced-motion:reduce){
  html.fv-enter .fv-meter>i{animation:none}
}
.fv-av.xl{width:88px;height:88px;font-size:44px}
.fv-2col{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:28px;align-items:start}
.fv-grid2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}
.fv-grid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}
.fv-grid4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:20px}
@media (max-width:1180px){
  .fv-2col{grid-template-columns:minmax(0,1fr)}
  .fv-grid4{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:859px){
  .fv-ph .lead{gap:14px;flex-basis:100%}
  .fv-ph .dibp{width:68px}
  .fv-ph .acts{width:100%;margin-left:0}
  .fv-ph .acts .fv-btn{flex:1 1 auto}
  .fv-sect{padding:20px 18px;border-radius:18px}
  .fv-sect>header h2{font-size:24px}
  .fv-grid2,.fv-grid3{grid-template-columns:minmax(0,1fr)}
  .fv-fig .v{font-size:38px}
}

/* ===== Colecciones · detalle, elegir libros, selector de color ===== */
.fv-colt .nm{margin:0}
.fv-colt .nm a{color:inherit;text-decoration:none}
.fv-colt .nm a::after{content:"";position:absolute;inset:0;border-radius:inherit}
.fv-colt .nm a:focus-visible{outline:none}
.fv-colt:has(.nm a:focus-visible){outline:2px solid var(--focus);outline-offset:3px}
.fv-colt .nm::after{content:"";display:block;width:34px;height:3px;margin:9px auto 0;border-radius:2px;background:var(--c,var(--gold))}
.fv-colt .cc{margin:4px 0 0}
.fv-colt .fv-menu-btn{z-index:2;top:auto;bottom:10px;right:10px;color:var(--muted)}
@media (hover:hover) and (pointer:fine){
  .fv-colt .fv-menu-btn:hover{color:var(--text)}
}
.fv-colt.add .fv-menu-btn{display:none}
.fv-colt .fv-mb{height:96px}
.fv-colt .fv-mb img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.fv-colt .fv-mb .fv-gen{position:absolute;inset:0}
.fv-colt.add{cursor:pointer}
.fv-colt.add .nm::after{display:none}
.fv-colt.add button.nm{background:none;border:0;padding:0;font:500 26px/1.1 'Cormorant Garamond',Georgia,serif;color:var(--text);cursor:pointer}
.fv-colt.add button.nm::before{content:"";position:absolute;inset:0;border-radius:inherit}
.fv-colt .fv-fan .fc img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.fv-colt .fv-fan .fc .fv-gen{position:absolute;inset:0}
.fv-colsec{display:flex;flex-direction:column;gap:6px}
.fv-colsec .intro{margin:0 0 18px;font-size:15px;line-height:1.5;color:var(--muted)}
.fv-colsec .ctrls{display:flex;flex-wrap:wrap;align-items:center;gap:12px}
.fv-coldet .fv-h1 .hl{background-image:linear-gradient(var(--c,var(--hl)),var(--c,var(--hl)));box-shadow:inset 0 -.3em 0 color-mix(in srgb,var(--c,var(--hl)) 50%,transparent)}
.fv-coldet .meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 18px;margin:10px 0 0;font-size:14.5px;color:var(--muted)}
.fv-coldet .meta b{color:var(--text);font-weight:600;font-variant-numeric:tabular-nums}
.fv-coldet .meta i{display:inline-block;width:10px;height:10px;margin-right:8px;border-radius:50%;background:var(--c,var(--gold))}
.fv-bar-lista{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px 20px;padding-bottom:16px;border-bottom:1px solid var(--line)}
.fv-bar-lista .cnt{font-size:14px;color:var(--muted);font-variant-numeric:tabular-nums}
.fv-pick{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:16px;overflow:hidden;max-height:min(360px,42dvh);overflow-y:auto;scrollbar-width:none;-ms-overflow-style:none}
.fv-pick::-webkit-scrollbar{display:none;width:0;height:0}
.fv-pickrow{align-items:center;gap:14px;min-height:60px;padding:8px 16px;border-top:1px solid var(--line);transition:background-color var(--t-fast) var(--ease-out)}
.fv-pickrow:first-child{border-top:0}
@media (hover:hover) and (pointer:fine){
  .fv-pickrow:hover{background:var(--hov)}
}
.fv-pickrow:has(input:checked){background:var(--gold-bg)}
.fv-pickrow:has(input:focus-visible){outline:2px solid var(--focus);outline-offset:-2px}
.fv-pickrow .fv-box{margin:0}
.fv-pickrow .dot{width:12px;height:12px;flex:none;border-radius:50%;background:var(--c,var(--gold))}
.fv-pickrow .tx{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.fv-pickrow .tx b{font:600 15.5px/1.2 Lora,Georgia,serif;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fv-pickrow .tx small{font-size:12.5px;color:var(--muted)}
.fv-pickrow .fv-mc{width:36px;height:54px;flex:none}
.fv-pickrow .fv-mc .ttl{display:none}
.fv-pickrow.libro{min-height:70px}
.fv-win .fv-wb .fv-chip.add{align-self:flex-start}
.fv-selcount{font-size:14px;color:var(--muted);font-variant-numeric:tabular-nums}
.fv-selcount b{font:600 22px/1 'Cormorant Garamond',Georgia,serif;color:var(--text)}
.fv-wb .fv-search{width:100%}
.fv-colsw{display:block;width:34px;height:34px;flex:none;border-radius:50%;background:var(--c,var(--gold));box-shadow:inset 0 0 0 1px var(--line-strong)}
@media (max-width:859px){
  .fv-colsec .ctrls{width:100%}
  .fv-colsec .ctrls .fv-btn{flex:1 1 auto}
  .fv-colsec .ctrls .fv-seg{flex:1 1 auto}
  .fv-colsec .ctrls .fv-seg a{flex:1}
  .fv-coldet .meta{font-size:14px}
  .fv-pick{max-height:min(320px,38dvh)}
}

/* ===== Portadas con imagen: el título generado solo se ve si no hay imagen ===== */
.fv-mc.has-img .ttl{display:none}
.fv-mc.has-img>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.fv-mc.has-img>.fv-gen{background:var(--sunken)}
/* frase de bienvenida: la propia o las del momento del día (fv-app.js alterna cuál se ve) */
.fv-phrase [hidden]{display:none!important}
/* el atajo «/» solo tiene sentido con teclado */
@media (hover:none),(max-width:859px){.fv-search kbd{display:none}}

/* ===== Colecciones · vacías, una sola portada y fila nueva (D8) ===== */
.fv-colt .fv-mini.vacia{align-items:center}
.fv-colt .fv-mini .vacio-t{align-self:center;padding:0 12px;font:italic 500 17px/1.3 'Cormorant Garamond',Georgia,serif;color:var(--muted)}
.fv-fan .fc.ghost{border:1px dashed var(--line-strong);background:none;box-shadow:none;border-radius:6px}
@media (hover:hover) and (pointer:fine){
  .fv-colt:hover .fv-fan .fc:only-child{transform:translateX(0) rotate(0deg)!important}
  .fv-colt:hover .fv-fan .fc.ghost{transform:none!important}
}
@keyframes fv-fila-nueva{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.fv-pickrow.is-new{animation:fv-fila-nueva var(--t-base) var(--ease-out)}
@media (prefers-reduced-motion:reduce){
  .fv-pickrow.is-new{animation:none}
}

/* ===== Pulido · oct 2026: el título de la portada generada crece con la tarjeta ===== */
.fv-grid .fv-cover .ttl{font-size:clamp(15px,9.5cqi,24px);line-height:1.08;text-wrap:balance}

/* ===== Libros con forma propia (oct 2026) =====
   Cada libro trae en su style --fw (ancho), --fr (ancho/alto) y --fg (grosor): los arma el filtro «forma» de app/shell.py.
   El canto de las hojas asoma a la derecha y es más ancho cuanto más grueso es el libro.
   Con «Libros: todos iguales» (Personalizar → <html data-formas="iguales">) todos quedan del mismo tamaño. */
:root{--fw:1;--fr:.6667;--fg:.07;--papel-canto:#EDE4D2;--linea-canto:rgba(31,29,27,.2);--tabla-canto:#2A2826}
[data-theme="dark"]{--papel-canto:#CFC5B2;--linea-canto:rgba(0,0,0,.35);--tabla-canto:#0F0E0F}
[data-formas="iguales"] .fv-book,[data-formas="iguales"] .fv-sbook,[data-formas="iguales"] .fv-ccard{--fw:1!important;--fr:.6667!important;--fg:.07!important}
.fv-book,.fv-sbook,.fv-ccard{
  --e:calc(1.5px + var(--fg) * 40px);
  --canto:calc(var(--e) * .5) 0 0 -2px var(--papel-canto),calc(var(--e) * .5 + 1px) 0 0 -2px var(--linea-canto),var(--e) 0 0 -2px var(--papel-canto),calc(var(--e) + 1.5px) 1px 0 -1px var(--tabla-canto);
}
/* Cuadrícula: el lugar sigue siendo 2:3 y el libro se apoya abajo a la izquierda, como parado en un estante */
.fv-cw{aspect-ratio:2/3;display:flex;align-items:flex-end}
.fv-cover{width:calc(var(--fw) * 100% - var(--e));aspect-ratio:var(--fr);box-shadow:var(--canto),0 1px 0 rgba(0,0,0,.35),0 8px 14px -10px rgba(0,0,0,.5)}
.fv-plate{right:calc(100% - var(--fw) * 100% + var(--e) + 8px)}
/* Estantes */
.fv-sbook{flex-basis:calc((100% - 5 * 24px) / 6 * var(--fw));width:calc((100% - 5 * 24px) / 6 * var(--fw));min-width:calc(120px * var(--fw));max-width:calc(170px * var(--fw));aspect-ratio:var(--fr);margin-right:var(--e);box-shadow:var(--canto),0 1px 0 rgba(0,0,0,.35),0 8px 14px -10px rgba(0,0,0,.5)}
/* Continuar leyendo */
.fv-ccard .fv-mc{width:calc(64px * var(--fw));height:calc(64px * var(--fw) / var(--fr));align-self:flex-start;box-shadow:var(--canto),0 1px 0 rgba(0,0,0,.35),0 8px 14px -10px rgba(0,0,0,.5)}
@media (hover:hover){
  .fv-book:hover .fv-cover,.fv-book:focus-within .fv-cover,.fv-sbook:hover,.fv-sbook:focus-visible{box-shadow:var(--canto),0 1px 0 rgba(0,0,0,.35),0 22px 24px -16px rgba(0,0,0,.6)}
}
@media (max-width:859px){
  .fv-sbook{flex-basis:calc((100% - 2 * 14px) / 3 * var(--fw));width:calc((100% - 2 * 14px) / 3 * var(--fw));min-width:calc(86px * var(--fw));max-width:calc(110px * var(--fw))}
}

/* ===== Biblioteca · «Ordenar» con el menú del kit (oct 2026) =====
   Botón píldora igual al resto de la barra; el menú m-orden se abre desde él (fv-ui.js) y en el celular es una hoja. */
.fv-sortb{display:inline-flex;align-items:center;gap:9px;min-height:48px;padding:0 16px 0 18px;border:1px solid var(--text);border-radius:99px;background:none;color:var(--text);font:600 14px/1 Inter,system-ui,sans-serif;letter-spacing:.02em;cursor:pointer;white-space:nowrap;
  transition:background-color var(--t-fast) var(--ease-out),box-shadow var(--t-fast) var(--ease-out),transform var(--t-press) var(--ease-out)}
.fv-sortb[hidden]{display:none}
.fv-sortb>.fv-ic{width:18px;height:18px;color:var(--ink)}
.fv-sortb .k{color:var(--muted);font-weight:500}
.fv-sortb .v{min-width:7.5ch;text-align:left}
.fv-sortb .chev{width:16px;height:16px;margin-left:2px;transition:transform .2s var(--ease-out)}
.fv-sortb[aria-expanded="true"]{background:var(--sunken)}
.fv-sortb[aria-expanded="true"] .chev{transform:rotate(180deg)}
@media (hover:hover) and (pointer:fine){ .fv-sortb:hover{background:var(--hov)} }
.fv-sortb:active{transform:scale(.97)}
.fv-sortb:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.fv-menu-orden .fv-mhead{display:block;padding:8px 12px 6px}
.fv-menu-orden .fv-mhead .fv-hd{display:none}
.fv-mtit{margin:0;font:700 11px/1 Inter,system-ui,sans-serif;letter-spacing:.2em;text-transform:uppercase;color:var(--gold-ink)}
.fv-menu-orden .fv-mi small{margin-left:4px;font-size:12px;font-weight:500;color:var(--muted);letter-spacing:.04em}
.fv-menu-orden .fv-mi[aria-checked="true"]{background:color-mix(in srgb,var(--sunken) 70%,transparent)}
@media (max-width:859px){
  .fv-sortb .k{display:none}
  .fv-menu-orden .fv-mhead{padding:10px 22px 12px}
  .fv-menu-orden .fv-mhead .fv-hd{display:block}
  .fv-mtit{text-align:center}
}
@media (prefers-reduced-motion:reduce){ .fv-sortb .chev{transition:none} }

/* ===== Estantes · dibujos anchos (gatos, lámpara de banquero): caja 72×64 ===== */
.fv-deco.ancho{flex-basis:90px;width:90px}
@media (max-width:859px){ .fv-deco.ancho{flex-basis:72px;width:72px} }


/* ===== Estantes: cada libro trae su botón ⋯ (aparece al pasar el cursor; en táctil se ve siempre; clic derecho o
   mantener presionado también abren el menú). La tarjeta .fv-sitem toma el tamaño que antes tenía el <a>. ===== */
.fv-sitem{position:relative;flex:0 0 calc((100% - 5 * 24px) / 6 * var(--fw));width:calc((100% - 5 * 24px) / 6 * var(--fw));min-width:calc(120px * var(--fw));max-width:calc(170px * var(--fw));margin-right:var(--e)}
.fv-sitem,[data-formas="iguales"] .fv-sitem{--e:calc(1.5px + var(--fg) * 40px)}
[data-formas="iguales"] .fv-sitem{--fw:1!important;--fr:.6667!important;--fg:.07!important}
.fv-sitem>.fv-sbook{flex:none;width:100%;min-width:0;max-width:none;margin-right:0}
.fv-smenu{position:absolute;right:8px;bottom:10px;z-index:5;width:32px;height:32px;border:1px solid var(--glass-line,var(--line));background:var(--glass,rgba(241,234,221,.9));color:var(--text);-webkit-backdrop-filter:blur(8px) saturate(1.3);backdrop-filter:blur(8px) saturate(1.3);box-shadow:0 6px 14px -8px rgba(0,0,0,.55);opacity:0;transform:translateY(4px);transition:opacity .15s var(--ease-out),transform .15s var(--ease-out),background-color .15s}
.fv-smenu .fv-ic{width:18px;height:18px}
.fv-sitem:hover .fv-smenu,.fv-sitem:focus-within .fv-smenu,.fv-smenu.is-open,.fv-smenu[aria-expanded="true"]{opacity:1;transform:none}
@media (hover:hover){.fv-sitem:hover .fv-smenu,.fv-sitem:focus-within .fv-smenu{transform:translateY(-7px)}}
.fv-smenu:hover{background:var(--card)}
.fv-sitem.is-pressing>.fv-sbook{transform:scale(.97)}
/* en el estante, el aviso «En el dispositivo» se reduce a un puntito con la nube */
.fv-sbook .fv-badge.off{left:6px;bottom:6px;gap:0;width:22px;min-height:22px;padding:0;justify-content:center;border-radius:50%;font-size:0}
.fv-sbook .fv-badge.off .fv-ic{width:12px;height:12px}
@media (hover:none){
  .fv-smenu{opacity:.92;transform:none;width:28px;height:28px;right:6px;bottom:8px}
  .fv-smenu .fv-ic{width:16px;height:16px}
}
@media (max-width:859px){
  .fv-sitem{flex-basis:calc((100% - 2 * 14px) / 3 * var(--fw));width:calc((100% - 2 * 14px) / 3 * var(--fw));min-width:calc(86px * var(--fw));max-width:calc(110px * var(--fw))}
}
@media (prefers-reduced-motion:reduce){
  .fv-smenu{transition:none;transform:none}
}

/* Pie: «Reportar un problema» (beta), debajo del aviso legal */
.fv-foot .fv-foot-rep{margin-top:10px}
.fv-foot .fv-foot-legal{margin-top:8px}
.fv-foot .fv-foot-btn{padding:0;border:0;background:none;color:var(--gold-ink);font:inherit;font-weight:600;text-decoration:underline;text-underline-offset:3px;cursor:pointer;transition:color .15s ease-out}
.fv-foot .fv-foot-btn:hover{color:var(--text)}
.fv-foot .fv-foot-btn:active{opacity:.7}

/* ===== Estantes que se deslizan: con mouse no había forma de ver los libros que no entran.
   Flechas a los lados (solo si hay libros fuera de vista de ese lado), desvanecido en el borde y arrastre con el mouse
   (fv-app.js). En pantallas táctiles se desliza con el dedo como siempre: sin flechas, con el desvanecido. ===== */
.fv-row-w{position:relative}
.fv-row-w.can-l .fv-row{-webkit-mask-image:linear-gradient(to right,transparent 0,#000 56px);mask-image:linear-gradient(to right,transparent 0,#000 56px)}
.fv-row-w.can-r .fv-row{-webkit-mask-image:linear-gradient(to left,transparent 0,#000 56px);mask-image:linear-gradient(to left,transparent 0,#000 56px)}
.fv-row-w.can-l.can-r .fv-row{-webkit-mask-image:linear-gradient(to right,transparent 0,#000 56px,#000 calc(100% - 56px),transparent 100%);mask-image:linear-gradient(to right,transparent 0,#000 56px,#000 calc(100% - 56px),transparent 100%)}
.fv-row-w.arrastrando .fv-row{cursor:grabbing;user-select:none;-webkit-user-select:none}
.fv-row-w.arrastrando .fv-row *{pointer-events:none}
.fv-row-flecha{position:absolute;top:50%;z-index:6;display:grid;place-items:center;width:44px;height:44px;padding:0;border:1px solid var(--glass-line,var(--line));border-radius:50%;
  background:var(--glass,rgba(241,234,221,.92));color:var(--text);-webkit-backdrop-filter:blur(10px) saturate(1.3);backdrop-filter:blur(10px) saturate(1.3);
  box-shadow:0 10px 24px -12px rgba(0,0,0,.45);cursor:pointer;opacity:0;pointer-events:none;transform:translateY(-50%) scale(.9);
  transition:opacity .18s var(--ease-out,ease-out),transform .18s var(--ease-out,ease-out),background-color .15s}
.fv-row-flecha.izq{left:-10px}
.fv-row-flecha.der{right:-10px}
.fv-row-flecha .fv-ic{width:20px;height:20px}
.fv-row-w.can-l .fv-row-flecha.izq,.fv-row-w.can-r .fv-row-flecha.der{opacity:1;pointer-events:auto;transform:translateY(-50%)}
.fv-row-flecha:hover{background:var(--card)}
.fv-row-flecha:active{transform:translateY(-50%) scale(.94)}
@media (hover:none){.fv-row-flecha{display:none}}
@media (prefers-reduced-motion:reduce){.fv-row-flecha{transition:opacity .01ms}}

/* ===== Botones sobre la portada y aviso «En el dispositivo» (26-oct-2026) =====
   «Traducir» y «Descargar» (aparecen al pasar el mouse) quedaban DEBAJO del título de la portada dibujada (z-index 1)
   y del aviso «En el dispositivo» (z-index 4): el clic le llegaba a la portada y los botones no hacían nada.
   Ahora van encima de todo lo de la portada. Mientras están ocultos no reciben clics (pointer-events:none). */
.fv-plate{z-index:5}
/* El aviso «En el dispositivo» tenía top (de .fv-cover .fv-badge) y bottom (de .fv-badge.off) a la vez: se estiraba
   sobre toda la portada. En la cuadrícula es un puntito arriba a la derecha, como en el estante (el detalle sale al
   pasar el mouse, en su title). Si el libro está terminado, va debajo del tilde. */
.fv-cover .fv-badge.off{top:10px;right:10px;bottom:auto;left:auto;gap:0;width:26px;min-height:26px;padding:0;justify-content:center;border-radius:50%;font-size:0}
.fv-cover .fv-badge.off .fv-ic{width:13px;height:13px}
.fv-cover .fv-done~.fv-badge.off{top:42px}
.fv-imp-ao3 a{color:var(--gold-ink);font-weight:600;text-decoration:underline;text-underline-offset:3px}

/* ===== Biblioteca · los tres momentos (fv-app.js, Momentos) =====
   El movimiento lo hace JavaScript con transform y opacity, una vez; acá solo el aspecto y las versiones quietas. */
/* Llega un libro: contorno dorado que se apaga en 2 s */
.fv-cover.fv-llega,.fv-sbook.fv-llega{box-shadow:var(--canto,0 0 0 0 transparent),0 0 0 2px var(--gold),0 8px 14px -10px rgba(0,0,0,.5)!important;transition:box-shadow 2s var(--ease-out)}
/* Sello (traducción lista) y ex libris (libro terminado), sobre la portada, levemente torcidos */
.fv-sello{position:absolute;left:50%;top:50%;z-index:4;width:38%;pointer-events:none;opacity:0;transform:translate(-50%,-50%) rotate(-8deg);--ink:var(--gold-ink);color:var(--gold-ink);filter:drop-shadow(0 1px 0 rgba(241,234,221,.7))}
.fv-sello svg{display:block;width:100%;height:auto}
.fv-sello.exlibris{width:42%;--ink:var(--a1);color:var(--a1)}
[data-theme="dark"] .fv-sello{--ink:var(--gold);color:var(--gold);filter:drop-shadow(0 1px 0 rgba(0,0,0,.6))}
[data-theme="dark"] .fv-sello.exlibris{--ink:var(--a2);color:var(--a2)}
.fv-cover.fv-sellada,.fv-sbook.fv-sellada{box-shadow:var(--canto,0 0 0 0 transparent),0 1px 0 rgba(0,0,0,.35),0 22px 24px -16px rgba(0,0,0,.6)}
.fv-badge.cv{backface-visibility:hidden}
@media (prefers-reduced-motion:reduce){
  .fv-cover.fv-llega,.fv-sbook.fv-llega{transition:none}
}

/* ===== Biblioteca · sobre la mesa (el libro que estabas leyendo, con su memoria) ===== */
.fv-mesa-libro{display:flex;align-items:flex-start;gap:28px;padding:22px 0 6px;border-top:2px solid var(--text)}
.fv-mesa-portada{flex:none;width:120px;height:180px;box-shadow:var(--canto,0 0 0 0 transparent),0 1px 0 rgba(0,0,0,.35),0 14px 20px -12px rgba(0,0,0,.55);transition:transform var(--t-base) var(--ease-out)}
.fv-mesa-portada .ttl{font-size:15px}
@media (hover:hover) and (pointer:fine){
  .fv-mesa-libro:hover .fv-mesa-portada{transform:translateY(-3px) rotate(-1.5deg)}
}
.fv-mesa-libro .tx{display:flex;flex-direction:column;gap:6px;min-width:0;flex:1}
.fv-mesa-libro .tt{margin:0;font:500 32px/1.08 'Cormorant Garamond',Georgia,serif;color:var(--text);text-wrap:balance}
.fv-mesa-libro .au{margin:0;font:italic 400 15px/1.4 Lora,Georgia,serif;color:var(--muted)}
.fv-mesa-libro .memo{display:flex;flex-direction:column;gap:3px;margin:8px 0 0;padding:0;list-style:none;font-size:14.5px;line-height:1.45;color:var(--text)}
.fv-mesa-libro .memo .frase{margin-top:4px;font:italic 400 16px/1.5 Lora,Georgia,serif}
.fv-mesa-libro .memo q{quotes:none}
.fv-mesa-libro .avance{display:flex;align-items:center;gap:12px;max-width:420px;margin-top:8px}
.fv-mesa-libro .avance .fv-bar{flex:1;height:6px}
.fv-mesa-libro .avance .n{flex:none;font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums}
.fv-mesa-libro .fv-btn{align-self:flex-start;margin-top:12px}
.fv-mesa-otros{margin:22px 0 0;font:700 11px/1.2 Inter,system-ui,sans-serif;letter-spacing:.2em;text-transform:uppercase;color:var(--gold-ink)}
.fv-mesa .fv-cont{margin-top:4px}
@media (max-width:859px){
  .fv-mesa-libro{gap:16px}
  .fv-mesa-portada{width:96px;height:144px}
  .fv-mesa-libro .tt{font-size:26px}
  .fv-mesa-libro .fv-btn{align-self:stretch;justify-content:center}
}
@media (prefers-reduced-motion:reduce){
  .fv-mesa-portada{transition:none}
}
