/* codex.css — the private Codex: profile ring, the seal, the reader.
   Same locked language: near-black, hairline ink, gold = the only fire. */

/* ── the ring (top right) ─────────────────────────────────────────── */
#codexRing{ position:fixed; top:22px; right:34px; z-index:40;
  width:36px; height:36px; border-radius:50%; cursor:pointer;
  background:rgba(8,11,18,0.55); border:1px solid var(--line-soft);
  display:flex; align-items:center; justify-content:center;
  transition:border-color .3s var(--ease), box-shadow .3s var(--ease); }
#codexRing::before{ content:""; position:absolute; inset:4px; border-radius:50%;
  border:1px dashed rgba(234,240,251,0.14);
  animation:cxOrbit 26s linear infinite; }
#codexRing::after{ content:"codex"; position:absolute; top:calc(100% + 7px); right:0;
  font-size:9px; letter-spacing:.26em; color:var(--faint); text-transform:uppercase;
  opacity:0; transition:opacity .3s var(--ease); pointer-events:none; }
#codexRing .cx-dot{ width:7px; height:7px; border-radius:50%; background:var(--gold-dim);
  transition:background .3s var(--ease), box-shadow .3s var(--ease);
  animation:cxBreathe 4s var(--ease) infinite; }
#codexRing:hover{ border-color:var(--gold-dim); box-shadow:0 0 18px rgba(212,162,76,0.2); }
#codexRing:hover::after{ opacity:1; }
#codexRing:hover .cx-dot{ background:var(--gold); box-shadow:0 0 9px var(--gold-glow); }
@keyframes cxOrbit{ to{ transform:rotate(360deg); } }
@keyframes cxBreathe{ 0%,100%{ opacity:.7; } 50%{ opacity:1; } }

/* ── overlay shell ────────────────────────────────────────────────── */
#codexOverlay{ position:fixed; inset:0; z-index:90;
  background:radial-gradient(120% 100% at 50% 40%, rgba(10,14,24,0.94) 0%, rgba(4,6,10,0.985) 75%);
  backdrop-filter:blur(7px); }
.cx-frame{ position:absolute; inset:3vh 3vw; display:flex; flex-direction:column;
  border:1px solid var(--line-soft); border-radius:14px; background:rgba(6,8,13,0.85);
  overflow:hidden; box-shadow:0 30px 120px rgba(0,0,0,0.55); }
.cx-frame::before, .cx-frame::after{ content:""; position:absolute; width:14px; height:14px;
  pointer-events:none; opacity:.8; }
.cx-frame::before{ top:-1px; left:-1px; border-top:1.5px solid var(--gold-dim);
  border-left:1.5px solid var(--gold-dim); border-top-left-radius:14px; }
.cx-frame::after{ bottom:-1px; right:-1px; border-bottom:1.5px solid var(--gold-dim);
  border-right:1.5px solid var(--gold-dim); border-bottom-right-radius:14px; }
.cx-head{ display:flex; align-items:baseline; gap:16px; padding:16px 22px;
  border-bottom:1px solid var(--line-soft); }
.cx-title{ font-size:12px; letter-spacing:.34em; color:var(--gold); }
.cx-sub{ font-size:10px; letter-spacing:.14em; color:var(--faint); flex:1; }
.cx-sub::before{ content:"▸ "; color:var(--gold-dim); }
.cx-close{ appearance:none; background:none; border:none; color:var(--faint);
  font-size:20px; cursor:pointer; line-height:1; font-family:inherit; padding:0 2px;
  transition:color .25s var(--ease); }
.cx-close:hover{ color:var(--gold); }

/* ── the seal (lock screen) ───────────────────────────────────────── */
.cx-lock{ flex:1; display:flex; align-items:center; justify-content:center; }
.cx-lock-inner{ display:flex; flex-direction:column; align-items:center; gap:18px;
  width:min(440px,88%); }
.cx-seal{ width:188px; height:188px; }
.cx-seal .so{ fill:none; stroke:rgba(234,240,251,0.13); stroke-width:1; }
.cx-seal .so.dash{ stroke-dasharray:2 7; transform-origin:center;
  animation:cxOrbit 70s linear infinite; }
.cx-seal .so.dash2{ stroke-dasharray:1 5; stroke:rgba(212,162,76,0.22);
  transform-origin:center; animation:cxOrbit 110s linear infinite reverse; }
.cx-seal .spoke{ stroke:rgba(234,240,251,0.08); stroke-width:1; }
.cx-seal .core{ fill:var(--gold); filter:drop-shadow(0 0 10px var(--gold-glow));
  animation:cxBreathe 3.4s var(--ease) infinite; }
.cx-seal .satellite{ fill:var(--ink-dim); }
.cx-seal text{ fill:var(--faint); font-size:7.5px; letter-spacing:.32em; }
.cx-lock-line{ font-size:12px; color:var(--ink-dim); letter-spacing:.05em; line-height:1.7;
  text-align:center; max-width:340px; }
