/* ============================================================================
   THE VIOLET STARLING - "The Celestial Codex"
   Single design-system stylesheet. Replaces all Weebly CSS + nav.css.

   Canonical page skeleton (use on every rebuilt page):

   <body>
     <div class="sky" aria-hidden="true"></div>
     <header class="masthead"> … wordmark + nav … </header>
     <nav class="drawer" id="drawer"> … mobile overlay menu … </nav>
     <main> … page content … </main>
     <footer class="ledger"> … links … </footer>
     <script src="files/site.js" defer></script>
   </body>
   ========================================================================== */

/* ── Self-hosted fonts (latin) ────────────────────────────────────────────── */
@font-face{font-family:'Cinzel';font-style:normal;font-weight:400;font-display:swap;src:url('fonts/cinzel/cinzel-400.woff2') format('woff2')}
@font-face{font-family:'Cinzel';font-style:normal;font-weight:600;font-display:swap;src:url('fonts/cinzel/cinzel-600.woff2') format('woff2')}
@font-face{font-family:'Cinzel';font-style:normal;font-weight:700;font-display:swap;src:url('fonts/cinzel/cinzel-700.woff2') format('woff2')}
@font-face{font-family:'Spectral';font-style:normal;font-weight:400;font-display:swap;src:url('fonts/spectral/spectral-400.woff2') format('woff2')}
@font-face{font-family:'Spectral';font-style:italic;font-weight:400;font-display:swap;src:url('fonts/spectral/spectral-400-italic.woff2') format('woff2')}
@font-face{font-family:'Spectral';font-style:normal;font-weight:500;font-display:swap;src:url('fonts/spectral/spectral-500.woff2') format('woff2')}
@font-face{font-family:'Spectral';font-style:normal;font-weight:600;font-display:swap;src:url('fonts/spectral/spectral-600.woff2') format('woff2')}
@font-face{font-family:'Cormorant';font-style:italic;font-weight:500;font-display:swap;src:url('fonts/cormorant/cormorant-500-italic.woff2') format('woff2')}

/* ── Design tokens ────────────────────────────────────────────────────────── */
:root{
  --void:#07060d;          /* page base - near-black indigo */
  --void-2:#0d0b16;        /* raised panels */
  --void-3:#15121f;        /* hover surfaces */
  --ink:#ece7f6;           /* primary text - starlight */
  --ink-dim:#a79fc0;       /* secondary text */
  --ink-faint:#6f6788;     /* tertiary / captions */
  --violet:#b5aaf6;        /* brand accent (cool) */
  --violet-deep:#7c66e6;   /* active / focus */
  --gold:#e6c585;          /* secondary accent (warm) - star-chart gold */
  --gold-dim:#ad9560;
  --line:rgba(181,170,246,.16);
  --line-2:rgba(181,170,246,.30);
  --glow:rgba(124,102,230,.35);

  --display:'Cinzel',Georgia,serif;
  --body:'Spectral',Georgia,serif;
  --accent:'Cormorant','Spectral',serif;

  --maxw:1200px;
  --measure:66ch;
  --gap:clamp(1.25rem,4vw,3rem);
  --head-h:64px;

  --ease:cubic-bezier(.2,.7,.2,1);
}

/* ── Reset / base ─────────────────────────────────────────────────────────── */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}

