/* ============================================================
   Revista Venezolana de Urología · Flipbook
   Editorial design — tinta / crema / terracota
   ============================================================ */

:root{
  /* Palette */
  --tinta:        #0F1B2D;
  --tinta-800:    #162438;
  --tinta-700:    #1d2c42;
  --tinta-600:    #27374e;
  --crema:        #F5EFE6;
  --crema-dim:    #EADFCD;
  --crema-soft:   rgba(245, 239, 230, 0.08);
  --terracota:    #B4532A;
  --terracota-2:  #C86538;
  --terracota-mute:rgba(180, 83, 42, 0.22);
  --ink-mute:     rgba(245, 239, 230, 0.62);
  --ink-faint:    rgba(245, 239, 230, 0.35);
  --rule:         rgba(245, 239, 230, 0.14);
  --rule-strong:  rgba(245, 239, 230, 0.28);

  /* Type */
  --f-display: 'Fraunces', 'Times New Roman', serif;
  --f-serif:   'Newsreader', 'Georgia', serif;
  --f-sans:    'Archivo', system-ui, -apple-system, 'Segoe UI', sans-serif;

  /* UI sizing */
  --top-h: 62px;
  --bar-h: 72px;
  --radius: 10px;
}

/* ---------- Reset ---------- */
*,*::before,*::after{box-sizing:border-box}
html,body{margin:0;padding:0;height:100%;overflow:hidden}
body{
  font-family:var(--f-sans);
  color:var(--crema);
  background:var(--tinta);
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
  text-rendering:optimizeLegibility;
  overscroll-behavior:none;
  /* Rich editorial backdrop: subtle vignette + grain */
  background-image:
    radial-gradient(ellipse 90% 70% at 50% 38%, var(--tinta-700) 0%, var(--tinta) 70%),
    radial-gradient(circle at 18% 12%, rgba(180,83,42,0.08), transparent 40%),
    radial-gradient(circle at 82% 88%, rgba(180,83,42,0.06), transparent 42%);
  background-attachment: fixed;
}
body::before{
  /* film grain */
  content:"";
  position:fixed; inset:0;
  pointer-events:none;
  opacity:.06;
  mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='140' height='140'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0.96  0 0 0 0 0.93  0 0 0 0 0.89  0 0 0 0.55 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");
  z-index:1;
}

button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}
a{color:inherit;text-decoration:none}

/* ---------- Top bar ---------- */
.topbar{
  position:fixed;
  top:0;left:0;right:0;
  height:var(--top-h);
  padding:0 22px;
  display:flex;align-items:center;justify-content:space-between;
  background:linear-gradient(to bottom, rgba(15,27,45,.92), rgba(15,27,45,.72) 70%, rgba(15,27,45,0));
  backdrop-filter:blur(6px);
  -webkit-backdrop-filter:blur(6px);
  z-index:40;
}
.topbar__brand{
  display:flex;align-items:center;gap:14px;
  padding:6px 10px;
  border-radius:8px;
  transition:background .18s ease;
}
.topbar__brand:hover{background:var(--crema-soft)}
.topbar__mark{
  width:30px;height:30px;
  display:grid;place-items:center;
  color:var(--terracota-2);
  border:1px solid var(--rule-strong);
  border-radius:5px;
  background:var(--tinta-800);
}
.topbar__mark svg{width:18px;height:18px}
.topbar__text{display:flex;flex-direction:column;line-height:1.15}
.topbar__kicker{
  font-family:var(--f-display);
  font-weight:500;
  font-size:15px;
  letter-spacing:.005em;
  color:var(--crema);
}
.topbar__title{
  font-family:var(--f-sans);
  font-size:11.5px;
  letter-spacing:.12em;
  text-transform:uppercase;
  color:var(--ink-mute);
  margin-top:2px;
}