.cx-lock-line b{ color:var(--ink); font-weight:500; }
.cx-field{ position:relative; width:100%; display:flex; gap:10px; }
#cxPass{ flex:1; background:rgba(10,14,22,0.6); border:1px solid var(--line-soft);
  border-radius:9px; color:var(--ink); font-family:inherit; font-size:14px;
  padding:13px 15px; outline:none; letter-spacing:.12em; text-align:center;
  transition:border-color .3s var(--ease), box-shadow .3s var(--ease); }
#cxPass:focus{ border-color:var(--gold-dim); box-shadow:0 0 16px rgba(212,162,76,0.1); }
#cxUnlock{ appearance:none; background:none; font-family:inherit; cursor:pointer;
  border:1.2px solid var(--gold); border-radius:9px; color:var(--gold-hi);
  font-size:13px; letter-spacing:.1em; padding:0 22px; white-space:nowrap;
  box-shadow:inset 0 0 10px rgba(212,162,76,0.07);
  transition:background .25s var(--ease), box-shadow .25s var(--ease); }
#cxUnlock:hover{ background:rgba(212,162,76,0.1); box-shadow:0 0 18px rgba(212,162,76,0.22); }
.cx-err{ font-size:11px; color:var(--gold-hi); min-height:15px; letter-spacing:.08em; }

/* wrong passphrase: one short tremor */
.cx-frame.cx-shake{ animation:cxShake .42s var(--ease); }
@keyframes cxShake{ 0%,100%{ transform:translateX(0); } 22%{ transform:translateX(-7px); }
  44%{ transform:translateX(6px); } 66%{ transform:translateX(-4px); } 84%{ transform:translateX(2px); } }
/* unseal: the seal blooms, the lock dissolves */
.cx-lock.cx-opening .cx-seal{ transform:scale(1.5); opacity:0;
  transition:transform .7s var(--ease), opacity .7s var(--ease); }
.cx-lock.cx-opening .cx-lock-line, .cx-lock.cx-opening .cx-field,
.cx-lock.cx-opening .cx-err{ opacity:0; transition:opacity .4s var(--ease); }

/* ── the reader ───────────────────────────────────────────────────── */
.cx-body{ flex:1; display:grid; grid-template-columns:290px 1fr; min-height:0;
  animation:cxFadeIn .6s var(--ease) both; }
.cx-lock[hidden], .cx-body[hidden]{ display:none; }
@keyframes cxFadeIn{ from{ opacity:0; } to{ opacity:1; } }
.cx-nav{ overflow-y:auto; border-right:1px solid var(--line-soft); padding:12px 0 30px;
  scrollbar-width:thin; scrollbar-color:rgba(234,240,251,0.15) transparent; }
.cx-grp{ font-size:9px; letter-spacing:.26em; color:var(--gold-dim); text-transform:uppercase;
  padding:18px 20px 7px; display:flex; align-items:center; gap:9px; }
.cx-grp::after{ content:""; flex:1; height:1px;
  background:linear-gradient(to right, rgba(234,240,251,0.1), transparent); }
.cx-item{ position:relative; display:block; width:100%; text-align:left; appearance:none;
  background:none; border:none; border-left:2px solid transparent; font-family:inherit;
  font-size:12px; color:var(--ink-dim); cursor:pointer; padding:5px 18px;
  letter-spacing:.02em; transition:color .2s var(--ease), border-color .2s var(--ease); }
.cx-item:hover{ color:var(--ink); }
.cx-item.on{ color:var(--gold-hi); border-left-color:var(--gold); }
.cx-read{ overflow-y:auto; padding:30px 40px 70px; font-size:13.5px; line-height:1.75;
  color:var(--ink); scrollbar-width:thin; scrollbar-color:rgba(234,240,251,0.15) transparent; }
.cx-doc-head{ display:flex; align-items:baseline; gap:12px; margin-bottom:18px;
  padding-bottom:12px; border-bottom:1px dashed var(--line-soft); }
.cx-doc-grp{ font-size:9px; letter-spacing:.26em; color:var(--gold-dim); text-transform:uppercase; }
.cx-doc-pos{ font-size:10px; color:var(--faint); letter-spacing:.1em; margin-left:auto; }
.cx-read h1{ font-size:20px; color:var(--gold-hi); margin:20px 0 10px; font-weight:500;
  letter-spacing:.01em; }
.cx-read h2{ font-size:15px; color:var(--ink); margin:26px 0 8px;
  padding-top:14px; border-top:1px dashed rgba(234,240,251,0.08); }
.cx-read h3, .cx-read h4{ font-size:12.5px; color:var(--gold); margin:18px 0 6px;
  letter-spacing:.1em; text-transform:uppercase; }
.cx-read p{ margin:7px 0; color:var(--ink-dim); }
.cx-read li{ color:var(--ink-dim); margin:3px 0; }
.cx-read b{ color:var(--ink); } .cx-read i{ color:var(--ink-dim); }
.cx-read code{ color:var(--gold-hi); font-size:12px; background:rgba(212,162,76,0.06);
  padding:1px 5px; border-radius:4px; }
.cx-read pre{ background:rgba(10,14,22,0.6); border:1px solid var(--line-soft);
  border-radius:9px; padding:13px; overflow-x:auto; font-size:11.5px; line-height:1.55; }
