/* War Camp — player portal. Shared design system with the landing, The Keep and the GM Console. */
:root{
  color-scheme:dark;
  --ground:#0C0E11;--ground-2:#111419;--surface:#161A20;--surface-2:#1D222A;--line:#282E37;--line-soft:#1C2129;
  --ink:#ECEDEF;--ink-2:#B6BCC6;--muted:#7D8593;
  --brand:#c9a227;--on-brand:#141003;
  --ok:#58CF97;--warn:#F0B24A;--bad:#FF6B6B;--info:#8FA8FF;
  --f-display:"Grenze Gotisch",Georgia,serif;--f-body:"Barlow",system-ui,sans-serif;
  --f-label:"Barlow Condensed","Arial Narrow",system-ui,sans-serif;--f-mono:"IBM Plex Mono",ui-monospace,Menlo,monospace;
  --top:env(safe-area-inset-top,0px);--bot:env(safe-area-inset-bottom,0px);
  /* owner-controllable theme tokens (set by core.js applyLook from the clan's "Portal look");
     these defaults ARE War Camp's stock look — a clan that never customizes renders exactly this */
  --accent:var(--brand);                                   /* secondary colour: active nav, links, quotes */
  --r-card:12px;--r-ctl:8px;--r-chip:6px;                 /* corners: cards / buttons+inputs / chips */
  --card-a:100%;                                           /* card surface opacity */
  --card-bg:color-mix(in srgb,var(--surface) var(--card-a),transparent);
  --card-hbg:color-mix(in srgb,var(--ground-2) var(--card-a),transparent);
  --card-bd:var(--line);--card-blur:none;
  --pad-card:14px 16px;--pad-cardh:12px 16px;--row-py:11px;--gap:16px;--page-pad:22px;
  --app-bg:none;
}
html[data-mode="light"]{
  color-scheme:light;
  --ground:#F3F3F0;--ground-2:#EAEAE6;--surface:#FFFFFF;--surface-2:#EEEEEA;--line:#D9D9D2;--line-soft:#E6E6E0;
  --ink:#1B1D22;--ink-2:#4A515C;--muted:#7F848C;--on-brand:#141003;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{background:var(--ground);color:var(--ink);font:400 15px/1.55 var(--f-body);-webkit-font-smoothing:antialiased;overflow:hidden}
[hidden]{display:none!important}
button{font:inherit;color:inherit;cursor:pointer;background:none;border:none}
a{color:inherit;text-decoration:none}
input,select,textarea{font:inherit;color:var(--ink);font-size:16px}
:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:6px}
::-webkit-scrollbar{width:9px;height:9px}::-webkit-scrollbar-thumb{background:var(--surface-2);border-radius:9px}
.mono{font-family:var(--f-mono);font-variant-numeric:tabular-nums}
.lbl{font:600 11px/1.2 var(--f-label);letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.muted{color:var(--muted)}
.pos{color:var(--ok)}.neg{color:var(--bad)}.brandc{color:var(--brand)}.warnc{color:var(--warn)}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ── login ── */
#login{position:fixed;inset:0;display:grid;place-items:center;padding:24px 16px;z-index:100;overflow-y:auto;
  background:radial-gradient(120% 60% at 50% -10%,color-mix(in srgb,var(--brand) 13%,transparent),transparent 60%),var(--ground)}
