/* ==========================================================================
   Theodora’s Field Guide — “Fortune’s Weave” design system
   Dark teal & gold ornament (after Nintendo’s official page), per-route
   lord palettes, woven-thread motifs. No external requests.
   ========================================================================== */

@font-face{font-family:"Cinzel";src:url(fonts/cinzel-latin-600-normal.woff2) format("woff2");font-weight:600;font-style:normal;font-display:swap}
@font-face{font-family:"Cinzel";src:url(fonts/cinzel-latin-700-normal.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap}
@font-face{font-family:"Cormorant Garamond";src:url(fonts/cormorant-garamond-latin-600-normal.woff2) format("woff2");font-weight:600;font-style:normal;font-display:swap}
@font-face{font-family:"Cormorant Garamond";src:url(fonts/cormorant-garamond-latin-700-normal.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap}
@font-face{font-family:"Cormorant Garamond";src:url(fonts/cormorant-garamond-latin-600-italic.woff2) format("woff2");font-weight:600 700;font-style:italic;font-display:swap}

/* Registered colours so route palettes cross-fade (Safari 16.4+, Chrome). */
@property --bg-0{syntax:"<color>";inherits:true;initial-value:#061719}
@property --bg-1{syntax:"<color>";inherits:true;initial-value:#0b272b}
@property --glow{syntax:"<color>";inherits:true;initial-value:#2f8f86}
@property --glow-2{syntax:"<color>";inherits:true;initial-value:#d9a64a}

:root{
  color-scheme:dark;
  --ivory:#f7eed8; --text:#efe6cf; --muted:#b9ad90; --faint:#8c836c;
  --gold-hi:#fff1c4; --gold:#e2c27a; --gold-2:#c9a24f; --gold-3:#8e6c2c;
  --line:rgba(226,194,122,.2); --line-2:rgba(226,194,122,.42);
  --bg-0:#061719; --bg-1:#0b272b; --glow:#2f8f86; --glow-2:#d9a64a;
  --card:color-mix(in oklab,var(--bg-1) 62%,#020607 38%);
  --display:"Cormorant Garamond","Iowan Old Style","Palatino Linotype",Georgia,serif;
  --caps:"Cinzel","Trajan Pro","Iowan Old Style",Georgia,serif;
  --ui:-apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI",Roboto,"Helvetica Neue",sans-serif;
  --ease-out:cubic-bezier(.16,1,.3,1);
  --spring:cubic-bezier(.34,1.56,.64,1);
  --gutter:16px;
  --gold-grad:linear-gradient(160deg,#fff4cf 0%,#e9cd88 38%,#c79d4b 72%,#8e6c2c 100%);
  --ornament:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180' viewBox='0 0 180 180' fill='none' stroke='%23e2c27a' stroke-width='.7'%3E%3Cpath d='M90 6 174 90 90 174 6 90Z' opacity='.55'/%3E%3Cpath d='M90 46 134 90 90 134 46 90Z' stroke-dasharray='3 5' opacity='.5'/%3E%3Ccircle cx='0' cy='90' r='62' opacity='.32'/%3E%3Ccircle cx='180' cy='90' r='62' opacity='.32'/%3E%3Ccircle cx='6' cy='90' r='2.4' opacity='.7'/%3E%3Ccircle cx='174' cy='90' r='2.4' opacity='.7'/%3E%3Cpath d='M90 79l2.2 8.8 8.8 2.2-8.8 2.2L90 101l-2.2-8.8L79 90l8.8-2.2Z' fill='%23e2c27a' stroke='none' opacity='.55'/%3E%3Cpath d='M0 0h20M160 0h20M0 180h20M160 180h20' stroke-dasharray='4 4' opacity='.45'/%3E%3C/svg%3E");
}
html{transition:--bg-0 .8s ease,--bg-1 .8s ease,--glow .8s ease,--glow-2 .8s ease;background:var(--bg-0);-webkit-text-size-adjust:100%;text-size-adjust:100%}
/* Lord palettes (used when the Missables view is active). */
html[data-theme="Cai"]{--bg-0:#070a1f;--bg-1:#131a4a;--glow:#a87bff;--glow-2:#4f7dff}
html[data-theme="Dietrich"]{--bg-0:#06080d;--bg-1:#161d2d;--glow:#d23a4c;--glow-2:#a9b8dc}
html[data-theme="Theodora"]{--bg-0:#120806;--bg-1:#30160e;--glow:#e8ac4c;--glow-2:#c22a33}
html[data-theme="Leda"]{--bg-0:#160409;--bg-1:#3b0d16;--glow:#ff5b47;--glow-2:#35b8a6}

*,*::before,*::after{box-sizing:border-box}
html,body{overscroll-behavior-x:none}
body{margin:0;min-height:100dvh;color:var(--text);background:var(--bg-0);font:15px/1.5 var(--ui);-webkit-font-smoothing:antialiased;overflow-x:hidden}
/* Covers content scrolling beneath a translucent iOS status bar (Home Screen mode). */
body::before{content:"";position:fixed;z-index:40;top:0;left:0;right:0;height:env(safe-area-inset-top);background:var(--bg-0);pointer-events:none}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer;-webkit-tap-highlight-color:transparent;touch-action:manipulation}
a{color:var(--gold-hi);text-decoration-color:rgba(226,194,122,.5);text-underline-offset:3px}
h1,h2,h3,p{margin-top:0}
h1,h2,h3{font-family:var(--display);font-weight:600;letter-spacing:.005em}
:focus-visible{outline:2px solid var(--gold-hi);outline-offset:3px;border-radius:8px}
[hidden]{display:none!important}
.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.ico{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;flex:none}

/* ---------- Living backdrop ---------- */
.backdrop{position:fixed;inset:0;z-index:0;pointer-events:none;background:linear-gradient(180deg,var(--bg-1) 0%,var(--bg-0) 62%)}
.backdrop-glow{position:absolute;inset:0;background:
  radial-gradient(90% 55% at 88% -6%,color-mix(in oklab,var(--glow) 38%,transparent),transparent 70%),
  radial-gradient(70% 45% at -12% 38%,color-mix(in oklab,var(--glow-2) 16%,transparent),transparent 72%),
  radial-gradient(80% 40% at 50% 112%,color-mix(in oklab,var(--glow) 14%,transparent),transparent 70%)}
.backdrop-ornament{position:absolute;inset:0;background-image:var(--ornament);background-size:180px 180px;opacity:.14;
  -webkit-mask-image:radial-gradient(120% 80% at 50% 0%,#000 30%,transparent 85%);mask-image:radial-gradient(120% 80% at 50% 0%,#000 30%,transparent 85%)}
.backdrop::after{content:"";position:absolute;inset:0;background:radial-gradient(140% 90% at 50% 40%,transparent 55%,rgba(0,0,0,.55))}

main{position:relative;z-index:1;max-width:1080px;margin:0 auto;padding:0 var(--gutter) calc(112px + env(safe-area-inset-bottom))}
.view:not([hidden]){animation:view-in .5s var(--ease-out) both}

/* ---------- Shared type ---------- */
.eyebrow{display:flex;align-items:center;gap:8px;margin:0 0 6px;font:600 11px/1.25 var(--caps);letter-spacing:.2em;text-transform:uppercase;color:var(--gold)}
.eyebrow-gem{width:7px;height:7px;transform:rotate(45deg);background:var(--gold);box-shadow:0 0 10px var(--gold);flex:none}
.note{font-size:12.5px;line-height:1.6;color:var(--muted);margin:12px 0 0}

/* ---------- Motes (gold dust) ---------- */
.motes{position:absolute;inset:0;z-index:1;overflow:hidden;pointer-events:none}
.motes i{position:absolute;left:var(--x);bottom:-12px;width:var(--s);height:var(--s);border-radius:50%;
  background:radial-gradient(circle,#fff6d6 0,#f0cf80 35%,rgba(226,194,122,0) 70%);opacity:0;
  animation:mote var(--d) linear var(--delay) infinite;will-change:transform,opacity}
@keyframes mote{0%{transform:translate3d(0,0,0) scale(.6);opacity:0}12%{opacity:var(--o)}75%{opacity:var(--o)}100%{transform:translate3d(var(--dx),-360px,0) scale(1);opacity:0}}

/* ---------- Hero ---------- */
.hero{position:relative;isolation:isolate;overflow:hidden;display:flex;align-items:flex-end;
  margin:0 calc(-1*var(--gutter));min-height:calc(412px + env(safe-area-inset-top));
  padding:calc(env(safe-area-inset-top) + 28px) var(--gutter) 20px}
.hero::before{content:"";position:absolute;z-index:-2;inset:-10% -20% 25% 25%;background:radial-gradient(closest-side,color-mix(in oklab,var(--glow-2) 34%,transparent),transparent);filter:blur(6px)}
.hero-art-wrap{position:absolute;z-index:-1;inset:0 0 0 12%;
  -webkit-mask-image:linear-gradient(90deg,transparent 0%,#000 46%),linear-gradient(180deg,#000 0%,#000 36%,rgba(0,0,0,.5) 57%,transparent 75%);-webkit-mask-composite:source-in;
  mask-image:linear-gradient(90deg,transparent 0%,#000 46%),linear-gradient(180deg,#000 0%,#000 36%,rgba(0,0,0,.5) 57%,transparent 75%);mask-composite:intersect}
.hero-art{display:block;width:100%;height:100%;object-fit:cover;object-position:48% 50%;translate:0 -25%;filter:saturate(.95) contrast(1.06) brightness(.92);transform-origin:55% 30%;animation:kenburns 28s ease-in-out infinite alternate}
.hero-copy{position:relative;z-index:2;width:100%}
.hero-copy::before,.lord-copy::before{content:"";position:absolute;z-index:-1;left:calc(-1*var(--gutter));right:-25%;top:-80px;bottom:-30px;pointer-events:none;
  background:radial-gradient(85% 75% at 14% 48%,rgba(2,8,9,.74) 0%,rgba(2,8,9,.42) 52%,transparent 78%)}
.hero .eyebrow,.lord-copy .eyebrow{text-shadow:0 0 2px rgba(0,0,0,.95),0 1px 3px rgba(0,0,0,.9),0 0 14px rgba(0,0,0,.8)}
/* Small labels over artwork sit in a dark tag so they stay legible on any frame. */
.hero .eyebrow,.lord-copy .eyebrow{display:inline-flex;max-width:100%;padding:6px 12px 6px 10px;border-radius:999px;letter-spacing:.16em;color:var(--gold-hi);
  background:rgba(4,12,13,.76);border:1px solid rgba(226,194,122,.3);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);box-shadow:0 6px 16px -10px #000}
.hero h1{margin:4px 0 8px;line-height:.95;text-shadow:0 2px 24px rgba(0,0,0,.65)}
.h1-small{display:block;font:italic 600 26px/1 var(--display);color:var(--gold);margin-left:2px}
.h1-big{display:block;font:700 37px/1.02 var(--caps);letter-spacing:.05em;text-transform:uppercase;
  background:linear-gradient(100deg,#fff6dc 0%,#f2d690 30%,#fff6dc 45%,#d7ae5a 60%,#f6e1a6 100%);background-size:220% 100%;
  -webkit-background-clip:text;background-clip:text;color:transparent;animation:sheen-text 7s ease-in-out 1.2s infinite;
  filter:drop-shadow(0 3px 14px rgba(0,0,0,.55))}
.subtitle{font:italic 600 17px/1.35 var(--display);color:#e6dcc2;margin:0 0 16px;text-shadow:0 1px 12px rgba(0,0,0,.7)}
.hero-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.stat{display:grid;justify-items:start;gap:3px;min-height:58px;padding:9px 12px;border-radius:14px;text-align:left;
  border:1px solid var(--line);background:linear-gradient(160deg,rgba(255,240,200,.09),rgba(255,240,200,.02)),color-mix(in oklab,var(--bg-0) 70%,transparent);
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:inset 0 1px 0 rgba(255,241,196,.1);transition:transform .25s var(--spring),border-color .3s}
.stat:active{transform:scale(.96)}
.stat b{font:700 26px/1 var(--display);color:var(--gold-hi);font-variant-numeric:lining-nums}
.stat span{font:600 11px/1.1 var(--ui);letter-spacing:.06em;text-transform:uppercase;color:#d2c6a8}
.hero-bar{margin-top:12px}

/* Woven progress thread */
.weave-bar{position:relative;height:7px;border-radius:7px;overflow:hidden;border:1px solid var(--line);
  background:repeating-linear-gradient(-45deg,rgba(226,194,122,.16) 0 3px,rgba(226,194,122,.04) 3px 6px),rgba(0,0,0,.25)}
.weave-bar i{position:absolute;inset:0 auto 0 0;width:var(--p,0%);border-radius:7px;background:linear-gradient(90deg,var(--gold-3),var(--gold) 60%,var(--gold-hi));
  box-shadow:0 0 12px rgba(226,194,122,.8);transition:width .9s var(--ease-out);overflow:hidden}
.weave-bar i::after{content:"";position:absolute;inset:0;background:linear-gradient(100deg,transparent 30%,rgba(255,255,255,.75) 50%,transparent 70%);transform:translateX(-120%);animation:sweep 3.6s ease-in-out 1s infinite}

/* ---------- Toolbar ---------- */
.toolbar{position:sticky;top:env(safe-area-inset-top);z-index:8;margin:0 calc(-1*var(--gutter));padding:10px var(--gutter);
  border-bottom:1px solid transparent;transition:border-color .3s,box-shadow .3s,background-color .3s}
.toolbar.stuck{background:color-mix(in oklab,var(--bg-0) 84%,transparent);-webkit-backdrop-filter:blur(16px) saturate(1.3);backdrop-filter:blur(16px) saturate(1.3);border-bottom-color:var(--line);box-shadow:0 12px 24px -18px #000}
/* An open filter panel is taller than a small phone, so it scrolls with the page instead of sticking. */
.toolbar:has(#filters:not([hidden])){position:relative;top:auto;background:color-mix(in oklab,var(--bg-0) 90%,transparent);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}
.stat b,.numbers b,.medal b,.chapter-num,.lord-count b,.ring-wrap b,#count,#missables-progress{font-variant-numeric:lining-nums tabular-nums}
.searchrow{display:flex;gap:8px}
.searchbox{display:flex;align-items:center;gap:9px;flex:1;min-width:0;padding:0 13px;border-radius:15px;border:1px solid var(--line);
  background:rgba(0,0,0,.28);box-shadow:inset 0 1px 6px rgba(0,0,0,.35);color:var(--gold);transition:border-color .25s,box-shadow .25s}
.searchbox:focus-within{border-color:var(--line-2);box-shadow:inset 0 1px 6px rgba(0,0,0,.35),0 0 0 3px rgba(226,194,122,.12)}
.searchbox input{flex:1;min-width:0;min-height:48px;border:0;background:transparent;font-size:16px;color:var(--ivory);outline:0}
.searchbox input::placeholder{color:var(--faint)}
.searchbox input::-webkit-search-cancel-button{filter:invert(.8) sepia(1) saturate(2) hue-rotate(5deg)}
.iconbtn,.ghostbtn{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:48px;padding:0 15px;border-radius:15px;border:1px solid var(--line-2);
  background:linear-gradient(180deg,rgba(255,240,200,.08),rgba(255,240,200,.02));color:var(--gold-hi);font:600 11.5px/1.15 var(--caps);letter-spacing:.1em;text-transform:uppercase;
  box-shadow:inset 0 1px 0 rgba(255,241,196,.08);transition:transform .2s var(--spring),background .25s}
.iconbtn:active,.ghostbtn:active{transform:scale(.96)}
.iconbtn[aria-expanded="true"]{background:rgba(226,194,122,.16)}
#filters-toggle{position:relative}
.filter-dot{position:absolute;top:9px;right:9px;width:7px;height:7px;transform:rotate(45deg);background:var(--gold);box-shadow:0 0 8px var(--gold)}
.filters{padding:14px 0 4px;animation:drop .35s var(--ease-out)}
.filtergrid{display:grid;grid-template-columns:1fr 1fr;gap:12px;align-items:end}
.filtergrid label{display:grid;gap:7px;min-width:0;font:600 11px/1 var(--caps);letter-spacing:.12em;text-transform:uppercase;color:var(--gold)}
select{appearance:none;-webkit-appearance:none;display:block;width:100%;min-width:0;min-height:48px;padding:0 34px 0 13px;border-radius:13px;border:1px solid var(--line);
  background:rgba(0,0,0,.3) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23e2c27a' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") no-repeat right 11px center/15px;
  color:var(--ivory);font:500 16px/1.2 var(--ui);letter-spacing:0;text-transform:none}
select option{background:#0b272b;color:#efe6cf}
.textbutton{border:0;background:none;color:var(--muted);text-decoration:underline;text-decoration-color:rgba(226,194,122,.4);text-underline-offset:3px;padding:12px 0 6px;font-size:13px;min-height:44px}

/* ---------- List header ---------- */
.listmeta{display:flex;justify-content:space-between;align-items:baseline;gap:12px;margin:18px 0 0}
.listmeta h2{font:600 29px/1.1 var(--display);margin:0;color:var(--ivory)}
#count{font:600 11px/1 var(--caps);letter-spacing:.12em;color:var(--muted);white-space:nowrap}
.legend{display:flex;flex-wrap:wrap;justify-content:space-between;gap:6px 14px;margin:8px 0 14px;padding-bottom:12px;font-size:11.5px;color:var(--muted);
  border-bottom:1px solid;border-image:linear-gradient(90deg,transparent,var(--line-2),transparent) 1}
.legend span{display:inline-flex;align-items:center;gap:6px}

/* ---------- Roster cards ---------- */
#cards{display:grid;grid-template-columns:1fr;gap:12px}
.card{position:relative;border-radius:20px;overflow:hidden;border:1px solid var(--line);
  background:linear-gradient(155deg,rgba(255,240,200,.075),rgba(255,240,200,.012) 42%),var(--card);
  box-shadow:inset 0 1px 0 rgba(255,241,196,.1),0 22px 34px -26px #000;
  animation:rise .6s var(--ease-out) both;animation-delay:calc(min(var(--i,0),14) * 38ms);transition:transform .25s var(--spring),border-color .35s,box-shadow .35s}
.card::after{content:"";position:absolute;inset:7px;border-radius:14px;pointer-events:none;opacity:.55;
  background:linear-gradient(var(--gold),var(--gold)) top left/11px 1px no-repeat,linear-gradient(var(--gold),var(--gold)) top left/1px 11px no-repeat,
             linear-gradient(var(--gold),var(--gold)) bottom right/11px 1px no-repeat,linear-gradient(var(--gold),var(--gold)) bottom right/1px 11px no-repeat}
.card:has(.open-card:active){transform:scale(.985)}
.open-card{display:flex;align-items:center;gap:14px;width:100%;padding:15px 54px 10px 15px;border:0;background:none;text-align:left;color:inherit}
.pf{position:relative;flex:none;width:68px;height:82px;padding:2px;border-radius:13px;background:var(--gold-grad);box-shadow:0 8px 18px -10px #000,0 0 0 1px rgba(0,0,0,.45)}
.pf img{display:block;width:100%;height:100%;object-fit:cover;object-position:top;border-radius:11px;
  background:radial-gradient(circle at 50% 28%,color-mix(in oklab,var(--glow) 40%,#173236),#081719 75%)}
.pf::after{content:"";position:absolute;inset:2px;border-radius:11px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.35),inset 0 -18px 22px -14px rgba(0,0,0,.55);pointer-events:none}
.seal-badge{position:absolute;z-index:2;right:-7px;bottom:-7px;width:26px;height:26px;filter:drop-shadow(0 2px 6px rgba(0,0,0,.6))}
#cards.no-anim .card,#missables-list.no-anim .missable-row{animation:none}
.listmeta{scroll-margin-top:calc(env(safe-area-inset-top) + 82px)}
.seal-badge .ico{width:26px;height:26px;fill:var(--gold);stroke:#1b1306;stroke-width:1.4}
.cardtext{min-width:0}
.card h2{margin:0;font:700 26px/1.02 var(--display);color:var(--ivory);letter-spacing:.005em}
.status{display:inline-flex;align-items:center;gap:7px;margin-top:7px;font:600 11px/1.15 var(--caps);letter-spacing:.09em;text-transform:uppercase;color:var(--gold)}
.status::before{content:"";width:6px;height:6px;transform:rotate(45deg);background:currentColor;box-shadow:0 0 8px currentColor;flex:none}
.s-auto{color:#78d5c6}.s-tutorial{color:#9fc5ff}.s-no{color:#d9a196}
.recruited-mark{display:inline-flex;align-items:center;gap:4px;margin-left:8px;padding:2px 7px 2px 5px;border-radius:999px;font:700 11px/1.35 var(--ui);letter-spacing:.04em;text-transform:uppercase;color:#1b1306;background:var(--gold-grad);vertical-align:1px}
.recruited-mark .ico{width:11px;height:11px;stroke-width:2.6}
.numbers{display:flex;flex-wrap:wrap;gap:6px 16px;align-items:baseline;margin:9px 0 0;font:600 11px/1 var(--ui);letter-spacing:.05em;text-transform:uppercase;color:#cfc3a5}
.numbers>span{white-space:nowrap}
.numbers b{margin-left:6px;font:700 20px/1 var(--display);letter-spacing:0;color:var(--gold-hi)}
.star{position:absolute;z-index:2;top:9px;right:7px;display:grid;place-items:center;width:46px;height:46px;border:0;border-radius:50%;background:none;color:var(--gold)}
.star .ico{width:26px;height:26px;stroke-width:1.5;transition:transform .3s var(--spring)}
.star[aria-pressed="true"] .ico{fill:var(--gold);stroke:var(--gold-hi);filter:drop-shadow(0 0 8px rgba(226,194,122,.85))}
.star.pop .ico{animation:pop .5s var(--spring)}
.star.pop::before,.star.pop::after{content:"";position:absolute;inset:6px;border-radius:50%;border:1.5px solid var(--gold);animation:ring .55s ease-out forwards;pointer-events:none}
.star.pop::after{inset:0;border-style:dotted;border-width:2px;animation-delay:.06s}
.chips{display:flex;flex-wrap:wrap;gap:6px;padding:0 15px 15px 97px}
.chip{display:inline-flex;align-items:center;gap:7px;padding:3px 4px 3px 10px;border-radius:999px;border:1px solid rgba(226,194,122,.2);background:rgba(255,240,200,.05);font:500 12px/1.3 var(--ui);color:var(--text);white-space:nowrap}
.unknown{font:italic 600 14px/1.3 var(--display);color:var(--muted)}
.rank-gem{display:inline-grid;place-items:center;width:22px;height:22px;font:700 11px/1 var(--caps);color:#1b1306;clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);flex:none}
.r-A{background:linear-gradient(160deg,#fff4cf,#e7c779 50%,#a9843f)}
.r-B{background:linear-gradient(160deg,#ffffff,#cdd5df 50%,#8a94a4)}
.r-C{background:linear-gradient(160deg,#ffe0c2,#cf9161 50%,#8a5530)}
.r-S{background:linear-gradient(160deg,#ffe3f4,#e48bc0 50%,#93407a)}
.card.is-recruited{border-color:rgba(226,194,122,.5);box-shadow:inset 0 0 0 1px rgba(226,194,122,.14),0 0 30px -14px rgba(226,194,122,.6),0 22px 34px -26px #000}
.card.is-recruited::before{content:"";position:absolute;inset:0;pointer-events:none;background:radial-gradient(70% 90% at 0% 0%,rgba(226,194,122,.12),transparent 60%)}

/* ---------- Empty / warnings / end ---------- */
.empty{text-align:center;padding:34px 18px;color:var(--muted)}
.empty-crest{display:inline-grid;place-items:center;width:64px;height:64px;transform:rotate(45deg);border:1px solid var(--line-2);border-radius:14px;margin-bottom:14px;background:rgba(226,194,122,.06)}
.empty-crest .ico{transform:rotate(-45deg);width:28px;height:28px;color:var(--gold)}
.empty h2{font-size:26px;margin:6px 0;color:var(--ivory)}
.empty .ghostbtn{margin-top:6px}
.warning{margin:12px 0;padding:12px 14px;border-radius:14px;border:1px solid rgba(232,172,76,.55);background:linear-gradient(160deg,rgba(232,172,76,.18),rgba(232,172,76,.06));color:#f6e2b6;font-size:13px}
.endnote{text-align:center;color:var(--faint);font-size:11.5px;line-height:1.9;margin:28px 0 0}
.end-orn{display:block;width:120px;height:14px;margin:0 auto 10px;background:
  linear-gradient(90deg,transparent,var(--gold-2)) left center/50px 1px no-repeat,linear-gradient(90deg,var(--gold-2),transparent) right center/50px 1px no-repeat,
  url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14'%3E%3Cpath d='M7 0l1.6 5.4L14 7l-5.4 1.6L7 14l-1.6-5.4L0 7l5.4-1.6Z' fill='%23e2c27a'/%3E%3C/svg%3E") center/14px no-repeat}

/* ---------- Buttons ---------- */
.goldbtn{position:relative;overflow:hidden;display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:50px;padding:0 18px;border-radius:15px;border:1px solid #f6e2a8;
  background:linear-gradient(180deg,#f8e7b0 0%,#e0bc6a 48%,#b48a39 100%);color:#1b1306;font:700 11.5px/1.15 var(--caps);letter-spacing:.1em;text-transform:uppercase;
  box-shadow:0 10px 24px -12px rgba(226,194,122,.9),inset 0 1px 0 rgba(255,255,255,.65),inset 0 -2px 0 rgba(90,60,10,.25);transition:transform .2s var(--spring),filter .2s}
.goldbtn:active{transform:scale(.97);filter:brightness(.95)}
.goldbtn::after{content:"";position:absolute;inset:0;background:linear-gradient(100deg,transparent 35%,rgba(255,255,255,.65) 50%,transparent 65%);transform:translateX(-130%);animation:sweep 4.5s ease-in-out 1.5s infinite}
.goldbtn .ico{stroke-width:2}

/* ---------- Dock navigation ---------- */
.bottomnav{position:fixed;z-index:30;left:50%;bottom:calc(10px + env(safe-area-inset-bottom));transform:translateX(-50%);
  display:flex;width:min(calc(100% - 20px),520px);padding:6px;border-radius:26px;border:1px solid var(--line);
  background:color-mix(in oklab,var(--bg-0) 70%,transparent);-webkit-backdrop-filter:blur(22px) saturate(1.6);backdrop-filter:blur(22px) saturate(1.6);
  box-shadow:0 22px 44px -14px rgba(0,0,0,.8),inset 0 1px 0 rgba(255,241,196,.09)}
.bottomnav button{position:relative;z-index:1;flex:1;min-width:0;min-height:56px;padding:6px 0 4px;border:0;border-radius:20px;background:none;color:var(--muted);
  display:grid;justify-items:center;align-content:center;gap:4px;font:600 11px/1.1 var(--ui);letter-spacing:.01em;transition:color .35s}
.bottomnav button .ico{width:23px;height:23px;transition:transform .45s var(--spring),filter .35s}
.bottomnav button[aria-current]{color:var(--gold-hi)}
.bottomnav button[aria-current] .ico{transform:translateY(-1px) scale(1.06);filter:drop-shadow(0 0 7px rgba(226,194,122,.75))}
.bottomnav button span{max-width:100%;overflow:hidden;text-overflow:clip;white-space:nowrap}
.nav-ink{position:absolute;z-index:0;top:6px;bottom:6px;left:0;width:var(--w,64px);transform:translateX(var(--x,6px));border-radius:20px;opacity:0;
  border:1px solid rgba(226,194,122,.38);background:radial-gradient(120% 110% at 50% 0%,rgba(226,194,122,.3),rgba(226,194,122,.05) 72%);
  transition:transform .55s var(--spring),width .55s var(--spring),opacity .3s}
.nav-ink.ready{opacity:1}
.nav-ink::before{content:"";position:absolute;top:-4.5px;left:50%;width:8px;height:8px;margin-left:-4px;transform:rotate(45deg);background:var(--gold);box-shadow:0 0 10px var(--gold)}

/* ---------- Toast ---------- */
.toast{position:fixed;z-index:60;left:50%;bottom:calc(92px + env(safe-area-inset-bottom));transform:translateX(-50%);max-width:calc(100% - 40px);
  padding:11px 18px;border-radius:999px;border:1px solid var(--line-2);background:color-mix(in oklab,var(--bg-0) 82%,transparent);
  -webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);color:var(--gold-hi);font:600 11.5px/1.3 var(--caps);letter-spacing:.1em;text-transform:uppercase;text-align:center;
  box-shadow:0 14px 30px -12px #000;animation:toast-in .4s var(--spring)}

/* ---------- Bottom sheets ---------- */
dialog.sheet{position:fixed;inset:auto 0 0 0;margin:0 auto;width:100%;max-width:580px;max-height:min(90dvh,900px);padding:0 20px calc(24px + env(safe-area-inset-bottom));
  border:1px solid var(--line-2);border-bottom:0;border-radius:28px 28px 0 0;color:var(--text);overflow-y:auto;overscroll-behavior:contain;
  background:linear-gradient(180deg,color-mix(in oklab,var(--bg-1) 88%,#000 12%) 0,var(--bg-0) 70%);
  box-shadow:0 -24px 70px rgba(0,0,0,.65),inset 0 1px 0 rgba(255,241,196,.14)}
dialog.sheet[open]{animation:sheet-in .5s var(--ease-out)}
dialog.sheet.closing{animation:sheet-out .24s cubic-bezier(.5,0,.75,0) forwards}
dialog.sheet.dragging{animation:none;transition:none}
dialog.sheet::backdrop{background:rgba(1,6,7,.6);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
dialog.sheet::before{content:"";position:absolute;inset:0 0 auto 0;height:220px;pointer-events:none;background:radial-gradient(80% 100% at 30% 0%,color-mix(in oklab,var(--glow) 26%,transparent),transparent 70%)}
.sheet-grip{position:sticky;top:0;z-index:3;display:grid;place-items:center;height:24px;margin:0 -20px;touch-action:none;cursor:grab;background:color-mix(in oklab,var(--bg-1) 88%,#000 12%)}
.sheet-grip i{width:44px;height:5px;border-radius:5px;background:rgba(226,194,122,.45)}
.dialogtop{position:sticky;top:24px;z-index:3;display:flex;align-items:center;justify-content:space-between;margin:0 -20px 6px;padding:0 12px 8px 20px;touch-action:none;background:color-mix(in oklab,var(--bg-1) 88%,#000 12%);border-bottom:1px solid var(--line)}
.dialogtop .eyebrow{margin:0}
.closebtn{display:grid;place-items:center;width:44px;height:44px;border-radius:50%;border:1px solid var(--line);background:rgba(255,240,200,.05);color:var(--gold-hi)}
.closebtn .ico{width:18px;height:18px}
.sheet > div:last-child{position:relative}

/* Character detail */
.detailhero{position:relative;display:flex;align-items:center;gap:18px;margin:14px 0 18px}
.detailhero>div{min-width:0}
.detailhero::before{content:"";position:absolute;left:-30px;top:-40px;width:200px;height:200px;border-radius:50%;background:radial-gradient(circle,color-mix(in oklab,var(--glow-2) 32%,transparent),transparent 70%);pointer-events:none}
.detailhero .pf{width:100px;height:122px;border-radius:16px}
.detailhero .pf img{border-radius:14px}
#detail-name{margin:0 0 4px;font:700 36px/1 var(--display);color:var(--ivory);overflow-wrap:anywhere}
.medallions{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px}
.medal{display:flex;align-items:center;gap:10px;min-width:0;padding:12px 10px;border-radius:16px;border:1px solid var(--line);background:linear-gradient(160deg,rgba(255,240,200,.07),rgba(255,240,200,.015))}
.medal b{display:grid;place-items:center;width:46px;height:46px;flex:none;clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);background:var(--gold-grad);font:700 22px/1 var(--display);color:#1b1306}
.medal span{min-width:0;overflow-wrap:anywhere;font:600 11px/1.3 var(--ui);letter-spacing:.05em;text-transform:uppercase;color:#d2c6a8}
.facts{margin:20px 0 6px}
.facts dt{display:flex;align-items:center;gap:8px;margin-top:16px;font:600 11px/1.1 var(--caps);letter-spacing:.14em;text-transform:uppercase;color:var(--gold)}
.facts dt .ico{width:16px;height:16px}
.facts dd{margin:7px 0 0;padding-bottom:14px;font-size:15.5px;line-height:1.55;color:var(--ivory);overflow-wrap:anywhere;border-bottom:1px solid;border-image:linear-gradient(90deg,var(--line),transparent) 1}
.facts dd.chips{padding:0 0 14px}
.detailactions,.md-actions{position:sticky;z-index:2;bottom:calc(-24px - env(safe-area-inset-bottom));margin:20px -20px 0;padding:16px 20px calc(14px + env(safe-area-inset-bottom));
  background:linear-gradient(180deg,transparent,color-mix(in oklab,var(--bg-0) 92%,transparent) 30%)}
.detailactions{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.detailactions button{min-height:52px;padding:0 10px;letter-spacing:.06em}
.detailactions .ghostbtn[aria-pressed="true"]{background:rgba(226,194,122,.18);border-color:var(--gold)}

/* ---------- About ---------- */
.about-head{text-align:center;padding:calc(env(safe-area-inset-top) + 34px) 0 6px}
.crest{position:relative;display:inline-grid;place-items:center;width:86px;height:86px;margin-bottom:14px}
.crest::before{content:"";position:absolute;inset:-14px;border-radius:50%;background:radial-gradient(circle,color-mix(in oklab,var(--glow) 40%,transparent),transparent 70%);animation:breathe 4s ease-in-out infinite}
.crest img{position:relative;width:76px;height:76px;filter:drop-shadow(0 8px 18px rgba(0,0,0,.6))}
.about-head .eyebrow{justify-content:center}
#about-title{font:600 36px/1.08 var(--display);color:var(--ivory);margin:4px 0 12px}
.weave{display:block;width:min(280px,80%);height:22px;margin:0 auto;overflow:visible}
.weave path{fill:none;stroke:var(--gold-2);stroke-width:1.1;vector-effect:non-scaling-stroke;stroke-dasharray:520;stroke-dashoffset:520;animation:draw 2.2s var(--ease-out) .2s forwards}
.weave path+path{stroke:var(--gold);opacity:.6;animation-delay:.45s}
.weave circle{fill:var(--gold-hi)}
.codex{max-width:660px;margin:18px auto 0}
.codex p{font-size:15px;line-height:1.75;color:#e4dac2}
.codex h2,.codex h3{display:flex;align-items:center;gap:10px;font:600 25px/1.15 var(--display);color:var(--gold-hi);margin:30px 0 10px}
.codex strong{color:var(--ivory)}
.backup-card{margin:26px 0;padding:18px;border-radius:20px;border:1px solid var(--line-2);background:linear-gradient(160deg,rgba(255,240,200,.08),rgba(255,240,200,.015)),var(--card);box-shadow:inset 0 1px 0 rgba(255,241,196,.1),0 0 40px -24px var(--gold)}
.backup-card h2,.backup-card h3{margin-top:0}
.backup-card h2 .ico,.backup-card h3 .ico{width:26px;height:26px;color:var(--gold)}
.backup-actions{display:flex;flex-wrap:wrap;gap:10px}
.backup-actions .goldbtn{flex:1 1 160px}
.backup-actions button{white-space:nowrap}
#backup-restore{display:grid;gap:10px;margin-top:12px}
textarea{width:100%;padding:12px;border-radius:14px;border:1px solid var(--line);background:rgba(0,0,0,.3);color:var(--ivory);font:500 16px/1.4 ui-monospace,Menlo,monospace;resize:vertical}
.spoiler-links{margin:18px 0;border:1px solid var(--line);border-radius:14px;background:rgba(0,0,0,.18)}
.spoiler-links summary{cursor:pointer;padding:14px 16px;font:600 11.5px/1.4 var(--caps);letter-spacing:.1em;text-transform:uppercase;color:var(--gold);min-height:44px}
.spoiler-links summary em{font-style:normal;color:#e8a77c}
.spoiler-links p{padding:0 16px 14px;margin:0}
.link-list{list-style:none;margin:0;padding:0 8px 6px}
.link-list a,.missable-sources a{display:flex;align-items:center;min-height:44px;padding:0 8px;border-radius:10px}
.link-list li+li{border-top:1px solid var(--line)}

/* ---------- Motion ---------- */
@keyframes view-in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@keyframes rise{from{opacity:0;transform:translateY(14px) scale(.985)}to{opacity:1;transform:none}}
@keyframes drop{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}
@keyframes kenburns{from{transform:scale(1.04) translate3d(0,0,0)}to{transform:scale(1.12) translate3d(-2%,1.5%,0)}}
@keyframes sheen-text{0%,55%{background-position:100% 0}85%,100%{background-position:-20% 0}}
@keyframes sweep{0%,60%{transform:translateX(-130%)}100%{transform:translateX(130%)}}
@keyframes pop{0%{transform:scale(1)}35%{transform:scale(1.35) rotate(-8deg)}100%{transform:scale(1)}}
@keyframes ring{from{opacity:.9;transform:scale(.5)}to{opacity:0;transform:scale(1.6)}}
@keyframes sheet-in{from{transform:translateY(100%)}to{transform:none}}
@keyframes sheet-out{to{transform:translateY(100%)}}
@keyframes toast-in{from{opacity:0;transform:translate(-50%,12px) scale(.96)}to{opacity:1;transform:translate(-50%,0)}}
@keyframes breathe{0%,100%{opacity:.6;transform:scale(.94)}50%{opacity:1;transform:scale(1.05)}}
@keyframes draw{to{stroke-dashoffset:0}}

.offscreen,.offscreen *{animation-play-state:paused!important}

@media (hover:hover){
  .card:hover{border-color:var(--line-2);transform:translateY(-2px)}
  .iconbtn:hover,.ghostbtn:hover{background:rgba(226,194,122,.14)}
  .bottomnav button:hover{color:var(--gold-hi)}
}

/* ---------- Larger screens ---------- */
@media (min-width:760px){
  :root{--gutter:28px}
  .hero{min-height:470px}
  .hero-art-wrap{inset:0 0 0 34%}
  .h1-small{font-size:32px}
  .h1-big{font-size:58px}
  .hero-copy{max-width:560px}
  #cards{grid-template-columns:1fr 1fr;gap:14px}
  .searchrow{max-width:680px}
  .filtergrid{grid-template-columns:repeat(4,1fr)}
  .bottomnav button{font-size:12px}
}
@media (max-width:374px){
  :root{--gutter:12px}
  .h1-big{font-size:32px}
  .stat{padding:8px 9px}
  .stat b{font-size:22px}
  .card h2{font-size:23px}
  .numbers{column-gap:10px}
  .bottomnav button{letter-spacing:0}
}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms!important;animation-delay:0s!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}
  .motes{display:none}
  .weave path{stroke-dashoffset:0}
}

h1:focus{outline:none}
h1:focus-visible{outline:2px solid var(--gold-hi);outline-offset:4px}