.cx-read pre code{ background:none; padding:0; }
.cx-read table{ border-collapse:collapse; margin:12px 0; font-size:11.5px; width:100%; }
.cx-read td{ border:1px solid rgba(234,240,251,0.09); padding:6px 9px; vertical-align:top;
  color:var(--ink-dim); }
.cx-read tr:first-child td{ color:var(--gold); letter-spacing:.08em; font-size:10.5px;
  text-transform:uppercase; background:rgba(212,162,76,0.04); }
.cx-read blockquote{ border-left:2px solid var(--gold-dim); margin:12px 0; padding:4px 16px;
  color:var(--faint); }
.cx-read hr{ border:none; border-top:1px dashed var(--line-soft); margin:22px 0; }
.cx-read a{ color:var(--gold); text-decoration:none; border-bottom:1px dotted var(--gold-dim); }
.cx-pager{ display:flex; align-items:center; justify-content:space-between; gap:14px;
  margin-top:36px; padding-top:16px; border-top:1px dashed var(--line-soft); }
.cx-pager button{ appearance:none; background:none; border:1px solid var(--line-soft);
  border-radius:8px; color:var(--ink-dim); font-family:inherit; font-size:11px;
  letter-spacing:.08em; padding:8px 16px; cursor:pointer;
  transition:color .2s var(--ease), border-color .2s var(--ease); }
.cx-pager button:hover{ color:var(--gold-hi); border-color:var(--gold-dim); }
.cx-pager button:disabled{ opacity:.3; cursor:default; }
.cx-pager .cx-pos{ font-size:10px; color:var(--faint); letter-spacing:.14em; }

/* ── the authored book chapters (raw fragments) ───────────────────── */
.cx-read .cx-plate{ margin:8px 0 26px; padding:26px 24px; border:1px dashed var(--line-soft);
  border-radius:12px; background:rgba(10,14,22,0.35); position:relative; }
.cx-read .cx-plate::after{ content:""; position:absolute; top:-1px; right:-1px;
  width:12px; height:12px; border-top:1.5px solid var(--gold); border-right:1.5px solid var(--gold); }
.cx-read .cx-plate h1{ margin:4px 0 6px; }
.cx-read .cx-plate .cx-era-num{ font-size:42px; color:rgba(212,162,76,0.32);
  letter-spacing:.06em; line-height:1; display:block; }
.cx-read .cx-plate .cx-years{ font-size:10px; letter-spacing:.3em; color:var(--faint);
  text-transform:uppercase; }
.cx-read figure.cx-fig, .cx-read .cx-fig{ margin:22px 0; padding:18px;
  border:1px solid rgba(234,240,251,0.07); border-radius:10px;
  background:rgba(8,11,18,0.45); }
.cx-read .cx-fig svg{ display:block; width:100%; height:auto; max-height:520px; }
.cx-read .cx-fig--plate{ padding:20px; }
.cx-read .cx-fig--plate svg{ max-height:680px; }
.cx-read .cx-fig figcaption{ margin-top:10px; font-size:10px; letter-spacing:.18em;
  color:var(--faint); text-transform:uppercase; text-align:center; }
.cx-read .cx-src{ margin-top:24px; font-size:10px; color:var(--faint); letter-spacing:.1em;
  border-top:1px dashed rgba(234,240,251,0.08); padding-top:10px; }
.cx-read .cx-plate + p::first-letter{ color:var(--gold-hi); font-size:30px; line-height:1;
  padding-right:2px; }

/* ── reduced motion ───────────────────────────────────────────────── */
@media (prefers-reduced-motion: reduce){
  #codexRing::before, .cx-seal .so.dash, .cx-seal .so.dash2{ animation:none; }
  #codexRing .cx-dot, .cx-seal .core{ animation:none; }
  .cx-frame.cx-shake{ animation:none; }
}
html.reduced-motion #codexRing::before, html.reduced-motion .cx-seal .so.dash,
html.reduced-motion .cx-seal .so.dash2, html.reduced-motion .cx-seal .core{ animation:none; }

/* ── mobile ───────────────────────────────────────────────────────── */
@media (max-width:760px){
  #codexRing{ top:auto; bottom:16px; left:16px; right:auto; }
  #codexRing::after{ top:auto; bottom:calc(100% + 7px); right:auto; left:0; }
  .cx-frame{ inset:0; border-radius:0; }
  .cx-frame::before, .cx-frame::after{ display:none; }
  /* lock: stack the field so the unseal button can't overflow the viewport */
  .cx-field{ flex-direction:column; gap:11px; }
  #cxPass{ min-width:0; }
  #cxUnlock{ padding:13px 22px; width:100%; }
  /* reader: taller nav (more of the 27 chapters visible) above the page */
  .cx-body{ grid-template-columns:1fr; grid-template-rows:32vh 1fr; }
  .cx-nav{ border-right:none; border-bottom:1px solid var(--line-soft); }
  .cx-read{ padding:20px 18px 70px; }
  .cx-seal{ width:150px; height:150px; }
}
