/* Playterra worlds: shared style for /world/ (cards, codex, chronicle, heroes) */
:root{--bg:#0b0f17;--panel:#121826;--panel2:#182033;--border:#26304a;--text:#e8ecf5;--muted:#9aa5bd;--acc:#2dd4bf;--acc2:#f97316;
--c0:#9aa5bd;--c1:#4ade80;--c2:#60a5fa;--c3:#c084fc;--c4:#fbbf24;--cmd:#f5d27a;
--serif:Georgia,"Times New Roman",serif;--sans:system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif}
body.w-ts{--acc:#2dd4bf;--acc2:#f97316}
body.w-ro{--acc:#e0b04a;--acc2:#dc2626}
body.w-if{--acc:#a3b56b;--acc2:#d4a52a}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--bg);color:var(--text);font:16px/1.6 var(--sans);-webkit-font-smoothing:antialiased}
a{color:var(--acc)}
img{max-width:100%}
.wrap{max-width:1180px;margin:0 auto;padding:0 18px}
.muted{color:var(--muted)}.small{font-size:14px}
h1,h2,h3{line-height:1.2;margin:0 0 .4em}
h1{font-size:clamp(30px,5vw,48px)}h2{font-size:clamp(24px,3.4vw,32px)}
/* top bar */
.tb{position:sticky;top:0;z-index:20;background:rgba(11,15,23,.92);backdrop-filter:blur(8px);border-bottom:1px solid var(--border)}
.tb .wrap{display:flex;align-items:center;gap:14px;min-height:58px;flex-wrap:wrap}
.logo{display:flex;align-items:center;gap:8px;color:var(--text);text-decoration:none;font-weight:800;letter-spacing:1px}
.logo img{width:28px;height:28px}
.logo b{color:var(--acc)}
.tbl{display:flex;gap:4px;flex-wrap:wrap;flex:1}
.tbl a{color:var(--muted);text-decoration:none;padding:6px 10px;border-radius:8px;font-size:15px}
.tbl a:hover,.tbl a.on{color:var(--text);background:var(--panel2)}
.btn{display:inline-flex;align-items:center;gap:6px;min-height:42px;padding:0 16px;border-radius:10px;border:1px solid var(--acc);background:var(--acc);color:#071016;font-weight:700;text-decoration:none;cursor:pointer;font:inherit;font-weight:700}
.btn.ghost{background:transparent;color:var(--text);border-color:var(--border)}
.btn.sm{min-height:34px;padding:0 12px;font-size:14px}
/* world switch */
.ws{display:flex;gap:6px;flex-wrap:wrap;margin:18px 0}
.ws a{flex:1;min-width:150px;text-decoration:none;color:var(--text);border:1px solid var(--border);border-radius:12px;padding:10px 14px;background:var(--panel)}
.ws a b{display:block}.ws a span{color:var(--muted);font-size:13px}
.ws a.on{border-color:var(--acc);box-shadow:0 0 0 1px var(--acc) inset}
/* hero */
.hero{position:relative;min-height:330px;display:flex;align-items:flex-end;background:#000 center/cover no-repeat;border-bottom:1px solid var(--border)}
.hero:before{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(11,15,23,.15),rgba(11,15,23,.55) 50%,var(--bg))}
.hero .wrap{position:relative;padding-top:60px;padding-bottom:26px;width:100%}
.kick{font-size:13px;letter-spacing:2px;text-transform:uppercase;color:var(--acc);font-weight:700}
.lead{font-size:18px;color:#cfd6e6;max-width:46em}
section{padding:34px 0}
.panel{background:var(--panel);border:1px solid var(--border);border-radius:16px;padding:20px}
.grid{display:grid;gap:16px}
.g2{grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}
.g3{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}
.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;margin:16px 0}
.facts div{background:var(--panel2);border:1px solid var(--border);border-radius:12px;padding:10px 14px}
.facts b{display:block;font-size:12px;letter-spacing:1px;text-transform:uppercase;color:var(--muted)}
/* hub tiles */
.tile{display:block;text-decoration:none;color:var(--text);background:var(--panel);border:1px solid var(--border);border-radius:16px;overflow:hidden}
.tile .im{aspect-ratio:16/9;background:#000 center/cover}
.tile .bd{padding:14px 16px}
.tile:hover{border-color:var(--acc)}
.feat{display:flex;gap:14px;align-items:flex-start;text-decoration:none;color:var(--text);background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:16px}
.feat:hover{border-color:var(--acc)}
.feat i{font-style:normal;font-size:28px;line-height:1}
/* filters */
.bar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin:8px 0 18px}
.chip{border:1px solid var(--border);background:var(--panel);color:var(--text);border-radius:999px;padding:6px 12px;font:inherit;font-size:14px;cursor:pointer}
.chip.on{border-color:var(--acc);color:var(--acc)}
.prog{height:8px;background:var(--panel2);border-radius:99px;overflow:hidden;min-width:160px;flex:1;max-width:320px}
.prog i{display:block;height:100%;background:var(--acc)}
/* cards */
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:18px}
.card{--r:var(--c0);position:relative;aspect-ratio:63/88;border-radius:14px;padding:7px;background:linear-gradient(150deg,var(--r),#0b0f17 45%,var(--r));cursor:pointer;transition:transform .15s;box-shadow:0 6px 20px rgba(0,0,0,.45);font-family:var(--sans);color:#f2f5fb}
.card:hover{transform:translateY(-3px)}
.card.t1{--r:var(--c1)}.card.t2{--r:var(--c2)}.card.t3{--r:var(--c3)}.card.t4{--r:var(--c4)}.card.cm{--r:var(--cmd)}
.card .in{position:relative;height:100%;border-radius:9px;overflow:hidden;display:flex;flex-direction:column;background:#0f1420 center/180px repeat;}
.card .in:after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(9,12,20,.82),rgba(9,12,20,.55) 40%,rgba(9,12,20,.9));pointer-events:none}
.card .in>*{position:relative;z-index:1}
.card .nm{display:flex;justify-content:space-between;align-items:center;gap:6px;padding:7px 9px 4px;font-weight:800;font-size:14px;line-height:1.15}
.card .nm small{font-weight:700;font-size:10px;letter-spacing:1px;color:var(--r);white-space:nowrap}
.card .art{flex:1;margin:0 7px;border-radius:7px;border:1px solid rgba(255,255,255,.12);background:radial-gradient(circle at 50% 45%,#2a3248,#0c1019 75%);display:flex;align-items:center;justify-content:center;overflow:hidden;min-height:0}
.card .art img{width:100%;height:100%;object-fit:contain;display:block}
.card .art:has(img.ph){background:#161616}
.card .art img.ph{object-fit:cover;object-position:50% 14%}
.card .ty{padding:5px 9px 0;font-size:10.5px;letter-spacing:.6px;text-transform:uppercase;color:#c9d1e3}
.card .st{display:flex;gap:6px;padding:5px 8px}
.card .st span{flex:1;text-align:center;background:rgba(0,0,0,.45);border:1px solid rgba(255,255,255,.12);border-radius:6px;padding:2px 0;font-size:10px;color:#b9c2d6;line-height:1.2}
.card .st b{display:block;font-size:16px;color:#fff}
.card .fl{padding:0 9px;font-size:11px;line-height:1.35;font-style:italic;color:#d6dceb;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;min-height:44px}
.card .ft{display:flex;justify-content:space-between;padding:5px 9px 7px;font-size:9.5px;letter-spacing:1px;color:#8d97ad;text-transform:uppercase}
.card.lock .art img{filter:grayscale(.85) brightness(.6)}
.card.lock:before{content:"🔒 Not collected";position:absolute;z-index:3;right:14px;top:40px;left:auto;transform:none;background:rgba(0,0,0,.75);border:1px solid rgba(255,255,255,.2);padding:2px 8px;border-radius:99px;font-size:10px;white-space:nowrap;color:#e6e9f2}
.card.big{width:min(330px,82vw);cursor:default}
.card.big:hover{transform:none}
.card.big .nm{font-size:18px}.card.big .fl{font-size:13px;-webkit-line-clamp:5;min-height:70px}.card.big .st b{font-size:20px}
/* modal */
.mb{position:fixed;inset:0;z-index:50;background:rgba(3,5,10,.82);display:flex;align-items:center;justify-content:center;padding:16px;overflow:auto}
.md{display:flex;gap:22px;flex-wrap:wrap;justify-content:center;align-items:flex-start;max-width:900px;width:100%;background:var(--panel);border:1px solid var(--border);border-radius:18px;padding:20px;position:relative}
.md .tx{flex:1;min-width:260px}
.md .x{position:absolute;right:10px;top:10px}
.kv{display:grid;grid-template-columns:auto 1fr;gap:4px 14px;font-size:15px;margin:12px 0}
.kv b{color:var(--muted);font-weight:600}
/* codex */
.toc{display:flex;gap:6px;flex-wrap:wrap;margin:10px 0 0}
.toc a{font-size:14px;text-decoration:none;border:1px solid var(--border);border-radius:99px;padding:4px 12px;color:var(--text)}
.ent{display:grid;grid-template-columns:120px 1fr;gap:16px;align-items:start;background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:14px;scroll-margin-top:80px}
.ent .pic{aspect-ratio:1;border-radius:10px;background:radial-gradient(circle at 50% 45%,#2a3248,#0c1019 75%);overflow:hidden;display:flex;align-items:center;justify-content:center}
.ent .pic img{width:100%;height:100%;object-fit:contain}
.ent:has(.rl){grid-template-columns:120px 1fr 120px}
@media (max-width:700px){.ent:has(.rl){grid-template-columns:80px 1fr}.ent .rl{display:none}}
.ent h3{margin:0 0 2px;font-size:20px}
.tag{display:inline-block;font-size:12px;border:1px solid var(--border);border-radius:99px;padding:1px 9px;margin:2px 4px 2px 0;color:var(--muted)}
.tag.r{border-color:var(--r);color:var(--r)}
.list{display:grid;gap:12px}
table.t{width:100%;border-collapse:collapse;font-size:15px}
table.t td,table.t th{padding:7px 8px;border-bottom:1px solid var(--border);text-align:left}
table.t th{color:var(--muted);font-weight:600;font-size:13px;text-transform:uppercase;letter-spacing:.5px}
/* heroes */
.story{display:grid;grid-template-columns:230px 1fr;gap:24px;align-items:start;padding:26px 0;border-bottom:1px solid var(--border);scroll-margin-top:80px}
.story h3{font-size:26px;font-family:var(--serif)}
.story p{font-family:var(--serif);font-size:18px;line-height:1.7;color:#dfe4ef;margin:0 0 1em}
.story .who{font-size:13px;letter-spacing:1.5px;text-transform:uppercase;color:var(--acc);font-weight:700}
/* history timeline */
.tl{list-style:none;margin:26px 0 0;padding:0;position:relative}
.tl:before{content:"";position:absolute;left:139px;top:0;bottom:0;width:2px;background:linear-gradient(var(--acc),transparent)}
.tle{display:grid;grid-template-columns:130px 1fr;gap:18px;margin:0 0 22px}
.tld{text-align:right;padding-top:14px;position:relative}
.tld span{font-size:13px;font-weight:700;letter-spacing:.5px;color:var(--acc);text-transform:uppercase;display:inline-block;line-height:1.25;padding-right:12px}
.tld:after{content:"";position:absolute;right:-16px;top:16px;width:10px;height:10px;border-radius:50%;background:var(--bg);border:3px solid var(--acc)}
.tlc{display:grid;grid-template-columns:220px 1fr;background:var(--panel);border:1px solid var(--border);border-radius:14px;overflow:hidden}
.tlp{background:#0c1019 center/contain no-repeat;min-height:150px}
.tlt{padding:14px 18px}.tlt h3{margin:0 0 6px;font-size:21px}.tlt p{margin:0;color:#d4dae7}
@media (max-width:700px){.tl:before{left:14px}.tle{grid-template-columns:1fr;gap:6px;padding-left:34px}.tld{text-align:left;padding:0}.tld:after{left:-26px;right:auto;top:2px}.tld span{padding-right:0}.tl:before{left:14px}.tld span{max-width:none}.tlc{grid-template-columns:1fr}.tlp{min-height:160px}}
/* chronicle */
.paper{background:#efe7d6;color:#1d1a15;border-radius:6px;padding:26px clamp(16px,4vw,44px) 34px;box-shadow:0 10px 40px rgba(0,0,0,.5);font-family:var(--serif);max-width:1000px;margin:0 auto}
body.w-ts .paper{background:#e9edf1}
body.w-if .paper{background:#e7e2cf}
.mast{text-align:center;border-bottom:3px double #1d1a15;padding-bottom:10px;margin-bottom:6px}
.mast h1{font-family:var(--serif);font-size:clamp(32px,7vw,64px);letter-spacing:1px;margin:0;font-weight:900;text-transform:uppercase}
.mast .mt{display:flex;justify-content:space-between;gap:10px;font-size:13px;text-transform:uppercase;letter-spacing:1px;border-top:1px solid #1d1a15;margin-top:8px;padding-top:6px;flex-wrap:wrap}
.paper .hl{font-size:clamp(28px,5vw,46px);font-weight:900;line-height:1.08;margin:18px 0 6px;text-align:center}
.paper .sub{text-align:center;font-style:italic;font-size:20px;margin:0 0 16px}
.paper .ph{width:100%;aspect-ratio:21/9;object-fit:cover;filter:grayscale(.85) contrast(1.05) sepia(.25);border:1px solid #1d1a15;display:block}
.paper .cap{font-size:13px;font-style:italic;margin:4px 0 14px}
.cols{column-count:2;column-gap:28px;column-rule:1px solid rgba(0,0,0,.25);font-size:17px;line-height:1.55;text-align:justify;hyphens:auto}
.cols p{margin:0 0 .8em}
.brief{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:0;border-top:2px solid #1d1a15;margin-top:18px}
.brief div{padding:12px 14px 6px;border-right:1px solid rgba(0,0,0,.25)}
.brief div:last-child{border-right:0}
.brief h4{margin:0 0 4px;font-size:18px}
.brief p{margin:0 0 6px;font-size:15px;line-height:1.45}
.paper table{width:100%;border-collapse:collapse;font-size:15px}
.paper td,.paper th{border-bottom:1px solid rgba(0,0,0,.25);padding:5px 4px;text-align:left}
.ptabs{display:flex;gap:8px;justify-content:center;margin:0 0 18px;flex-wrap:wrap}
footer{border-top:1px solid var(--border);padding:24px 0;margin-top:30px;color:var(--muted);font-size:14px}
footer a{color:var(--muted)}
@media (max-width:700px){
 .ent{grid-template-columns:80px 1fr}.story{grid-template-columns:1fr}.story .cardwrap{max-width:220px}
 .cols{column-count:1}.cards{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px}
 .card .fl{display:none}.card .nm{font-size:12.5px}
 .tbl{order:3;flex-basis:100%}
}
.backs{display:none}
.card.cb{background-size:cover;background-position:center;padding:0;cursor:default}
.card.cb.empty{background:none;box-shadow:none}
/* print: real card size, 9 per A4 */
@media print{
 @page{size:A4;margin:8mm}
 body{background:#fff}
 .tb,.noprint,footer,.hero,.ws,.bar,.mb{display:none!important}
 section{padding:0}
 .cards{display:grid;grid-template-columns:repeat(3,63mm);gap:3mm;justify-content:center}
 .card{width:63mm;height:88mm;aspect-ratio:auto;box-shadow:none;break-inside:avoid;-webkit-print-color-adjust:exact;print-color-adjust:exact;transform:none!important}
 .card.lock .art img{filter:none}.card.lock:before{display:none}
 .card .fl{display:-webkit-box}
 .backs{display:block}.cards.bk{break-before:page;grid-template-columns:repeat(3,63mm);direction:ltr}
 .paper{box-shadow:none;-webkit-print-color-adjust:exact;print-color-adjust:exact}
}