/* ---------- Icon buttons (reused) ---------- */
.iconbtn{
  width:38px;height:38px;
  display:inline-grid;place-items:center;
  border-radius:8px;
  color:var(--crema);
  background:transparent;
  transition:background .15s ease, color .15s ease, transform .1s ease;
  -webkit-tap-highlight-color:transparent;
}
.iconbtn svg{width:18px;height:18px}
.iconbtn:hover{background:var(--crema-soft);color:#fff}
.iconbtn:active{transform:translateY(1px)}
.iconbtn:focus-visible{
  outline:2px solid var(--terracota-2);
  outline-offset:2px;
}
.iconbtn[disabled]{opacity:.35;cursor:default}
.iconbtn[disabled]:hover{background:transparent}

.topbar__close{ border:1px solid var(--rule); }

/* ---------- Stage / book ---------- */
.stage{
  position:fixed;
  top:var(--top-h); left:0; right:0;
  bottom:var(--bar-h);
  display:flex;align-items:center;justify-content:center;
  padding:24px 18px;
  z-index:5;
}
.stage__inner{
  position:relative;
  width:100%; height:100%;
  display:flex;align-items:center;justify-content:center;
}
.book{
  width:min(100%, 1100px);
  height:100%;
  /* Deep ambient shadow so the book "rests" in space */
  filter:
    drop-shadow(0 30px 50px rgba(0,0,0,.45))
    drop-shadow(0 6px 14px rgba(0,0,0,.35));
}
/* The page elements created dynamically */
.page{
  background:#fff;
  position:relative;
  overflow:hidden;
  display:block;
}
.page--hard{
  background:var(--crema);
  border:1px solid var(--rule-strong);
}
.page__canvas, .page > canvas, .page img{
  display:block;
  width:100%; height:100%;
  object-fit:cover;
  /* Let the browser use its highest-quality downscaler */
  image-rendering: auto;
  image-rendering: -webkit-optimize-contrast;
  image-rendering: high-quality;
}
/* Placeholder shown while a page is being rendered (or has been unrendered) */
.page-placeholder{
  position:absolute; inset:0;
  background:
    radial-gradient(ellipse at center, #fff 0%, #faf6ef 100%);
  /* Subtle horizontal line suggesting content */
  background-image:
    repeating-linear-gradient(
      to bottom,
      transparent 0 28px,
      rgba(15,27,45,.035) 28px 29px,
      transparent 29px 56px
    );
  background-color:#fff;
}
/* Subtle inner shadow along the binding side */
.page::after{
  content:"";
  position:absolute;
  top:0; bottom:0;
  width:20px;
  pointer-events:none;
}
.--left.page::after{
  right:0;
  background:linear-gradient(to right, transparent, rgba(0,0,0,.09));
}
.--right.page::after{
  left:0;
  background:linear-gradient(to left, transparent, rgba(0,0,0,.09));
}

/* ---------- Toolbar ---------- */
.toolbar{
  position:fixed;left:0;right:0;bottom:0;
  height:var(--bar-h);
  padding:0 20px;
  display:flex;align-items:center;justify-content:space-between;gap:16px;
  background:linear-gradient(to top, rgba(15,27,45,.96), rgba(15,27,45,.8) 65%, rgba(15,27,45,0));
  backdrop-filter:blur(6px);
  -webkit-backdrop-filter:blur(6px);
  z-index:40;
}
.toolbar__group{
  display:flex;align-items:center;gap:6px;
  background:var(--tinta-800);
  border:1px solid var(--rule);
  padding:6px 10px;
  border-radius:999px;
  box-shadow:0 6px 18px rgba(0,0,0,.25), inset 0 1px 0 rgba(245,239,230,.03);
}
.toolbar__indicator{
  display:flex;align-items:baseline;gap:6px;
  padding:0 14px;
  font-family:var(--f-display);
  font-weight:500;
  color:var(--crema);
  letter-spacing:.01em;
  min-width:92px;
  justify-content:center;
  border-left:1px solid var(--rule);
  border-right:1px solid var(--rule);
  height:30px;
  align-self:center;
  padding-top:0;
}
.toolbar__pagenum{
  font-size:17px;
  color:var(--crema);
  font-variant-numeric: tabular-nums;
  min-width:28px; text-align:right;
  font-feature-settings: "ss01" on;
}
.toolbar__sep{color:var(--ink-faint);font-size:14px}
.toolbar__pagetotal{
  font-size:13px;
  color:var(--ink-mute);
  font-variant-numeric: tabular-nums;
}

.toolbar__chipbtn{
  display:inline-flex;align-items:center;gap:8px;
  height:34px; padding:0 14px;
  color:var(--crema);
  border-radius:999px;
  font-family:var(--f-sans);
  font-size:13px;
  letter-spacing:.03em;
  transition:background .15s ease, color .15s ease;
}
.toolbar__chipbtn:hover{background:var(--crema-soft)}
.toolbar__chipbtn[aria-expanded="true"]{
  background:var(--terracota);
  color:#fff;
}

/* Fullscreen icon toggle */
.iconbtn .ic-exit{display:none}
:fullscreen .iconbtn[data-action="fullscreen"] .ic-enter,
body.is-fullscreen .iconbtn[data-action="fullscreen"] .ic-enter{display:none}
:fullscreen .iconbtn[data-action="fullscreen"] .ic-exit,
body.is-fullscreen .iconbtn[data-action="fullscreen"] .ic-exit{display:block}

/* ---------- TOC panel ---------- */
.toc{position:relative}
.toc__panel{
  position:absolute;
  bottom:calc(100% + 14px);
  right:0;
  width:360px;
  max-width:calc(100vw - 32px);
  padding:18px;
  background:var(--tinta-800);
  border:1px solid var(--rule-strong);
  border-radius:12px;
  box-shadow:0 20px 40px rgba(0,0,0,.5), 0 4px 12px rgba(0,0,0,.3);
  animation: tocIn .22s cubic-bezier(.2,.8,.2,1);
  transform-origin: bottom right;
}
@keyframes tocIn{
  from{opacity:0;transform:translateY(6px) scale(.98)}
  to{opacity:1;transform:none}
}
.toc__panel[hidden]{display:none !important}
.toc__eyebrow{
  margin:0 0 10px;
  font-family:var(--f-sans);
  font-size:10.5px;
  letter-spacing:.2em;
  text-transform:uppercase;
  color:var(--ink-faint);
  padding:0 10px;
}
.toc__item{
  display:flex;align-items:baseline;gap:14px;
  padding:11px 10px;
  border-radius:8px;
  color:var(--crema);
  transition:background .15s ease, color .15s ease;
  line-height:1.35;
}
.toc__item + .toc__item{
  border-top:1px solid var(--rule);
}
.toc__item:hover{
  background:var(--terracota-mute);
  color:#fff;
}
.toc__num{
  font-family:var(--f-display);
  font-feature-settings:"ss01" on;
  font-size:12px;
  color:var(--terracota-2);
  min-width:22px;
}
.toc__label{
  font-family:var(--f-serif);
  font-size:15px;
  flex:1;
}
.toc__item.is-active{
  background:var(--terracota);
  color:#fff;
}
.toc__item.is-active .toc__num{color:rgba(255,255,255,.7)}

/* ---------- Loader ---------- */
.loader{
  position:fixed; inset:0;
  display:flex; align-items:center; justify-content:center;
  background:radial-gradient(ellipse 60% 50% at 50% 50%, var(--tinta-700), var(--tinta) 72%);
  z-index:100;
  padding:32px 24px;
  transition:opacity .5s ease, visibility .5s;
}
.loader.is-hidden{
  opacity:0; visibility:hidden; pointer-events:none;
}
.loader__inner{
  text-align:center;
  max-width:520px;
}
.loader__kicker{
  font-family:var(--f-sans);
  font-size:11px; letter-spacing:.25em;
  text-transform:uppercase;
  color:var(--terracota-2);
  margin:0 0 16px;
}
.loader__title{
  font-family:var(--f-display);
  font-weight:500;
  font-size:clamp(22px, 3.2vw, 32px);
  line-height:1.18;
  letter-spacing:-.01em;
  margin:0 0 32px;
  color:var(--crema);
}
.loader__meter{
  height:2px;
  width:260px; max-width:80%;
  margin:0 auto 14px;
  background:var(--rule);
  border-radius:99px;
  overflow:hidden;
  position:relative;
}
.loader__meter-fill{
  height:100%; width:0;
  background:var(--terracota-2);
  border-radius:99px;
  transition:width .25s ease;
}
.loader__progress{
  font-family:var(--f-sans);
  font-size:12px;
  letter-spacing:.08em;
  text-transform:uppercase;
  color:var(--ink-mute);
  margin:0;
  font-variant-numeric: tabular-nums;
}

/* Little animated "book" */
.loader__sigil{
  width:64px; height:64px;
  margin:0 auto 28px;
  position:relative;
  perspective:800px;
}
.loader__sigil-book{
  position:absolute; inset:0;
  transform-style:preserve-3d;
}
.loader__sigil-page{
  position:absolute;
  left:50%; top:10%;
  width:28px; height:80%;
  background:var(--crema);
  border:1px solid rgba(15,27,45,.4);
  border-left:2px solid var(--terracota);
  transform-origin: left center;
  box-shadow: 0 4px 10px rgba(0,0,0,.35);
  animation: pageFlip 1.8s cubic-bezier(.4, 0, .2, 1) infinite;
}
.loader__sigil-page:nth-child(1){animation-delay:0s}
.loader__sigil-page:nth-child(2){animation-delay:.3s}
.loader__sigil-page:nth-child(3){animation-delay:.6s}
@keyframes pageFlip{
  0%, 20%  { transform: rotateY(0deg) }
  60%, 100%{ transform: rotateY(-170deg) }
}

/* ---------- Error screen ---------- */
.errscreen{
  position:fixed; inset:0;
  background:var(--tinta);
  display:flex;align-items:center;justify-content:center;
  padding:40px 24px;
  z-index:90;
}
/* HTML [hidden] would normally apply display:none, but the .errscreen
   class above wins by specificity. Restore the correct behavior: */
.errscreen[hidden]{ display:none !important; }
.errscreen__inner{max-width:500px;text-align:center}
.errscreen__kicker{
  font-family:var(--f-sans);
  font-size:11px; letter-spacing:.2em;
  text-transform:uppercase;
  color:var(--terracota-2);
  margin:0 0 10px;
}
.errscreen__title{
  font-family:var(--f-display);
  font-weight:500;
  font-size:28px; line-height:1.2;
  margin:0 0 12px;
}
.errscreen__text{
  font-family:var(--f-serif);
  font-size:16px; color:var(--ink-mute);
  margin:0 0 24px;
}
.errscreen__actions{
  display:flex;gap:12px;justify-content:center;flex-wrap:wrap;
}
.btn{
  display:inline-flex;align-items:center;
  height:42px; padding:0 22px;
  border-radius:99px;
  font-family:var(--f-sans);
  font-size:13px; letter-spacing:.04em;
  background:var(--terracota); color:#fff;
  transition:background .15s ease, transform .1s;
}
.btn:hover{background:var(--terracota-2)}
.btn:active{transform:translateY(1px)}
.btn--ghost{
  background:transparent;
  border:1px solid var(--rule-strong);
  color:var(--crema);
}
.btn--ghost:hover{background:var(--crema-soft)}

/* ---------- Topbar credit ---------- */
.topbar__credit{
  display:flex; align-items:baseline; gap:7px;
  padding:8px 14px;
  border-radius:8px;
  border:1px solid var(--rule);
  background:rgba(245,239,230,0.03);
  font-family:var(--f-sans);
  font-size:12px;
  color:var(--ink-mute);
  line-height:1.2;
  white-space:nowrap;
}
.topbar__credit-label{
  color:var(--ink-faint);
  font-weight:400;
}
.topbar__credit-link{
  color:var(--crema);
  font-weight:500;
  border-bottom:1px solid transparent;
  padding-bottom:1px;
  transition:color .15s ease, border-color .15s ease;
}
.topbar__credit-link:hover,
.topbar__credit-link:focus-visible{
  color:var(--terracota-2);
  border-bottom-color:var(--terracota-2);
  outline:none;
}
.topbar__credit-sep{
  color:var(--ink-faint);
  font-style:italic;
  opacity:.8;
  margin:0 1px;
}
.topbar__credit-studio{
  color:var(--ink-mute);
  font-weight:400;
}

/* ---------- Responsive ---------- */
@media (max-width: 780px){
  :root{ --top-h: 54px; --bar-h: 64px; }

  .topbar{ padding:0 12px; }
  .topbar__text{display:none}
  .topbar__brand{gap:0}

  .topbar__credit{
    padding:5px 9px;
    font-size:10.5px;
    gap:5px;
    border-radius:6px;
  }
  /* On mobile: keep everything visible, just smaller */
  .topbar__credit-sep{ margin:0; }

  .stage{ padding:12px 8px; }

  .toolbar{ padding:0 10px; gap:8px; }
  .toolbar__group{ padding:4px 6px; }
  .iconbtn{ width:36px; height:36px; }
  .toolbar__indicator{
    min-width:70px; padding:0 8px;
  }
  .toolbar__pagenum{font-size:15px}
  .toolbar__chipbtn span{display:none}
  .toolbar__chipbtn{ width:36px; height:36px; padding:0; justify-content:center; }

  .loader__title{font-size:22px}
  .toc__panel{ width:300px; right:-40px; }
}

@media (max-width: 460px){
  .toolbar__group--nav .iconbtn[data-action="first"],
  .toolbar__group--nav .iconbtn[data-action="last"]{ display:none; }
  .toc__panel{ right:-80px; }

  /* Tight phones: drop the "Desarrollado por" label to keep the names fully visible */
  .topbar__credit{
    font-size:10px;
    padding:5px 8px;
  }
  .topbar__credit-label{ display:none; }
}

/* High-DPI / retina: sharper page borders */
@media (min-resolution: 2dppx){
  .page{ image-rendering: -webkit-optimize-contrast; }
}

/* Respect reduced motion */
@media (prefers-reduced-motion: reduce){
  .loader__sigil-page{ animation: none; opacity:.6 }
  .toc__panel{ animation:none }
  *{ transition-duration:0.01s !important }
}