#login.bg::before{content:"";position:fixed;inset:0;z-index:-1;background-size:cover;background-position:center;background-image:linear-gradient(rgba(12,14,17,.74),rgba(12,14,17,.93)),var(--login-bg)}
.login-card{width:100%;max-width:380px;background:color-mix(in srgb,var(--surface) 94%,transparent);backdrop-filter:blur(10px);border:1px solid var(--line);border-radius:16px;padding:30px 26px;box-shadow:0 40px 90px -40px #000}
/* login logo: the clan's own logo, frameless (same treatment as the side-nav logo) */
.login-crest{width:auto;height:72px;max-width:200px;margin:0 auto 14px;display:flex;justify-content:center;align-items:center}
.login-crest img{width:auto;max-width:200px;height:72px;object-fit:contain}.login-crest svg{width:56px;height:56px}
.login-name{text-align:center;font:800 32px/1 var(--f-display)}
.lg-rem{display:flex;align-items:flex-start;gap:10px;min-height:44px;margin:2px 0 14px;cursor:pointer;user-select:none}
.lg-rem input{flex:none;width:20px;height:20px;margin:1px 0 0;accent-color:var(--brand);cursor:pointer}
.lg-rem span{font-size:14px;font-weight:600;color:var(--ink);line-height:1.3}
.lg-rem small{display:block;font-weight:400;font-size:12px;color:var(--muted);margin-top:2px}
.iconbtn.tb-heart svg{fill:#e0527a;stroke:#e0527a}
.tb-heart{animation:tbHeart 1.6s ease-in-out infinite}
@keyframes tbHeart{0%,100%{transform:scale(1)}50%{transform:scale(1.12)}}
/* reduced motion: no scaling, but the heart still pulses with a soft glow (overrides the global animation:none) */
@keyframes tbHeartGlow{0%,100%{opacity:1;filter:drop-shadow(0 0 0 rgba(224,82,122,0))}50%{opacity:.55;filter:drop-shadow(0 0 6px rgba(224,82,122,.9))}}
@media (prefers-reduced-motion:reduce){html .iconbtn.tb-heart,html .tn-goal .hrt{animation:tbHeartGlow 1.8s ease-in-out infinite!important}}
.lg-pk{margin-top:10px;min-height:44px;display:flex;align-items:center;justify-content:center;gap:8px}
.lg-pk svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round}
.login-motto{text-align:center;color:var(--ink-2);font-size:13px;font-style:italic;margin:7px 0 22px;min-height:1em}
.login-links{display:flex;gap:8px;justify-content:center;margin-top:14px}

/* ── forms ── */
.fld{display:grid;gap:6px;margin-bottom:13px}
.fld>label,.fld>.lbl{font:600 11px/1.2 var(--f-label);letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.inp,.fld input,.fld select,.fld textarea{width:100%;background:var(--ground);border:1px solid var(--line);border-radius:var(--r-ctl);padding:11px 12px;min-height:44px}
.inp:focus,.fld input:focus,.fld select:focus,.fld textarea:focus{outline:none;border-color:var(--brand)}
.fld textarea{min-height:110px;resize:vertical}
.hint{font-size:12.5px;color:var(--muted)}
.err{color:var(--bad);font-size:13px;min-height:1em}
.row-inline{display:flex;gap:8px;align-items:center;flex-wrap:wrap}

/* ── buttons & chips ── */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;border:1px solid var(--line);border-radius:var(--r-ctl);padding:10px 14px;min-height:40px;font:600 12.5px/1 var(--f-label);letter-spacing:.09em;text-transform:uppercase;color:var(--ink);white-space:nowrap;transition:border-color .15s,filter .15s,background .15s}
.btn:hover{border-color:var(--ink-2)}
.btn.pri{background:var(--brand);border-color:var(--brand);color:var(--on-brand)}
.btn.pri:hover{filter:brightness(1.08)}
.btn.danger{color:var(--bad);border-color:color-mix(in srgb,var(--bad) 45%,var(--line))}
.btn.ghost{border-color:transparent;color:var(--ink-2)}
.btn.sm{padding:7px 10px;min-height:34px;font-size:11.5px}
.btn.full{width:100%}
.btn:disabled{opacity:.5;cursor:not-allowed}
.chip{display:inline-flex;align-items:center;gap:6px;font:600 10.5px/1 var(--f-label);letter-spacing:.12em;text-transform:uppercase;padding:5px 8px;border-radius:var(--r-chip);background:var(--surface-2);color:var(--ink-2);white-space:nowrap}
.chip.ok{color:var(--ok);background:color-mix(in srgb,var(--ok) 13%,transparent)}
.chip.bad{color:var(--bad);background:color-mix(in srgb,var(--bad) 13%,transparent)}
.chip.warn{color:var(--warn);background:color-mix(in srgb,var(--warn) 13%,transparent)}
.chip.brand{color:var(--brand);background:color-mix(in srgb,var(--brand) 14%,transparent)}
.chip.info{color:var(--info);background:color-mix(in srgb,var(--info) 13%,transparent)}
.seg{display:inline-flex;gap:6px;flex-wrap:wrap}
.seg button,.fbtn{border:1px solid var(--line);border-radius:999px;padding:8px 13px;min-height:36px;font:600 12px/1 var(--f-label);letter-spacing:.07em;text-transform:uppercase;color:var(--ink-2)}
.seg button[aria-pressed="true"],.fbtn[aria-pressed="true"]{background:var(--brand);border-color:var(--brand);color:var(--on-brand)}

/* ── app shell ── */
#app{display:none;height:100%}
#app.on{display:block}
.app{display:grid;grid-template-columns:240px minmax(0,1fr);grid-template-rows:minmax(0,1fr);height:100%}
.side{background:var(--ground-2);border-right:1px solid var(--line-soft);display:flex;flex-direction:column;gap:4px;padding:calc(16px + var(--top)) 12px 12px;overflow-y:auto}
.brand{display:flex;align-items:center;gap:10px;padding:2px 8px 14px;border-bottom:1px solid var(--line);margin-bottom:6px}
.crest{width:40px;height:40px;border-radius:10px;display:grid;place-items:center;overflow:hidden;background:color-mix(in srgb,var(--brand) 16%,var(--surface));border:1px solid color-mix(in srgb,var(--brand) 45%,var(--line));flex:none}
.crest img{width:100%;height:100%;object-fit:contain}.crest svg{width:22px;height:22px}
/* side-nav logo: the clan's own logo, bigger and without a frame */
/* clan name on top, logo centred underneath (markup order is logo, name) */
.side .brand{flex-direction:column-reverse;justify-content:center;gap:8px;text-align:center;padding:4px 8px 14px}
.side .brand>div{width:100%}
.side .brand .nm{font-size:22px;white-space:normal;overflow-wrap:anywhere;line-height:1.1}
.brand .crest{width:auto;height:48px;min-width:33px;max-width:105px;border:0;border-radius:0;background:none;overflow:visible}
.brand .crest img{width:auto;max-width:105px;height:48px;object-fit:contain}.brand .crest svg{width:36px;height:36px}
.brand .nm{font:800 19px/1 var(--f-display);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.brand small{display:block;font-size:11px;color:var(--muted);margin-top:2px}
.wallet-mini{margin:4px 2px 8px;padding:5px 6px;border:1px solid var(--card-bd);border-radius:calc(var(--r-card) - 2px);background:var(--surface);text-align:center;width:calc(100% - 4px)}
/* name, then [#rank | points | settings] */
.wallet-mini .wm-row{display:grid;grid-template-columns:44px 1fr 44px;align-items:center;gap:4px}
.wallet-mini .wm-row button{min-height:44px;border-radius:8px;display:grid;place-items:center;min-width:0}
.wallet-mini .wm-pts{align-content:center;gap:1px;padding:2px 4px}
.wallet-mini .wm-row button:hover{background:var(--surface-2)}
.wallet-mini .wm-rank{font:700 14px/1 var(--f-mono);color:var(--ink-2)}
.wallet-mini b{display:block;font:600 17px/1.15 var(--f-mono);color:var(--brand);margin:0}
.wallet-mini .wm-set svg{width:20px;height:20px;fill:none;stroke:var(--muted);stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.wallet-mini .wm-set:hover svg{stroke:var(--ink)}
.wallet-mini small{display:block;font-size:11.5px;color:var(--muted);margin-top:2px}.wallet-mini small:empty{display:none}
.wallet-mini .who{display:block;font:700 13px/1.2 var(--f-body);color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.ng{display:grid;gap:1px;margin-top:6px}
.ng>span{padding:7px 10px 3px;font:600 10px/1 var(--f-label);letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}
.tab{display:flex;align-items:center;gap:11px;padding:9px 10px;border-radius:var(--r-ctl);color:var(--ink-2);font-weight:500;font-size:14px;text-align:left;width:100%}
.tab svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.7;flex:none;opacity:.8}
.tab:hover{background:var(--surface);color:var(--ink)}
.tab[aria-current]{background:var(--surface-2);color:var(--ink);box-shadow:inset 2px 0 0 var(--accent)}
.tab[aria-current] svg{stroke:var(--accent);opacity:1}
.tab .n{margin-left:auto;font:700 10px/16px var(--f-mono);border-radius:8px;min-width:18px;text-align:center;padding:0 5px;background:var(--bad);color:#fff}
.tab .n.soft{background:var(--surface-2);color:var(--ink-2)}
.subtabs{display:none;gap:1px;margin:1px 0 4px 20px;padding-left:10px;border-left:1px solid var(--line)}
.tabrow{display:flex;align-items:center;gap:2px}
.tabrow .tab{flex:1;min-width:0}
.subtg{flex:none;width:36px;height:36px;border-radius:var(--r-ctl);display:grid;place-items:center;color:var(--muted);font-size:17px;line-height:1}
.subtg:hover{background:var(--surface-2);color:var(--ink)}
.subtg span{display:block;transition:transform .2s}
.tabrow.open .subtg span{transform:rotate(90deg)}
.tabrow.open + .subtabs{display:grid}
.tab.sub{padding:7px 10px;font-size:13px;color:var(--muted)}
.tab.sub:hover{color:var(--ink)}
.tab.sub[aria-current]{background:none;box-shadow:none;color:var(--accent);font-weight:600}

.side .foot{margin-top:auto;padding-top:8px;border-top:1px solid var(--line-soft);display:grid;gap:1px}
.side .foot small{padding:8px 10px 2px;font-size:11.5px;color:var(--muted)}
/* account buttons at the menu foot: narrower than the menu rows, centred, never wider than the menu */
.side{overflow-x:hidden}.side .foot{min-width:0}
.side .foot .tab.acct-portal,.side .foot .tab.acct-logout{width:calc(100% - 24px);min-width:0;justify-self:center;padding:7px 10px;font-size:13px;gap:9px}
.side .foot .tab.acct-portal svg,.side .foot .tab.acct-logout svg{width:16px;height:16px}

.main{display:flex;flex-direction:column;min-width:0;min-height:0;height:100%;position:relative;overflow:hidden;background:var(--app-bg)}
.topbar{display:flex;align-items:center;gap:12px;padding:calc(10px + var(--top)) 22px 10px;border-bottom:1px solid var(--line-soft);flex:none;min-height:56px}
.topbar .crumb{font:600 12px/1 var(--f-label);letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.topbar .sp{flex:1}
.live{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--line);border-radius:999px;padding:6px 11px;font-size:12.5px;color:var(--ink-2)}
.live i{width:7px;height:7px;border-radius:50%;background:var(--muted)}
.live.on i{background:var(--ok);box-shadow:0 0 0 3px color-mix(in srgb,var(--ok) 20%,transparent)}
.av{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;background:var(--brand);color:var(--on-brand);font:700 12px/1 var(--f-label)}
.iconbtn{width:40px;height:40px;border:1px solid var(--line);border-radius:10px;display:grid;place-items:center;position:relative}
.iconbtn svg{width:19px;height:19px;stroke:var(--ink-2);fill:none;stroke-width:1.8}
.iconbtn .n{position:absolute;top:-5px;right:-5px;min-width:17px;height:17px;border-radius:9px;background:var(--bad);color:#fff;font:700 10px/17px var(--f-mono);text-align:center;padding:0 4px}
.burger{display:none}
/* top bar: light/dark switch shows the mode you'd switch to; your picture opens the account menu */
#tb-mode .i-moon{display:none}html[data-mode="light"] #tb-mode .i-sun{display:none}html[data-mode="light"] #tb-mode .i-moon{display:block}
button.av{border:0;cursor:pointer;overflow:hidden;transition:box-shadow .15s}button.av:hover,button.av[aria-expanded="true"]{box-shadow:0 0 0 2px var(--surface),0 0 0 4px var(--brand)}
.topbar{position:relative}
.pmenu{position:absolute;top:calc(100% - 4px);right:16px;z-index:60;width:250px;padding:8px;border-radius:14px;border:1px solid var(--line);background:var(--ground);box-shadow:0 18px 50px -12px rgba(0,0,0,.55);display:grid;gap:2px;animation:rise .15s ease}
.pmenu[hidden]{display:none}
.pmenu .pm-h{display:flex;align-items:center;gap:10px;padding:6px 8px 10px;border-bottom:1px solid var(--line-soft);margin-bottom:4px}
.pmenu .pm-h .av{flex:none}.pmenu .pm-h b{display:block;font-size:14px}.pmenu .pm-h small{color:var(--muted);font-size:12px}
.pmenu .pm-sep{height:1px;background:var(--line-soft);margin:4px 0}
/* account buttons: Owner Portal (gold outline, glow) and Log out (red), apart from the menu items */
.tab.acct-portal{margin-top:6px;border:1px solid color-mix(in srgb,var(--brand) 60%,transparent);background:color-mix(in srgb,var(--brand) 9%,transparent);color:var(--brand);font-weight:600;transition:box-shadow .2s,background .2s}
.tab.acct-portal svg{opacity:1}.tab.acct-portal .ext{margin-left:auto;font-size:12px;opacity:.7}
.tab.acct-portal:hover{color:var(--brand);background:color-mix(in srgb,var(--brand) 16%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--brand) 18%,transparent),0 0 18px -4px var(--brand)}
.tab.acct-logout{margin-top:6px;border:1px solid color-mix(in srgb,var(--bad) 35%,transparent);background:color-mix(in srgb,var(--bad) 8%,transparent);color:var(--bad);font-weight:600;transition:background .2s}
.tab.acct-portal+.tab.acct-logout{margin-top:4px}
.tab.acct-logout svg{opacity:1}
.tab.acct-logout:hover{color:#fff;background:var(--bad)}
.scroller{flex:1;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch}
.page{padding:var(--page-pad) var(--page-pad) 90px;max-width:1060px;margin:0 auto;animation:rise .2s ease}
@keyframes rise{from{opacity:0;transform:translateY(6px)}}
.banner-strip{margin:0 0 16px;padding:11px 14px;border-radius:10px;font-size:13.5px;border:1px solid var(--line)}
.banner-strip.warn{color:var(--warn);background:color-mix(in srgb,var(--warn) 9%,transparent);border-color:color-mix(in srgb,var(--warn) 35%,var(--line))}
.ph{margin-bottom:18px}
.ph h1{font:800 clamp(26px,3.2vw,36px)/1.05 var(--f-display);text-wrap:balance}
.ph p{color:var(--ink-2);margin-top:7px;max-width:64ch}

/* ── layout blocks ── */
.stack{display:grid;gap:var(--gap)}
.two{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);gap:var(--gap);align-items:start}
.two.even{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
.three{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
.card{background:var(--card-bg);border:1px solid var(--card-bd);border-radius:var(--r-card);overflow:hidden;min-width:0;-webkit-backdrop-filter:var(--card-blur);backdrop-filter:var(--card-blur)}
.card-h{display:flex;align-items:center;gap:10px;padding:var(--pad-cardh);border-bottom:1px solid var(--line-soft);background:var(--card-hbg);min-height:48px}
.card-h h3{font:600 15px/1.2 var(--f-body)}
.card-h .r{margin-left:auto;display:flex;gap:6px;align-items:center}
.card-b{padding:var(--pad-card)}
.empty{padding:26px 16px;text-align:center;color:var(--muted);font-size:14px}
.skel{height:72px;border-radius:var(--r-card);background:var(--card-bg);border:1px solid var(--card-bd);animation:pulse 1.2s infinite}
@keyframes pulse{50%{opacity:.5}}
.meter{height:6px;border-radius:3px;background:var(--surface-2);overflow:hidden;margin-top:6px}
.meter i{display:block;height:100%;background:var(--brand);border-radius:3px}
.note-box{border:1px solid var(--card-bd);border-radius:calc(var(--r-card) - 2px);padding:11px 13px;font-size:13.5px;color:var(--ink-2);background:var(--card-bg)}
.stat{background:var(--card-bg);border:1px solid var(--card-bd);border-radius:var(--r-card);padding:15px 16px;-webkit-backdrop-filter:var(--card-blur);backdrop-filter:var(--card-blur)}
.stat b{display:block;font:600 26px/1.05 var(--f-mono);margin-top:6px}
.stat small{display:block;font-size:12.5px;color:var(--muted);margin-top:5px}
.rich{font-size:14.5px;color:var(--ink-2);line-height:1.7;overflow-wrap:anywhere}
.rich :is(h1,h2,h3,h4){font-family:var(--f-body);font-size:16px;margin:14px 0 6px;color:var(--ink)}
.rich p{margin:6px 0}.rich strong,.rich b{color:var(--ink)}
.rich blockquote{border-left:3px solid var(--accent);padding-left:12px;margin:10px 0;color:var(--ink)}
.rich a{color:var(--accent)}
.rich table{border-collapse:collapse;margin:10px 0;font-size:13.5px;width:100%}
.rich td,.rich th{border:1px solid var(--line);padding:6px 8px;background:transparent;color:var(--ink-2)}
/* cell colours set in the editor show; a coloured cell gets dark text (unless the editor set one) so it stays readable in dark mode */
.rich td[style*="background"],.rich th[style*="background"]{color:#1d1d22}
/* wide tables in officer-written content (wiki, rules, auction guide, news) scroll sideways instead of
   squeezing their columns until words break mid-word */
.rich-x,.rich-wrap{overflow-x:auto;max-width:100%;-webkit-overflow-scrolling:touch}
.rich td,.rich th{overflow-wrap:normal;word-break:normal;min-width:5.5em;vertical-align:top}
.rich td:empty,.rich th:empty{min-width:1em}
.rich img{max-width:100%;height:auto;border-radius:8px}
/* rich-text extras from the Content editor (CKEditor Styles / Highlight / table caption / bookmarks); same look in editor, preview and player pages */
:root{--hl-gold:color-mix(in srgb,#c9a227 40%,transparent);--hl-green:color-mix(in srgb,#46a758 36%,transparent);--hl-red:color-mix(in srgb,#e5484d 34%,transparent);--hl-blue:color-mix(in srgb,#3e8ed0 36%,transparent)}
mark.hl-gold,mark.hl-green,mark.hl-red,mark.hl-blue{color:inherit;padding:0 2px;border-radius:3px}
mark.hl-gold{background:var(--hl-gold)}mark.hl-green{background:var(--hl-green)}mark.hl-red{background:var(--hl-red)}mark.hl-blue{background:var(--hl-blue)}
mark.pen-red{background:transparent;color:var(--bad)}
.rb-box{display:block;margin:10px 0;padding:10px 12px 10px 14px;border:1px solid var(--line);border-left-width:4px;border-radius:10px;color:var(--ink)}
.rb-info{border-color:color-mix(in srgb,var(--info) 50%,var(--line));background:color-mix(in srgb,var(--info) 9%,transparent)}
.rb-warn{border-color:color-mix(in srgb,var(--bad) 50%,var(--line));background:color-mix(in srgb,var(--bad) 8%,transparent)}
.rb-tip{border-color:color-mix(in srgb,var(--brand) 55%,var(--line));background:color-mix(in srgb,var(--brand) 9%,transparent)}
.rb-boss{font-family:var(--f-display);font-weight:700;color:var(--brand);letter-spacing:.02em}
.rb-muted{color:var(--muted);font-size:.92em}
.rich figure.table>figcaption{font-size:12.5px;color:var(--muted);text-align:center;padding:6px 0 0}
/* table + image layout from the editor (Table properties alignment, image style/resize); mirrors ckeditor5.css so players see what leaders placed */
.rich::after{content:"";display:block;clear:both}
.rich figure.table{margin:10px auto;max-width:100%}
.rich figure.table.table-style-block-align-left{margin-left:0;margin-right:auto}
.rich figure.table.table-style-block-align-right{margin-left:auto;margin-right:0}
.rich figure.table.table-style-align-left{float:left;margin:4px 18px 10px 0}
.rich figure.table.table-style-align-right{float:right;margin:4px 0 10px 18px}
.rich figure.image{display:table;clear:both;margin:12px auto;text-align:center;max-width:100%}
.rich figure.image img{display:block;margin:0 auto;max-width:100%;min-width:100%}
.rich figure.image.image_resized{display:block;box-sizing:border-box;max-width:100%}.rich figure.image.image_resized img{width:100%}
.rich figure.image.image-style-side{float:right;clear:none;margin:4px 0 10px 18px;max-width:50%}
.rich figure.image>figcaption{display:table-caption;caption-side:bottom;font-size:12.5px;color:var(--muted);text-align:center;padding:6px 0 0}
.rich img.image_resized{height:auto}
@media (max-width:600px){
  .rich figure.table{float:none!important;width:100%!important;margin:10px 0!important}
  .rich figure.image.image-style-side{float:none;margin:12px auto}
}
.rich a[id^="bm-"]{scroll-margin-top:72px}
.table-wrap{overflow-x:auto}
table.t{width:100%;border-collapse:collapse;font-size:14px}
.t th{font:600 10.5px/1 var(--f-label);letter-spacing:.13em;text-transform:uppercase;color:var(--muted);text-align:left;padding:10px 14px;border-bottom:1px solid var(--line-soft);white-space:nowrap}
.t td{padding:11px 14px;border-top:1px solid var(--line-soft)}
.t tr:first-child td{border-top:none}

/* ── list rows (auctions etc.) ── */
.alist{display:grid}
.arow{display:grid;grid-template-columns:44px minmax(0,1fr) auto auto;gap:12px;align-items:center;padding:var(--row-py) 16px;border-top:1px solid var(--line-soft)}
.arow:first-child{border-top:none}
.arow.lead{box-shadow:inset 3px 0 0 var(--ok)}
.arow.outbid{box-shadow:inset 3px 0 0 var(--bad);background:color-mix(in srgb,var(--bad) 4%,transparent)}
.arow.flash{animation:flash .9s ease}
@keyframes flash{0%{background:color-mix(in srgb,var(--brand) 22%,transparent)}100%{background:transparent}}
.ico{width:44px;height:44px;border-radius:10px;display:grid;place-items:center;overflow:hidden;background:var(--ground-2);border:1px solid var(--line);flex:none}
.ico img{width:100%;height:100%;object-fit:cover}
.ico svg{width:24px;height:24px;stroke:var(--ink-2);fill:none;stroke-width:1.5}
.ico.ej svg{stroke:#D6A4FF}.ico.wp svg{stroke:#FFB86B}.ico.ar svg{stroke:#8FD3FF}.ico.ms svg{stroke:#9AE6B4}.ico.cl svg{stroke:#F5A3C7}
.aname{min-width:0}
.aname b{display:flex;align-items:center;gap:7px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.aname small{display:block;color:var(--muted);font-size:12.5px;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.star{color:var(--muted);font-size:16px;line-height:1;padding:4px}
.star.on{color:var(--brand)}
.aprice{text-align:right}
.aprice b{display:block;font:600 16px/1 var(--f-mono)}
.aprice small{font-size:11.5px;color:var(--muted)}
.cd{font:600 12.5px/1 var(--f-mono);color:var(--ink-2)}
.cd.hot{color:var(--bad)}
.aact{display:flex;align-items:center;gap:10px}
.bidq{min-width:96px}
.lrow{display:flex;align-items:center;gap:12px;padding:var(--row-py) 16px;border-top:1px solid var(--line-soft)}
.lrow:first-child{border-top:none}
.lrow .mid{flex:1;min-width:0}
.lrow .mid b{display:block;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lrow .mid small{color:var(--muted);font-size:12.5px}
.lrow .end{text-align:right;flex:none}

/* ── sheet (side panel on desktop, bottom sheet on phone) & dialog ── */
.scrim{position:absolute;inset:0;background:rgba(0,0,0,.55);backdrop-filter:blur(2px);opacity:0;pointer-events:none;transition:opacity .2s;z-index:30}
.scrim.on{opacity:1;pointer-events:auto}
.sheet{position:absolute;right:0;top:0;bottom:0;width:min(440px,100%);background:var(--ground-2);border-left:1px solid var(--line);z-index:31;transform:translateX(102%);transition:transform .28s cubic-bezier(.2,.8,.2,1);display:flex;flex-direction:column}
.sheet.on{transform:none}
.sheet .sh{display:flex;gap:12px;align-items:center;padding:14px 16px;border-bottom:1px solid var(--line-soft);flex:none}
.sheet .sh .t{min-width:0}
.sheet .sh .t b{display:block;font:800 20px/1.1 var(--f-display)}
.sheet .sh .t small{display:block;font-size:12px;color:var(--muted);margin-top:3px}
.sheet .sh .x{margin-left:auto;width:36px;height:36px;border:1px solid var(--line);border-radius:9px;color:var(--muted);font-size:19px;flex:none}
.sheet .sb{padding:16px;overflow-y:auto;flex:1;display:grid;gap:14px;align-content:start;grid-auto-rows:max-content;padding-bottom:calc(20px + var(--bot))}
.dlg-scrim{position:fixed;inset:0;z-index:90;background:rgba(0,0,0,.6);display:grid;place-items:center;padding:16px}
.dlg{width:min(420px,100%);background:var(--ground-2);border:1px solid var(--line);border-radius:14px;padding:18px;box-shadow:0 40px 100px -30px #000}
.dlg h3{font:800 22px/1.1 var(--f-display);margin-bottom:8px}
.dlg p{color:var(--ink-2);font-size:14px}
.dlg .acts{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}
.toast{position:fixed;left:50%;bottom:calc(84px + var(--bot));transform:translate(-50%,16px);z-index:95;background:var(--surface-2);border:1px solid var(--brand);border-radius:10px;padding:11px 16px;font-size:13.5px;opacity:0;transition:.25s;pointer-events:none;max-width:calc(100vw - 32px);display:flex;gap:9px;align-items:center}
.toast.on{transform:translate(-50%,0);opacity:1}
.toast i{width:8px;height:8px;border-radius:50%;background:var(--ok);flex:none}
.toast.bad{border-color:var(--bad)}.toast.bad i{background:var(--bad)}

/* ── phone quick bar ── */
.qbar{display:none;position:absolute;left:10px;right:10px;bottom:calc(10px + var(--bot));height:62px;border:1px solid var(--line);border-radius:18px;background:color-mix(in srgb,var(--surface) 90%,transparent);backdrop-filter:blur(14px);z-index:20;justify-content:space-around;align-items:center}
.qbar button{display:flex;flex-direction:column;align-items:center;gap:3px;font:600 10px/1 var(--f-label);letter-spacing:.05em;color:var(--muted);position:relative;min-width:54px;padding:6px 0}
.qbar button svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.8}
.qbar button[aria-current]{color:var(--accent)}
.qbar .n{position:absolute;top:0;right:8px;min-width:15px;height:15px;border-radius:8px;background:var(--bad);color:#fff;font:700 9px/15px var(--f-mono);text-align:center;padding:0 3px}

/* ── phone ── */
@media (max-width:820px){
  .app{grid-template-columns:1fr}
  .side{position:fixed;inset:0 auto 0 0;width:270px;z-index:45;transform:translateX(-102%);transition:transform .25s}
  .side.open{transform:none;box-shadow:30px 0 80px -30px #000}
  .navscrim{position:fixed;inset:0;z-index:44;background:rgba(0,0,0,.5)}
  .burger{display:grid}
  .topbar{padding:calc(8px + var(--top)) 14px 8px}
  .topbar .live span{display:none}
  .topbar{gap:8px}.pmenu{right:10px;width:min(270px,calc(100vw - 20px))}
  .page{padding:16px 14px calc(100px + var(--bot))}
  .two,.two.even,.three{grid-template-columns:minmax(0,1fr)}
  .arow{grid-template-columns:44px minmax(0,1fr) auto;row-gap:8px}
  .arow .aact{grid-column:2/-1;justify-content:space-between}
  .qbar{display:flex}
  .btn{min-height:44px}.btn.sm{min-height:40px}.star{padding:9px}
  .sheet{width:100%;top:auto;height:88%;border-left:none;border-top:1px solid var(--line);border-radius:20px 20px 0 0;transform:translateY(102%)}
  .sheet.on{transform:none}
}

/* ── owner "Portal look" variants (core.js applyLook sets the data-* attributes; absent = stock look) ── */
html[data-border="subtle"]{--card-bd:var(--line-soft)}
html[data-border="none"]{--card-bd:transparent}
html[data-border="brand"]{--card-bd:color-mix(in srgb,var(--brand) 42%,var(--line))}
html[data-contrast="high"]{--ink:#FFFFFF;--ink-2:#D5D9E0;--muted:#A3AAB6;--line:#3A424E;--line-soft:#2A313B}
html[data-contrast="high"][data-mode="light"]{--ink:#000000;--ink-2:#2F343C;--muted:#555B64;--line:#B9B9B0;--line-soft:#D2D2CA}
html[data-density="compact"]{--pad-card:10px 12px;--pad-cardh:8px 12px;--row-py:7px;--gap:11px;--page-pad:16px}
html[data-density="compact"] body{font-size:14px}
html[data-density="compact"] .card-h{min-height:40px}
html[data-density="compact"] .ph{margin-bottom:12px}
html[data-font="regal"]{--f-display:"Cinzel",Georgia,serif;--f-body:"Alegreya Sans",system-ui,sans-serif;--f-label:"Alegreya Sans SC","Arial Narrow",system-ui,sans-serif}
html[data-font="modern"]{--f-display:"Oswald","Arial Narrow",system-ui,sans-serif;--f-body:"Inter",system-ui,sans-serif;--f-label:"Oswald","Arial Narrow",system-ui,sans-serif}
html[data-font="rune"]{--f-display:"Uncial Antiqua",Georgia,serif}
html[data-font="rune"] :is(.ph h1,.brand .nm,.login-name,.sheet .sh .t b,.dlg h3){font-weight:400}
html[data-font="regal"] .ph h1,html[data-font="modern"] .ph h1{letter-spacing:.01em}
.login-welcome{margin:-12px 0 20px;padding:10px 12px;border:1px solid var(--card-bd);border-left:3px solid var(--accent);border-radius:calc(var(--r-card) - 4px);background:color-mix(in srgb,var(--surface-2) 70%,transparent);font-size:13.5px;color:var(--ink-2);white-space:pre-line;overflow-wrap:anywhere;max-height:9.5em;overflow-y:auto}
.ph .welcome{margin-top:10px;padding:10px 13px;border-left:3px solid var(--accent);border-radius:0 var(--r-ctl) var(--r-ctl) 0;background:color-mix(in srgb,var(--accent) 8%,transparent);color:var(--ink-2);white-space:pre-line;overflow-wrap:anywhere;max-width:72ch}
/* preview mode (owner portal iframe): nothing is clickable into real data */
html.wc-preview .pv-inert{pointer-events:none}
html.wc-preview #live{pointer-events:none}

/* a button that reads like an inline link */
.linkbtn{background:none;border:0;color:var(--brand);font:inherit;text-decoration:underline;text-underline-offset:3px;cursor:pointer;padding:0}

/* member pictures (class icon or upload) inside the round avatar spots */
.u-pic{width:100%;height:100%;object-fit:cover;border-radius:inherit;display:block}
.av.has-pic{background:var(--surface-2);overflow:hidden;padding:0}