body{
  background:var(--void);
  color:var(--ink);
  font-family:var(--body);
  font-weight:400;
  font-size:clamp(1rem,.55rem + .6vw,1.125rem);
  line-height:1.75;
  letter-spacing:.005em;
  text-rendering:optimizeLegibility;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
  min-height:100vh;
}
img{max-width:100%;height:auto;display:block}
a{color:var(--violet);text-decoration:none;transition:color .2s var(--ease)}
a:hover{color:var(--gold)}
::selection{background:var(--violet-deep);color:#fff}
:focus-visible{outline:2px solid var(--gold);outline-offset:3px;border-radius:2px}

/* ── Atmosphere: starfield · nebula · grain (fixed, behind everything) ─────── */
.sky{position:fixed;inset:0;z-index:-1;pointer-events:none;overflow:hidden}
.sky::before,.sky::after{content:"";position:absolute;inset:-20%}
/* nebula glows + vignette */
.sky::before{
  background:
    radial-gradient(40vw 40vw at 78% 12%,rgba(124,102,230,.20),transparent 60%),
    radial-gradient(46vw 46vw at 14% 86%,rgba(230,197,133,.07),transparent 60%),
    radial-gradient(120vw 90vh at 50% 0%,#120f22 0%,var(--void) 55%),
    radial-gradient(140vw 120vh at 50% 100%,#0a0814 0%,var(--void) 60%);
}
/* layered star dust */
.sky::after{
  background-image:
    radial-gradient(1.4px 1.4px at 20% 30%,rgba(255,255,255,.9),transparent 60%),
    radial-gradient(1.4px 1.4px at 75% 22%,rgba(214,205,255,.8),transparent 60%),
    radial-gradient(1.2px 1.2px at 60% 70%,rgba(255,255,255,.7),transparent 60%),
    radial-gradient(1px 1px at 38% 84%,rgba(230,197,133,.7),transparent 60%),
    radial-gradient(1.6px 1.6px at 88% 64%,rgba(255,255,255,.85),transparent 60%),
    radial-gradient(1px 1px at 10% 58%,rgba(255,255,255,.6),transparent 60%),
    radial-gradient(1.2px 1.2px at 48% 14%,rgba(214,205,255,.7),transparent 60%);
  background-repeat:repeat;
  background-size:480px 480px,560px 560px,420px 420px,640px 640px,520px 520px,600px 600px,500px 500px;
  opacity:.55;
  animation:drift 240s linear infinite;
}
/* grain overlay */
body::after{
  content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;opacity:.035;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}
@keyframes drift{from{transform:translate3d(0,0,0)}to{transform:translate3d(-480px,-240px,0)}}

/* ── Layout primitives ───────────────────────────────────────────────────── */
.wrap{width:min(100% - 2.5rem,var(--maxw));margin-inline:auto}
main{position:relative;padding-top:var(--head-h)}
.section{padding-block:clamp(3.5rem,8vw,7rem)}
.section--tight{padding-block:clamp(2rem,5vw,3.5rem)}

/* constellation divider with ✦ node */
.rule{
  display:flex;align-items:center;gap:1.25rem;
  color:var(--gold-dim);margin-block:clamp(2rem,5vw,3.5rem)
}
.rule::before,.rule::after{content:"";height:1px;flex:1;
  background:linear-gradient(90deg,transparent,var(--line-2),transparent)}
.rule span{font-family:var(--display);font-size:.7rem;letter-spacing:.45em;
  text-transform:uppercase;color:var(--ink-faint)}
.rule i{color:var(--gold);font-style:normal}

/* ── Typography ──────────────────────────────────────────────────────────── */
h1,h2,h3,h4{font-family:var(--display);font-weight:600;line-height:1.15;
  color:var(--ink);letter-spacing:.02em}
.kicker{font-family:var(--display);font-size:.72rem;font-weight:600;
  letter-spacing:.42em;text-transform:uppercase;color:var(--gold)}
.display{
  font-family:var(--display);font-weight:700;
  font-size:clamp(2.4rem,1rem + 6vw,5.25rem);
  line-height:1.04;letter-spacing:.015em;color:var(--ink);
  text-shadow:0 0 38px rgba(124,102,230,.28)
}
.lede{font-family:var(--accent);font-style:italic;
  font-size:clamp(1.2rem,.8rem + 1.4vw,1.7rem);
  line-height:1.6;color:var(--ink-dim);max-width:38ch}
.prose p{margin-block:1rem;color:var(--ink-dim)}
.prose p strong,.prose strong{color:var(--ink);font-weight:600}
.muted{color:var(--ink-faint)}

/* link with drawn underline */
.link{position:relative;color:var(--ink)}
.link::after{content:"";position:absolute;left:0;right:100%;bottom:-3px;height:1px;
  background:var(--gold);transition:right .35s var(--ease)}
.link:hover{color:var(--gold)}
.link:hover::after{right:0}

/* ── Buttons ─────────────────────────────────────────────────────────────── */
.btn{
  display:inline-flex;align-items:center;gap:.6rem;
  font-family:var(--display);font-size:.74rem;font-weight:600;
  letter-spacing:.28em;text-transform:uppercase;
  color:var(--ink);padding:.95rem 1.8rem;
  border:1px solid var(--line-2);background:transparent;
  cursor:pointer;transition:.3s var(--ease);position:relative
}
.btn:hover{color:var(--void);background:var(--gold);border-color:var(--gold)}
.btn--violet:hover{background:var(--violet);border-color:var(--violet)}

/* oval CTA: a waxing-crescent glyph at one end that waxes to full on hover */
.moon-btn{
  display:inline-flex;align-items:center;gap:.7rem;
  font-family:var(--display);font-size:.74rem;font-weight:600;
  letter-spacing:.24em;text-transform:uppercase;color:var(--ink);
  padding:.72rem 1.6rem .72rem 1rem;border:1px solid var(--line-2);
  border-radius:999px;background:rgba(13,11,22,.45);
  transition:.3s var(--ease);position:relative
}
.moon-btn .moon{width:20px;height:20px;flex:0 0 auto;
  box-shadow:0 0 12px rgba(230,197,133,.35)}
.moon-btn:hover{color:var(--gold);border-color:var(--gold);background:var(--void-2)}
.moon-btn:hover .moon::before{background:var(--gold)}
.moon-btn:hover .moon::after{background:var(--gold);transform:scaleX(1)}

/* ── Masthead (fixed header) ─────────────────────────────────────────────── */
.masthead{
  position:fixed;top:0;left:0;right:0;z-index:80;height:var(--head-h);
  display:flex;align-items:center;justify-content:space-between;
  padding-inline:clamp(1.25rem,4vw,2.5rem);
  background:rgba(7,6,13,.72);backdrop-filter:blur(14px);
  border-bottom:1px solid var(--line)
}
.wordmark{display:flex;align-items:center;gap:.7rem;font-family:var(--display);
  font-weight:700;font-size:1.02rem;letter-spacing:.22em;text-transform:uppercase;
  color:var(--ink)}
.wordmark:hover{color:var(--gold)}
.wordmark .star{color:var(--gold);font-size:.85em}

/* desktop nav */
.nav{display:flex;align-items:center;gap:.35rem}
.nav a{font-family:var(--display);font-size:.72rem;font-weight:600;
  letter-spacing:.2em;text-transform:uppercase;color:var(--ink-dim);
  padding:.6rem .85rem;border-radius:2px}
.nav a:hover,.nav .current{color:var(--ink)}
.nav li{list-style:none;position:relative}
.nav .has-sub>a::after{content:"";display:inline-block;margin-left:.5rem;
  vertical-align:middle;border:4px solid transparent;border-bottom:0;
  border-top-color:var(--gold-dim);transition:border-top-color .2s var(--ease)}
.nav .has-sub:hover>a::after,.nav .has-sub:focus-within>a::after{border-top-color:var(--gold)}
.subnav{
  position:absolute;top:100%;left:50%;translate:-50% 8px;min-width:210px;
  background:rgba(13,11,22,.96);backdrop-filter:blur(14px);
  border:1px solid var(--line-2);padding:.5rem;
  opacity:0;visibility:hidden;transition:.22s var(--ease);
  box-shadow:0 24px 60px -20px #000
}
.nav .has-sub:hover .subnav,.nav .has-sub:focus-within .subnav{
  opacity:1;visibility:visible;translate:-50% 0}
.subnav li{display:block}
.subnav a{display:block;padding:.6rem .85rem;letter-spacing:.16em;color:var(--ink-dim)}
.subnav a:hover{color:var(--gold);background:var(--void-3)}

/* hamburger */
.burger{display:none;width:42px;height:42px;background:none;border:0;cursor:pointer;
  flex-direction:column;justify-content:center;gap:6px;align-items:flex-end}
.burger span{display:block;height:1.5px;width:26px;background:var(--ink);
  transition:.3s var(--ease)}
.burger span:nth-child(2){width:18px}

/* ── Mobile drawer (full-screen cosmic overlay) ──────────────────────────── */
.drawer{
  position:fixed;inset:0;z-index:90;
  background:linear-gradient(160deg,#0c0a16,#070610);
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:.4rem;opacity:0;visibility:hidden;
  clip-path:circle(0% at calc(100% - 44px) 32px);
  transition:clip-path .55s var(--ease),opacity .4s,visibility .55s
}
body.menu-open .drawer{opacity:1;visibility:visible;clip-path:circle(150% at calc(100% - 44px) 32px)}
body.menu-open{overflow:hidden}
.drawer a{font-family:var(--display);font-weight:600;font-size:clamp(1.5rem,7vw,2.4rem);
  letter-spacing:.12em;text-transform:uppercase;color:var(--ink-dim);
  padding:.45rem 1rem;opacity:0;transform:translateY(16px)}
.drawer a:hover,.drawer .current{color:var(--gold)}
.drawer .sub{font-size:clamp(.95rem,4vw,1.15rem);color:var(--ink-faint);letter-spacing:.18em}
body.menu-open .drawer a{animation:rise .6s var(--ease) forwards}
.drawer a:nth-child(1){animation-delay:.10s}
.drawer a:nth-child(2){animation-delay:.16s}
.drawer a:nth-child(3){animation-delay:.22s}
.drawer a:nth-child(4){animation-delay:.28s}
.drawer a:nth-child(5){animation-delay:.34s}
.drawer a:nth-child(6){animation-delay:.40s}
.drawer a:nth-child(7){animation-delay:.46s}
.drawer a:nth-child(8){animation-delay:.52s}
.drawer-close{position:absolute;top:18px;right:clamp(1.25rem,4vw,2.5rem);
  width:42px;height:42px;background:none;border:0;color:var(--ink);cursor:pointer;
  font-family:var(--display);font-size:1.5rem}

@media (max-width:900px){
  .nav{display:none}
  .burger{display:flex}
}

/* ── Hero ────────────────────────────────────────────────────────────────── */
.hero{position:relative;display:block;text-align:left;
  padding-block:clamp(4rem,12vw,9rem);isolation:isolate}
.hero .wrap{display:flex;flex-direction:column;align-items:flex-start;gap:1.5rem}
.hero .wrap>*{max-width:min(100%,640px)}
.hero .lede{margin-inline:0;text-align:left;max-width:32ch}
.hero .cta-row,.hero .orbits{justify-content:flex-start}
/* text-free banner anchored right; its empty left fades to the void so the
   title (left column) stays crisp. z:-2 art, z:-1 left-weighted dark veil. */
.hero::before{content:"";position:absolute;z-index:-2;pointer-events:none;
  left:50%;top:50%;translate:-50% -50%;
  width:min(1320px,100%);aspect-ratio:2112/708;
  background:url("/uploads/published/banner-hero.jpg?v=1") center/contain no-repeat;
  opacity:.72;
  -webkit-mask:
    linear-gradient(to right,transparent 0,transparent 30%,#000 52%,#000 92%,transparent 100%),
    linear-gradient(to bottom,transparent 0,#000 14%,#000 86%,transparent 100%);
  -webkit-mask-composite:source-in;
          mask:
    linear-gradient(to right,transparent 0,transparent 30%,#000 52%,#000 92%,transparent 100%),
    linear-gradient(to bottom,transparent 0,#000 14%,#000 86%,transparent 100%);
          mask-composite:intersect}
.hero::after{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;
  background:linear-gradient(to right,rgba(7,6,13,.62),rgba(7,6,13,.22) 50%,transparent 70%)}

@media (max-width:720px){
  .hero{text-align:center}
  .hero .wrap{align-items:center}
  .hero .wrap>*{max-width:100%}
  .hero .lede{text-align:center;margin-inline:auto}
  .hero .cta-row,.hero .orbits{justify-content:center}
  .hero::before{opacity:.4}
  .hero::after{background:radial-gradient(60% 55% at 50% 46%,rgba(7,6,13,.5),transparent 72%)}
}
.hero .crest{width:min(560px,82vw);margin-inline:auto;
  filter:drop-shadow(0 14px 50px rgba(124,102,230,.4))}
.cta-row{display:flex;flex-wrap:wrap;gap:1rem;justify-content:center;margin-top:.6rem}

/* social inline links */
.orbits{display:flex;flex-wrap:wrap;gap:.4rem 1.6rem;justify-content:center;
  font-family:var(--display);font-size:.74rem;font-weight:600;letter-spacing:.22em;
  text-transform:uppercase}
.orbits a{color:var(--ink-dim)}
.orbits a:hover{color:var(--gold)}

/* moon-phase glyphs - the full lunar cycle, drawn with a half-lit base
   + a terminator ellipse. Cycle order, distribute nav items across it
   (more items → more phases shown, incl. fuller & waning):
     new · wax-cres · first · wax-gib · full · wan-gib · last · wan-cres
   Waxing = lit on the right, waning = lit on the left.
   Hover waxes the moon to full. */
.moon{position:relative;display:inline-block;width:26px;height:26px;
  border-radius:50%;overflow:hidden;box-shadow:0 0 14px rgba(230,197,133,.3)}
.moon::before,.moon::after{content:"";position:absolute;inset:0;border-radius:50%}
.moon::after{transition:transform .55s var(--ease),background .55s var(--ease)}
/* half-lit base */
.moon--wax-cres::before,.moon--first::before,.moon--wax-gib::before{
  background:linear-gradient(90deg,var(--void) 50%,var(--gold) 50%)}
.moon--wan-cres::before,.moon--last::before,.moon--wan-gib::before{
  background:linear-gradient(90deg,var(--gold) 50%,var(--void) 50%)}
.moon--full::before{background:var(--gold)}
.moon--new{background:var(--void);
  box-shadow:0 0 0 1px rgba(230,197,133,.45),0 0 14px rgba(230,197,133,.2)}
.moon--new::before,.moon--new::after{display:none}
/* terminator ellipse: dark eats a crescent, gold fills a gibbous */
.moon--wax-cres::after,.moon--wan-cres::after{background:var(--void);transform:scaleX(.62)}
.moon--wax-gib::after,.moon--wan-gib::after{background:var(--gold);transform:scaleX(.62)}
.moon--first::after,.moon--last::after{transform:scaleX(0)}
.moon--full{box-shadow:0 0 18px rgba(230,197,133,.5)}
.moon--full::after{background:var(--gold);transform:scaleX(1)}
/* ── The Orrery: homepage moon-phase navigation wheel ────────────────────────
   Four moon-phase links ride an engraved gold ring; the artist's invocation
   sits pooled at its centre. Each moon waxes to full and names its page on
   hover / keyboard focus. Collapses to a stacked, always-labelled layout on
   touch / small screens (where there is no hover). */
.orrery{position:relative;width:min(88vw,640px);aspect-ratio:1;margin:0 auto}
/* engraved hairline ring the moons ride on + an inner violet bloom */
.orrery::before{content:"";position:absolute;inset:0;border-radius:50%;
  border:1px solid rgba(230,197,133,.22);
  box-shadow:inset 0 0 80px rgba(124,102,230,.16)}
/* fine tick marks, turning slowly like an orrery */
.orrery::after{content:"";position:absolute;inset:0;border-radius:50%;
  background:repeating-conic-gradient(from 0deg,
    rgba(230,197,133,.55) 0 .35deg,transparent .35deg 7.5deg);
  -webkit-mask:radial-gradient(circle,transparent 0 calc(50% - 9px),
    #000 calc(50% - 9px) calc(50% - 3px),transparent calc(50% - 3px));
          mask:radial-gradient(circle,transparent 0 calc(50% - 9px),
    #000 calc(50% - 9px) calc(50% - 3px),transparent calc(50% - 3px));
  opacity:.5;animation:spin 360s linear infinite}

/* the invocation, pooled at centre for legibility over the ring */
.orrery-core{position:absolute;top:50%;left:50%;translate:-50% -50%;
  width:min(64%,22rem);text-align:center;
  background:radial-gradient(circle,rgba(7,6,13,.92) 55%,rgba(7,6,13,0) 100%)}
.orrery-core .rule{margin-block:0 1rem}
.orrery-core .lede{font-size:clamp(1.1rem,.9rem + .8vw,1.4rem);max-width:none;
  margin-bottom:1rem;color:var(--ink)}
.orrery-core .prose p{font-size:.92rem;line-height:1.6;margin-block:.7rem}

/* moon links riding the ring (positioned on the inscribed circle) */
.dial-moon{position:absolute;display:grid;place-items:center;z-index:2}
.dial-moon--top{top:0;left:50%;transform:translate(-50%,-50%)}
.dial-moon--right{top:50%;left:100%;transform:translate(-50%,-50%)}
.dial-moon--bottom{top:100%;left:50%;transform:translate(-50%,-50%)}
.dial-moon--left{top:50%;left:0;transform:translate(-50%,-50%)}
.dial-moon .moon{width:clamp(40px,7vw,52px);height:clamp(40px,7vw,52px);
  transition:transform .45s var(--ease),box-shadow .45s var(--ease)}
.dial-moon:hover .moon,.dial-moon:focus-visible .moon{transform:scale(1.14);
  box-shadow:0 0 28px rgba(230,197,133,.6)}
.dial-moon:hover .moon::before,.dial-moon:focus-visible .moon::before{background:var(--gold)}
.dial-moon:hover .moon::after,.dial-moon:focus-visible .moon::after{
  background:var(--gold);transform:scaleX(1)}

/* the page name, revealed on hover / focus, set radially outward */
.dial-label{position:absolute;font-family:var(--display);font-size:.7rem;
  font-weight:600;letter-spacing:.24em;text-transform:uppercase;color:var(--gold);
  white-space:nowrap;opacity:0;pointer-events:none;
  transition:opacity .3s var(--ease),transform .3s var(--ease)}
.dial-moon:hover .dial-label,.dial-moon:focus-visible .dial-label{opacity:1}
.dial-moon--top .dial-label{bottom:calc(100% + .5rem);left:50%;transform:translate(-50%,8px)}
.dial-moon--top:hover .dial-label,.dial-moon--top:focus-visible .dial-label{transform:translate(-50%,0)}
.dial-moon--bottom .dial-label{top:calc(100% + .5rem);left:50%;transform:translate(-50%,-8px)}
.dial-moon--bottom:hover .dial-label,.dial-moon--bottom:focus-visible .dial-label{transform:translate(-50%,0)}
.dial-moon--left .dial-label{right:calc(100% + .7rem);top:50%;transform:translate(8px,-50%)}
.dial-moon--left:hover .dial-label,.dial-moon--left:focus-visible .dial-label{transform:translate(0,-50%)}
.dial-moon--right .dial-label{left:calc(100% + .7rem);top:50%;transform:translate(-8px,-50%)}
.dial-moon--right:hover .dial-label,.dial-moon--right:focus-visible .dial-label{transform:translate(0,-50%)}

@keyframes spin{to{transform:rotate(360deg)}}

/* stacked fallback for touch / small screens (no hover, labels always shown) */
@media (max-width:720px){
  .orrery{position:static;width:auto;aspect-ratio:auto;
    display:flex;flex-direction:column;align-items:center;gap:2.4rem}
  .orrery::before,.orrery::after{display:none}
  .orrery-core{position:static;translate:none;width:min(100%,44ch);background:none}
  .dial-moons{display:grid;grid-template-columns:repeat(2,1fr);
    gap:2.2rem 1rem;width:min(100%,22rem)}
  .dial-moon{position:static;transform:none;justify-items:center;
    gap:.55rem;text-align:center}
  .dial-moon .moon{width:46px;height:46px}
  .dial-label{position:static;opacity:1;transform:none;color:var(--ink-dim);
    white-space:normal;line-height:1.3}
}

/* ── Framed plate (featured artwork: outer hairline + inset gold rule) ───── */
.plate{display:block;position:relative;background:var(--void-2);
  border:1px solid var(--line-2)}
.plate::after{content:"";position:absolute;inset:6px;
  border:1px solid rgba(230,197,133,.30);pointer-events:none}
.plate img{display:block;width:100%}

/* ── Interior page header ────────────────────────────────────────────────── */
.page-head{text-align:center;padding-block:clamp(2.5rem,7vw,5rem) 0}
.page-head .kicker{display:block;margin-bottom:1rem}
.page-head h1{font-family:var(--display);font-weight:700;
  font-size:clamp(2rem,1rem + 3.4vw,3.4rem);letter-spacing:.05em;
  text-shadow:0 0 34px rgba(124,102,230,.25)}
.section-title{font-family:var(--display);text-align:center;color:var(--ink);
  font-size:clamp(1.25rem,1rem + 1.5vw,2rem);letter-spacing:.07em;
  margin:clamp(2.5rem,6vw,4rem) 0 1.6rem}
.prose a,.reading a{color:var(--violet);text-decoration:underline;
  text-decoration-color:var(--line-2);text-underline-offset:3px}
.prose a:hover,.reading a:hover{color:var(--gold);text-decoration-color:var(--gold)}

/* ── Gallery (aspect-preserving masonry) ─────────────────────────────────── */
.gallery{columns:4 220px;column-gap:14px}
.gallery a{display:block;break-inside:avoid;margin-bottom:14px;position:relative;
  border:1px solid var(--line);background:var(--void-2);overflow:hidden}
.gallery img{width:100%;display:block;transition:transform .6s var(--ease),
  filter .4s var(--ease);filter:saturate(.92) brightness(.92)}
.gallery a::after{content:"";position:absolute;inset:.5rem;border:1px solid transparent;
  transition:border-color .4s var(--ease);pointer-events:none}
.gallery a:hover img{transform:scale(1.05);filter:saturate(1.05) brightness(1)}
.gallery a:hover::after{border-color:rgba(230,197,133,.55)}
.gallery a:hover{border-color:var(--line-2)}
@media (max-width:680px){.gallery{columns:2 140px;column-gap:8px}
  .gallery a{margin-bottom:8px}}

/* ── Lightbox (driven by site.js) ────────────────────────────────────────── */
.lb{position:fixed;inset:0;z-index:120;display:grid;place-items:center;
  background:rgba(5,4,10,.94);backdrop-filter:blur(8px);
  opacity:0;visibility:hidden;transition:opacity .3s var(--ease),visibility .3s}
.lb.open{opacity:1;visibility:visible}
.lb figure{margin:0;max-width:92vw;max-height:86vh;display:flex;flex-direction:column;
  align-items:center;gap:1rem;transform:scale(.97);transition:transform .3s var(--ease)}
.lb.open figure{transform:scale(1)}
.lb img{max-width:92vw;max-height:78vh;object-fit:contain;
  border:1px solid var(--line-2);outline:1px solid rgba(230,197,133,.25);
  outline-offset:-6px;box-shadow:0 30px 80px -20px #000}
.lb figcaption{font-family:var(--display);font-size:.7rem;letter-spacing:.26em;
  text-transform:uppercase;color:var(--ink-faint)}
.lb button{position:absolute;background:none;border:0;color:var(--ink-dim);
  cursor:pointer;font-family:var(--display);transition:color .2s}
.lb button:hover{color:var(--gold)}
.lb .lb-close{top:24px;right:28px;font-size:1.6rem}
.lb .lb-prev,.lb .lb-next{top:50%;transform:translateY(-50%);font-size:2.4rem;
  padding:1rem}
.lb .lb-prev{left:max(1rem,3vw)}.lb .lb-next{right:max(1rem,3vw)}
.lb .lb-count{bottom:22px;left:50%;transform:translateX(-50%);font-size:.7rem;
  letter-spacing:.3em}
@media (max-width:680px){.lb .lb-prev,.lb .lb-next{font-size:1.7rem;padding:.5rem}}

/* ── Ebook reading (Starlings · Volume 1) ────────────────────────────────── */
.reading{max-width:var(--measure);margin-inline:auto;font-size:1.16rem;
  line-height:1.95;color:#ded7ee}
.reading p{margin-block:1.35rem}
.reading p+p{text-indent:1.6em}
.reading h2,.reading h3{margin:2.6rem 0 1rem;letter-spacing:.04em}
.reading em,.reading i{font-style:italic;color:#cfc6ec}
.reading strong{color:var(--ink);font-weight:600}
.reading blockquote{font-family:var(--accent);font-style:italic;font-size:1.3rem;
  color:var(--gold);border-left:1px solid var(--gold-dim);
  margin:2rem 0;padding-left:1.6rem}
.reading>p:first-of-type{text-indent:0}
.reading:not(.reading-flow)>p:first-of-type::first-letter{
  font-family:var(--display);font-weight:700;font-size:4.4rem;line-height:.82;
  float:left;margin:.18em .14em 0 0;color:var(--gold)}
.scene{border:0;text-align:center;margin:2.6rem 0;color:var(--gold-dim)}
.scene::before{content:"✦   ✦   ✦";letter-spacing:.5em;font-size:.8rem}

/* story / library furniture */
.tags{display:flex;flex-wrap:wrap;gap:.5rem;list-style:none}
.tag{font-family:var(--display);font-size:.62rem;font-weight:600;letter-spacing:.2em;
  text-transform:uppercase;color:var(--ink-dim);border:1px solid var(--line-2);
  padding:.36rem .7rem;border-radius:999px;cursor:pointer;background:transparent;
  transition:.25s var(--ease)}
.tag:hover,.tag[aria-pressed="true"],.tag.active{color:var(--void);
  background:var(--gold);border-color:var(--gold)}
.story-meta{display:flex;flex-wrap:wrap;gap:.6rem 1.4rem;align-items:center;
  font-family:var(--display);font-size:.68rem;letter-spacing:.22em;
  text-transform:uppercase;color:var(--ink-faint)}

.shelf{display:grid;gap:1px;background:var(--line);border:1px solid var(--line)}
.shelf article{background:var(--void);padding:clamp(1.6rem,4vw,2.4rem);
  display:grid;gap:.7rem;transition:background .35s var(--ease)}
.shelf article:hover{background:var(--void-2)}
.shelf h3{font-size:1.6rem}
.shelf h3 a{color:var(--ink)}
.shelf article:hover h3 a{color:var(--gold)}

.story-nav{display:flex;justify-content:space-between;gap:1rem;
  border-top:1px solid var(--line);margin-top:3rem;padding-top:1.5rem;
  font-family:var(--display);font-size:.7rem;letter-spacing:.22em;text-transform:uppercase}

/* ── Reading progress bar (only inserted when an article.reading exists) ── */
.progress-bar{position:fixed;top:var(--head-h);left:0;right:0;height:2px;
  background:var(--gold);transform:scaleX(0);transform-origin:left;
  z-index:70;transition:transform .1s linear;pointer-events:none;
  box-shadow:0 0 12px rgba(230,197,133,.4)}

/* ── "Up next" panel at the end of a chapter ─────────────────────────────── */
.up-next{padding:clamp(2rem,5vw,3rem) 0 0;margin-top:clamp(2.5rem,6vw,4rem);
  border-top:1px solid var(--line)}
.up-next .rule{margin-bottom:1.6rem}
.up-next-card{display:grid;gap:1.2rem;grid-template-columns:1fr;
  background:var(--void);border:1px solid var(--line);
  padding:clamp(1.2rem,3vw,1.8rem);text-decoration:none;
  transition:background .3s var(--ease),border-color .3s var(--ease);
  margin-bottom:1px}
.up-next-card:hover{background:var(--void-2);border-color:var(--line-2)}
@media (min-width:600px){
  .up-next-card{grid-template-columns:180px 1fr;gap:1.6rem;align-items:center}
}
.up-next-cover img{display:block;width:100%;aspect-ratio:4/3;
  object-fit:cover;border:1px solid var(--line)}
.up-next-text{display:flex;flex-direction:column;justify-content:center}
.up-next-text .kicker{display:block;margin-bottom:.4rem}
.up-next-text h3{font-family:var(--display);font-weight:600;
  font-size:clamp(1.3rem,1rem + .8vw,1.6rem);color:var(--ink);margin:0}
.up-next-card:hover .up-next-text h3{color:var(--gold)}
.up-next-text p{color:var(--ink-faint);margin:.5rem 0 0;font-size:.95rem}
.up-next-text .go{display:block;margin-top:.7rem;font-family:var(--display);
  font-size:.7rem;letter-spacing:.26em;text-transform:uppercase;color:var(--gold-dim)}
.up-next-card:hover .up-next-text .go{color:var(--gold)}

/* ── Footer (the ledger) ─────────────────────────────────────────────────── */
.ledger{border-top:1px solid var(--line);padding-block:clamp(2.5rem,6vw,4rem);
  margin-top:clamp(3rem,8vw,6rem);position:relative}
.ledger .wrap{display:flex;flex-wrap:wrap;gap:1.5rem 2.5rem;
  align-items:center;justify-content:space-between}
.ledger nav{display:flex;flex-wrap:wrap;gap:.8rem 1.6rem;
  font-family:var(--display);font-size:.7rem;font-weight:600;letter-spacing:.2em;
  text-transform:uppercase}
.ledger nav a{color:var(--ink-dim)}
.ledger nav a:hover{color:var(--gold)}
.ledger .sig{font-family:var(--accent);font-style:italic;color:var(--ink-faint);
  font-size:1.05rem}

/* ── Motion: page-load + scroll reveals ──────────────────────────────────── */
@keyframes rise{from{opacity:0;transform:translateY(16px);filter:blur(6px)}
  to{opacity:1;transform:none;filter:blur(0)}}
html.js .reveal{opacity:0}
.reveal.seen{animation:rise .95s var(--ease) forwards}
html.js .stagger>*{opacity:0}
.stagger.seen>*{animation:rise .9s var(--ease) forwards}
.stagger.seen>*:nth-child(1){animation-delay:.05s}
.stagger.seen>*:nth-child(2){animation-delay:.14s}
.stagger.seen>*:nth-child(3){animation-delay:.23s}
.stagger.seen>*:nth-child(4){animation-delay:.32s}
.stagger.seen>*:nth-child(5){animation-delay:.41s}
.stagger.seen>*:nth-child(6){animation-delay:.50s}
.stagger.seen>*:nth-child(7){animation-delay:.59s}
.stagger.seen>*:nth-child(8){animation-delay:.68s}

@media (prefers-reduced-motion:reduce){
  .sky::after{animation:none}
  .reveal,.stagger>*{opacity:1!important;animation:none!important}
  .drawer,.lb,.lb figure{transition:opacity .2s linear}
  .drawer a{opacity:1;transform:none;animation:none!important}
  .moon::after{transition:none}
  .orrery::after{animation:none}
}

/* ── Print / save-as-PDF ─────────────────────────────────────────────────
   Strip the dark chrome and switch to ink-on-paper for sensible printed
   pages or browser "Save as PDF" output (especially story pages). */
@media print {
  .sky, .masthead, .drawer, .ledger, .lb,
  .story-nav, .burger, [aria-label="Open menu"] { display:none !important; }
  html, body {
    background:#fff !important; color:#111 !important;
    font-family:Georgia, 'Times New Roman', serif !important;
  }
  main { padding-top:0 !important; }
  a { color:#111 !important; text-decoration:none; }
  h1, h2, h3, h4, .display {
    font-family:Georgia, serif !important; color:#111 !important;
    text-shadow:none !important; letter-spacing:0 !important;
  }
  .kicker { color:#555 !important; }
  .rule, .rule i { color:#999 !important; }
  .reading {
    max-width:none; margin:0 auto; font-size:11pt; line-height:1.55;
    color:#111 !important;
  }
  .reading p, .reading blockquote { color:#111 !important; }
  .reading > p:first-of-type::first-letter {
    color:#111 !important; font-size:3.4rem;
  }
  .reading blockquote { border-left:1px solid #999; font-style:italic; }
  .scene { border:0; text-align:center; }
  .scene::before { content:"✦   ✦   ✦"; letter-spacing:.5em; color:#777; }
  .story-meta, .tags, .tag { color:#555 !important; border-color:#999 !important; }
  .reveal, .stagger, .stagger>* { opacity:1 !important; animation:none !important; }
  .no-print, .page-head .kicker { display:none !important; }
  /* Tags are organizational metadata - hide in the printed text. */
  .tags { display:none !important; }
  /* Reading progress bar and Up-next panel - on-screen UI only. */
  .progress-bar, .up-next { display:none !important; }
  /* Drop the framed-plate look in print (it reads as a colored box on paper). */
  .plate { background:transparent !important; border:none !important;
           outline:none !important; padding:0 !important; }
  .plate::after { display:none !important; }
  .plate img { box-shadow:none !important; }
  /* Disable the on-screen drop cap in print - it misfires when the body's
     first line is short (e.g. "Chapter 1"). */
  .reading > p:first-of-type::first-letter {
    font-family:inherit !important; font-weight:inherit !important;
    font-size:inherit !important; float:none !important;
    margin:0 !important; color:inherit !important; line-height:inherit !important;
  }
  /* On the Read-all page, every chapter <section> starts a fresh page. */
  main > section > .wrap > section[id] { page-break-before:always; }
  h1, h2, h3 { page-break-after:avoid; }
  blockquote, .reading > p { page-break-inside:avoid; }
  @page { margin: 1in; }
}
