/* Self-hosted fonts: drop the .woff2 files in static/fonts (see fonts/README.txt). Falls back gracefully. */
@font-face{font-family:"ShuBody";src:url(fonts/body-regular.woff2) format("woff2");font-weight:400;font-display:swap}
@font-face{font-family:"ShuBody";src:url(fonts/body-bold.woff2) format("woff2");font-weight:700;font-display:swap}
@font-face{font-family:"ShuHead";src:url(fonts/head-bold.woff2) format("woff2");font-weight:700;font-display:swap}
/* University of Shatra — Activities Platform. Themes via CSS variables. */
:root{--primary:#0F2A5C;--primary-2:#1B3F7F;--accent:#C9A24D;--accent-soft:#F4EAD2;--bg:#EEF1F6;--surface:#FFFFFF;--surface-2:#F6F8FB;
--ink:#1B2233;--muted:#5B6478;--line:#DDE2EC;--ok:#1E7B4F;--warn:#B7791F;--bad:#B42318;--info:#1F5FA8;
--c1:#0F2A5C;--c2:#C9A24D;--c3:#2E7D6B;--c4:#8A3B52;--c5:#4E6FAE;--c6:#B98A2F;--radius:14px;--radius-s:9px;
--shadow:0 1px 2px rgba(15,42,92,.06),0 6px 20px rgba(15,42,92,.06);--side:272px;
--font:"ShuBody","IBM Plex Sans Arabic","Noto Naskh Arabic","Segoe UI",Tahoma,"DejaVu Sans",Arial,sans-serif;--font-head:"ShuHead","Reem Kufi","Noto Kufi Arabic","Segoe UI",Tahoma,"DejaVu Sans",Arial,sans-serif}
[data-theme=emerald]{--primary:#0B5D4B;--primary-2:#127A62;--accent:#C9A24D;--bg:#EDF4F1;--c1:#0B5D4B;--c3:#1F5FA8}
[data-theme=petrol]{--primary:#0E4C5E;--primary-2:#16677D;--accent:#D4A857;--bg:#ECF3F5;--c1:#0E4C5E}
[data-theme=burgundy]{--primary:#6B1E2E;--primary-2:#8A2A3E;--accent:#C9A24D;--bg:#F5EFF1;--c1:#6B1E2E;--c4:#0F2A5C}
[data-theme=sand]{--primary:#6E4F31;--primary-2:#8A6641;--accent:#B8860B;--bg:#F3EDE3;--surface-2:#FAF6EF;--line:#E4D9C8;--c1:#6E4F31;--c2:#B8860B}
[data-theme=ahwar]{--primary:#1F5F5B;--primary-2:#2A7A74;--accent:#B9C27A;--accent-soft:#EEF1DA;--bg:#EEF4F2;--c1:#1F5F5B;--c2:#B9C27A;--c3:#4E8FA8}
[data-theme=charcoal],[data-theme=goldnight],[data-mode=dark]{--bg:#14171C;--surface:#1D2128;--surface-2:#242932;--ink:#E8EAF0;--muted:#9AA3B5;--line:#323845;
--shadow:0 1px 2px rgba(0,0,0,.3),0 8px 24px rgba(0,0,0,.25);--accent-soft:#3A3322}
[data-theme=goldnight]{--primary:#0B1426;--primary-2:#15223D;--accent:#E0B94F;--bg:#070D1A;--surface:#0F1830;--surface-2:#15203C;--line:#24314F;--c1:#E0B94F;--c2:#6F8FC9}
[data-theme=charcoal]{--primary:#2B3038;--primary-2:#3A414C;--accent:#D4AF37;--c1:#D4AF37;--c2:#6F8FC9}
[data-mode=dark][data-theme=royal]{--primary:#16336B}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font);font-size:15.5px;line-height:1.7;font-variant-numeric:lining-nums}
h1,h2,h3{font-family:var(--font-head);line-height:1.35;margin:0 0 .6em}
h1{font-size:1.55rem}h2{font-size:1.12rem}h3{font-size:1rem}
a{color:var(--primary-2)}[data-mode=dark] a,[data-theme=charcoal] a{color:#9DB7EA}
p{margin:0 0 .8em}
.ic{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex:none;vertical-align:middle}
.opt-gold .side .ic,.opt-gold .kpi-ic .ic,.opt-gold .card h2 .ic{color:var(--accent)}
:focus-visible{outline:3px solid var(--accent);outline-offset:2px}
.muted{color:var(--muted)}.small{font-size:.88rem}.center{text-align:center}.mono{font-family:ui-monospace,Consolas,monospace}
.req{color:var(--bad)}
/* ---------- shell ---------- */
.shell{display:flex;min-height:100vh}
.side{width:var(--side);background:var(--primary);color:#E9EDF6;position:sticky;top:0;height:100vh;display:flex;flex-direction:column;flex:none;z-index:30}
.opt-pattern .side{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='48' height='24'%3E%3Cpath d='M0 24l12-12 12 12 12-12 12 12M0 12L12 0l12 12L36 0l12 12' fill='none' stroke='%23C9A24D' stroke-opacity='.09' stroke-width='1.2'/%3E%3C/svg%3E")}
.side::after{content:"";position:absolute;inset-block:0;inset-inline-end:0;width:3px;background:linear-gradient(var(--accent),transparent 70%)}
.brand{display:flex;gap:.7rem;align-items:center;padding:1.1rem 1.1rem .9rem;color:#fff;text-decoration:none;border-bottom:1px solid rgba(255,255,255,.08)}
.brand-logo{width:44px;height:44px;border-radius:50%;background:#fff;object-fit:contain;padding:2px}
.brand span{display:flex;flex-direction:column;line-height:1.3}.brand b{font-family:var(--font-head);font-size:.98rem}.brand small{opacity:.75;font-size:.8rem}
.side-nav{overflow-y:auto;padding:.4rem .6rem 2rem;flex:1;scrollbar-width:thin}
.grp summary{list-style:none;cursor:pointer;font-size:.78rem;opacity:.65;padding:.8rem .6rem .3rem}
.grp summary::-webkit-details-marker{display:none}
.grp summary::after{content:"‹";float:inline-end;transition:transform .2s}.grp[open] summary::after{transform:rotate(-90deg)}
.side-nav a{display:flex;align-items:center;gap:.7rem;padding:.52rem .7rem;border-radius:10px;color:#DCE3F1;text-decoration:none;font-size:.95rem;margin:1px 0}
.side-nav a:hover{background:rgba(255,255,255,.07);color:#fff}
.side-nav a.active{background:rgba(201,162,77,.16);color:#fff;box-shadow:inset -3px 0 0 var(--accent)}
[dir=ltr] .side-nav a.active{box-shadow:inset 3px 0 0 var(--accent)}
.main{flex:1;min-width:0;display:flex;flex-direction:column}
.top{display:flex;align-items:center;gap:.8rem;padding:.7rem 1.4rem;background:var(--surface);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20}
.opt-glass .top{background:color-mix(in srgb,var(--surface) 82%,transparent);backdrop-filter:blur(10px)}
.search-trigger{display:flex;align-items:center;gap:.6rem;flex:1;max-width:460px;background:var(--surface-2);border:1px solid var(--line);border-radius:999px;padding:.45rem .9rem;color:var(--muted);cursor:pointer;font:inherit}
.search-trigger kbd{margin-inline-start:auto;font-size:.72rem;border:1px solid var(--line);border-radius:6px;padding:0 .4rem;direction:ltr}
.top-actions{display:flex;align-items:center;gap:.35rem;margin-inline-start:auto}.top-actions form{margin:0}
.icon-btn{display:inline-flex;align-items:center;gap:.25rem;background:none;border:0;padding:.45rem;border-radius:10px;color:var(--ink);cursor:pointer;position:relative;text-decoration:none;font:inherit}
.icon-btn:hover{background:var(--surface-2)}.icon-btn .lbl{font-size:.8rem;font-weight:700}
.bell .dot{position:absolute;top:0;inset-inline-end:0;background:var(--bad);color:#fff;font-style:normal;font-size:.68rem;min-width:18px;height:18px;border-radius:9px;display:grid;place-items:center;padding:0 4px}
.me{position:relative}.me summary{list-style:none;display:flex;align-items:center;gap:.5rem;cursor:pointer;padding:.25rem .5rem;border-radius:999px}
.me summary::-webkit-details-marker{display:none}.me summary:hover{background:var(--surface-2)}
.avatar{width:34px;height:34px;border-radius:50%;background:var(--accent);color:#1B2233;display:grid;place-items:center;font-weight:700}
.me-name{max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.92rem}
.menu{position:absolute;inset-inline-end:0;top:115%;background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);min-width:230px;padding:.5rem;display:flex;flex-direction:column}
.menu a,.menu button{padding:.5rem .7rem;border-radius:8px;text-decoration:none;color:var(--ink);background:none;border:0;text-align:start;font:inherit;cursor:pointer;display:flex;gap:.4rem;align-items:center;width:100%}
.menu a:hover,.menu button:hover{background:var(--surface-2)}.menu small{color:var(--muted);padding:.2rem .7rem}
.content{padding:1.5rem 1.6rem 2.5rem;max-width:1400px;width:100%;margin-inline:auto;flex:1}
.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:1rem;margin-bottom:1.2rem;flex-wrap:wrap}
.page-head h1{margin:0;position:relative;padding-bottom:.35rem}.page-head h1::after{content:"";position:absolute;bottom:0;inset-inline-start:0;width:46px;height:3px;background:var(--accent);border-radius:2px}
.page-head p{margin:.3rem 0 0;color:var(--muted)}.head-actions{display:flex;gap:.5rem;flex-wrap:wrap}
.foot{padding:1rem 1.6rem;color:var(--muted);font-size:.82rem;border-top:1px solid var(--line);text-align:center}.ver{direction:ltr;opacity:.7}
.imp-bar{background:var(--accent);color:#1B2233;display:flex;gap:1rem;align-items:center;justify-content:center;padding:.45rem;font-size:.92rem;position:sticky;top:0;z-index:50}
.imp-bar form{margin:0}
.announce{background:var(--accent-soft);color:var(--ink);padding:.6rem 1.6rem;border-bottom:1px solid var(--line);display:flex;gap:.6rem;align-items:center}
.only-m{display:none}
/* ---------- cards & grids ---------- */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:1.2rem 1.3rem;margin-bottom:1.2rem;box-shadow:var(--shadow)}
.opt-glass .card{background:color-mix(in srgb,var(--surface) 90%,transparent);backdrop-filter:blur(6px)}
.card-h{display:flex;justify-content:space-between;align-items:center;gap:.6rem;flex-wrap:wrap}.card-h h2{margin:0}
.card.note{background:var(--accent-soft);border-color:transparent}
.card.narrow{max-width:520px;margin-inline:auto}
.cols-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1.2rem;margin-bottom:1.2rem}.cols-2>.card,.cols-2>div>.card:last-child{margin-bottom:0}
.cols-2.wide-first{grid-template-columns:minmax(0,1.6fr) minmax(0,1fr)}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:1rem;margin-bottom:1.2rem}
.kpi{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:1rem 1.1rem;display:flex;flex-direction:column;gap:.1rem;position:relative;overflow:hidden;box-shadow:var(--shadow)}
.kpi b{font-size:2rem;font-family:var(--font-head);color:var(--primary);line-height:1.2}[data-mode=dark] .kpi b,[data-theme=charcoal] .kpi b{color:var(--accent)}
.kpi span:last-child{color:var(--muted);font-size:.9rem}.kpi-ic{position:absolute;inset-inline-end:.9rem;top:.9rem;opacity:.9}
.kpi::before{content:"";position:absolute;inset-inline-start:0;top:0;bottom:0;width:4px;background:var(--accent)}
.kpis.small .kpi b{font-size:1.4rem}.kpis.small .kpi{padding:.7rem .9rem}
/* ---------- buttons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;background:var(--primary);color:#fff;border:1px solid transparent;border-radius:10px;padding:.55rem 1.05rem;font:inherit;font-weight:600;cursor:pointer;text-decoration:none;line-height:1.3;white-space:nowrap}
.btn:hover{background:var(--primary-2)}.btn.ghost{background:transparent;color:var(--primary);border-color:var(--line)}.btn.ghost:hover{background:var(--surface-2)}
[data-mode=dark] .btn.ghost,[data-theme=charcoal] .btn.ghost{color:var(--ink)}
.btn.gold{background:var(--accent);color:#1B2233}.btn.gold:hover{filter:brightness(1.05)}
.btn.danger{color:var(--bad)}.btn.sm{padding:.3rem .65rem;font-size:.85rem;border-radius:8px}.btn.big{padding:.8rem 1.6rem;font-size:1.05rem}
.btn.block{width:100%}.btn-row{display:flex;flex-wrap:wrap;gap:.5rem;margin:.8rem 0}.btn-col{display:flex;flex-direction:column;gap:.5rem}.btn-col form{display:flex;flex-direction:column;gap:.5rem}
form.inl,.inl{display:inline}
.opt-motion .btn,.opt-motion .side-nav a{transition:background-color .18s,box-shadow .18s,transform .18s}
.opt-motion .act-card,.opt-motion .report-card,.opt-motion .cert-card{transition:transform .18s}
.opt-motion .act-card:hover,.opt-motion .report-card:hover,.opt-motion .cert-card:hover{transform:translateY(-2px)}
/* ---------- forms ---------- */
input,select,textarea{font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-s);padding:.52rem .7rem;width:100%;min-height:42px}
textarea{min-height:auto;resize:vertical}input[type=checkbox],input[type=radio]{width:auto;min-height:auto;accent-color:var(--primary)}
input:focus,select:focus,textarea:focus{border-color:var(--accent);outline:none;box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 30%,transparent)}
.grid-f{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.9rem 1.2rem}
.field{display:flex;flex-direction:column;gap:.3rem;margin-bottom:.4rem}.field.wide,.fsec{grid-column:1/-1}.field label{font-weight:600;font-size:.92rem}
.fsec{margin:.8rem 0 0;padding-top:.8rem;border-top:1px dashed var(--line);color:var(--primary)}
.help{color:var(--muted);font-size:.82rem}.err{color:var(--bad);font-size:.85rem}.has-err input,.has-err select{border-color:var(--bad)}
.check{display:flex!important;align-items:center;gap:.5rem;font-weight:400!important;cursor:pointer;margin:.2rem 0}
.multi{display:flex;flex-wrap:wrap;gap:.3rem 1.2rem}
fieldset{border:1px solid var(--line);border-radius:var(--radius-s);padding:.8rem 1rem;margin:0 0 1rem}legend{font-weight:700;padding:0 .4rem}
.form-actions{display:flex;gap:.6rem;margin-top:1rem;flex-wrap:wrap}
.inline-form{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;margin:.4rem 0}.inline-form input,.inline-form select{width:auto;flex:1;min-width:140px}.inline-form input.num{max-width:100px;flex:none;min-width:80px}
.code-in{font-size:1.6rem;letter-spacing:.5em;text-align:center}
.alert{padding:.75rem 1rem;border-radius:10px;margin-bottom:1rem;border:1px solid}.alert.bad{background:#FDECEA;border-color:#F5C2BC;color:#7A1A12}
.alert.ok{background:#E7F5EE;border-color:#B7E0CA;color:#14532D}.alert.warn{background:#FFF6E0;border-color:#F3DC9B;color:#6B4A07}
/* ---------- filters / tables ---------- */
.filters{display:flex;flex-wrap:wrap;gap:.7rem;align-items:flex-end;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:.9rem 1rem;margin-bottom:1rem}
.ff{display:flex;flex-direction:column;gap:.2rem;min-width:150px;flex:1}.ff label{font-size:.8rem;color:var(--muted)}.ff-actions{flex-direction:row;flex-wrap:wrap;gap:.4rem;flex:2;align-items:flex-end}
.table-wrap{overflow-x:auto;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:1rem}
.tbl{width:100%;border-collapse:collapse;font-size:.93rem}
.tbl th{text-align:start;font-weight:700;color:var(--ink);padding:.7rem .8rem;border-bottom:2px solid var(--accent);white-space:nowrap;background:var(--surface-2)}
.tbl td{padding:.6rem .8rem;border-bottom:1px solid var(--line);vertical-align:middle}.tbl tr:last-child td{border-bottom:0}
.tbl tbody tr:hover{background:var(--surface-2)}.tbl .chk{width:36px}.tbl td.c{text-align:center}.tbl .actions{white-space:nowrap}
.bulk-bar{position:sticky;bottom:0;display:flex;flex-wrap:wrap;gap:.4rem;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:.6rem;box-shadow:var(--shadow);margin-bottom:1rem}
.pager{display:flex;gap:.3rem;flex-wrap:wrap}.pager a,.pager span{padding:.3rem .7rem;border-radius:8px;border:1px solid var(--line);text-decoration:none;color:var(--ink)}.pager a.on{background:var(--primary);color:#fff}
.count{color:var(--muted);font-size:.85rem}
.badge{display:inline-block;padding:.12rem .6rem;border-radius:999px;font-size:.8rem;font-weight:600;border:1px solid currentColor;white-space:nowrap;line-height:1.5;background:var(--surface)}
.b-ok{color:var(--ok)}.b-warn{color:var(--warn)}.b-bad{color:var(--bad)}.b-info{color:var(--info)}.b-muted{color:var(--muted)}.b-gold{color:#7A5B12;background:var(--accent-soft);border-color:var(--accent)}
[data-mode=dark] .b-info,[data-theme=charcoal] .b-info{color:#8FB4F0}[data-mode=dark] .b-ok,[data-theme=charcoal] .b-ok{color:#6FD1A0}[data-mode=dark] .b-gold{color:var(--accent)}
.pct{display:inline-block;min-width:3.4em;text-align:center;font-weight:700;border-radius:6px;padding:0 .4rem;border:1.5px solid}.p-ok{color:var(--ok)}.p-warn{color:var(--warn)}.p-bad{color:var(--bad)}
.pill{display:inline-block;background:var(--surface-2);border:1px solid var(--line);border-radius:999px;padding:.05rem .6rem;font-size:.82rem}
.plain{list-style:none;padding:0;margin:0}.plain li{padding:.35rem 0;border-bottom:1px dashed var(--line)}.plain li:last-child{border:0}
.dl{display:grid;grid-template-columns:max-content 1fr;gap:.4rem 1.2rem;margin:0 0 1rem;text-align:start}.dl dt{color:var(--muted)}.dl dd{margin:0;font-weight:600}
.tabs{display:flex;gap:.3rem;border-bottom:1px solid var(--line);margin-bottom:1rem;flex-wrap:wrap}.tabs a{padding:.6rem 1rem;text-decoration:none;color:var(--muted);border-bottom:3px solid transparent}.tabs a.on{color:var(--primary);border-color:var(--accent);font-weight:700}
[data-mode=dark] .tabs a.on{color:var(--accent)}
/* ---------- empty / errors ---------- */
.empty{text-align:center;padding:2.5rem 1rem;color:var(--muted)}.empty-art{width:84px;height:84px;fill:none;stroke:var(--accent);stroke-width:1.6;opacity:.8}.empty h3{color:var(--ink);margin:.6rem 0 .3rem}
.err-page{text-align:center;padding:4rem 1rem}.err-page b{font-size:5rem;font-family:var(--font-head);color:var(--accent);display:block;line-height:1}
/* ---------- dashboard ---------- */
.tasks{border-inline-start:4px solid var(--accent)}.tasks ol{margin:.6rem 0 0;padding-inline-start:1.3rem}.tasks li{margin:.25rem 0}
.queue{list-style:none;padding:0;margin:0}.queue li{border-inline-start:3px solid var(--accent);background:var(--surface-2);border-radius:8px;margin:.4rem 0}
.queue a{display:block;padding:.55rem .8rem;text-decoration:none;color:var(--ink)}
.act-mini{list-style:none;padding:0;margin:0}.act-mini a{display:flex;flex-direction:column;padding:.5rem 0;border-bottom:1px dashed var(--line);text-decoration:none;color:var(--ink)}.act-mini small{color:var(--muted)}
.chart-donut{display:flex;gap:1rem;align-items:center;flex-wrap:wrap}.legend{list-style:none;padding:0;margin:0}.legend li{display:flex;gap:.4rem;align-items:center;font-size:.9rem}.legend i{width:12px;height:12px;border-radius:3px;display:inline-block}
.donut-total{font-size:22px;font-weight:700;fill:var(--ink)}.bars{width:100%;height:auto}.bar-v{font-size:13px;fill:var(--ink);font-weight:700}.bar-l{font-size:12px;fill:var(--muted)}
.badges-row{display:flex;flex-wrap:wrap;gap:.7rem}.medal{display:flex;flex-direction:column;align-items:center;gap:.2rem;padding:.7rem .9rem;border-radius:12px;background:var(--accent-soft);border:1px solid var(--accent);min-width:96px;text-align:center}.medal .ic{width:30px;height:30px;color:var(--accent)}.medal b{font-size:.85rem}
.notif{list-style:none;padding:1rem 1.3rem}.notif li{padding:.6rem 0;border-bottom:1px dashed var(--line)}.notif li.unread{font-weight:700}
/* ---------- activity ---------- */
.act-hero{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(260px,1fr);gap:1.2rem;background:var(--primary);color:#fff;border-radius:var(--radius);padding:1.6rem;margin-bottom:1.2rem;position:relative;overflow:hidden}
.act-hero::before{content:"";position:absolute;inset:0;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='60' height='30'%3E%3Cpath d='M0 30l15-15 15 15 15-15 15 15' fill='none' stroke='%23C9A24D' stroke-opacity='.18' stroke-width='1.5'/%3E%3C/svg%3E");pointer-events:none}
.act-hero>*{position:relative}.act-hero h1{font-size:1.7rem;margin:.5rem 0}.act-facts{display:flex;flex-wrap:wrap;gap:.4rem 1.2rem;opacity:.92;font-size:.93rem}.act-facts span{display:inline-flex;gap:.35rem;align-items:center}
.act-hero .pill{background:rgba(255,255,255,.12);color:#fff;border-color:rgba(255,255,255,.2)}
.act-cta{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.14);border-radius:12px;padding:1rem;display:flex;flex-direction:column;gap:.6rem;align-self:start}
.act-cta .btn.ghost{color:#fff;border-color:rgba(255,255,255,.35)}.act-cta label{color:#fff}.act-cta .muted{color:#dfe6f3}.act-cta .btn:not(.ghost):not(.gold){background:var(--accent);color:#1B2233}
.share{display:flex;flex-wrap:wrap;gap:.4rem}.my-reg{display:flex;flex-direction:column;gap:.2rem}
.cat-cultural.act-hero{background:#5B2A4E}.cat-sports.act-hero{background:#1F5A3C}.cat-volunteer.act-hero{background:#7A4A12}
.prose{line-height:1.9}
.stars{display:flex;flex-direction:row-reverse;justify-content:flex-end;gap:.2rem}.stars input{display:none}.stars label{font-size:1.8rem;color:var(--line);cursor:pointer}
.stars input:checked~label,.stars label:hover,.stars label:hover~label{color:var(--accent)}.stars-avg b{font-size:1.8rem;color:var(--accent)}
.album{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:.6rem}.album figure{margin:0}.album img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:10px;display:block}
.cert-grid,.report-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:1rem}
.cert-card,.report-card{display:flex;flex-direction:column;gap:.3rem;padding:1.1rem;border-radius:var(--radius);background:var(--surface);border:1px solid var(--line);text-decoration:none;color:var(--ink);box-shadow:var(--shadow);border-top:4px solid var(--accent)}
.cert-card .ic,.report-card .ic{width:30px;height:30px;color:var(--accent)}.cert-card small,.report-card small{color:var(--muted)}
.scan{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:1.2rem}.scan-cam{display:flex;flex-direction:column;align-items:center;gap:.6rem;margin:1rem 0}
.scan-cam video{width:100%;max-width:420px;border-radius:12px;border:3px solid var(--accent);background:#000}
.scan-result{min-height:3.4rem;padding:.8rem;border-radius:10px;font-weight:700;text-align:center;font-size:1.1rem}.scan-result.ok{background:#E7F5EE;color:#14532D}.scan-result.bad{background:#FDECEA;color:#7A1A12}
.offline-note{background:var(--accent-soft);padding:.6rem;border-radius:8px}
.qr-box,.qr-big{display:flex;justify-content:center;margin:1rem 0}.qr-big svg{width:min(280px,80vw);height:auto;background:#fff;padding:6px;border-radius:12px}.qr-box svg{background:#fff;border-radius:8px}
body.live{background:var(--primary);color:#fff;margin:0;min-height:100vh;display:grid;place-items:center;text-align:center;font-family:var(--font)}
.live-in{padding:2rem}.live-logo{width:80px;height:80px;background:#fff;border-radius:50%;padding:4px}.live-qr svg{width:min(62vh,82vw);height:auto;background:#fff;padding:14px;border-radius:18px}.live .muted{color:#cbd5e8}
/* public */
.pub-top{display:flex;align-items:center;justify-content:space-between;padding:.8rem 1.6rem;background:var(--primary);color:#fff;flex-wrap:wrap;gap:.6rem}
.pub-top nav{display:flex;gap:1rem;align-items:center;flex-wrap:wrap}.pub-top nav a{color:#fff;text-decoration:none}.pub-top .btn{background:var(--accent);color:#1B2233}
.pub-hero{margin:0 0 1.4rem}.pub-hero h1{font-size:1.9rem}.chips{display:flex;flex-wrap:wrap;gap:.4rem}.chips a{padding:.35rem .9rem;border-radius:999px;border:1px solid var(--line);text-decoration:none;color:var(--ink);background:var(--surface)}.chips a.on{background:var(--primary);color:#fff;border-color:var(--primary)}
.act-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1rem}
.act-card{display:flex;gap:1rem;padding:1rem;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);text-decoration:none;color:var(--ink);box-shadow:var(--shadow)}
.act-card h3{margin:0 0 .3rem;font-size:1.02rem}.act-card p{margin:0;color:var(--muted);font-size:.88rem}
.act-date{flex:none;width:64px;height:70px;border-radius:12px;background:var(--primary);color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;border-bottom:4px solid var(--accent)}
.act-date b{font-size:1.6rem;line-height:1}.act-date small{font-size:.72rem;opacity:.85;direction:ltr}
.cat-cultural .act-date{background:#5B2A4E}.cat-sports .act-date{background:#1F5A3C}.cat-volunteer .act-date{background:#7A4A12}
.pub-title{text-align:center}.verify .seal{width:84px;height:84px;border-radius:50%;margin:0 auto 1rem;display:grid;place-items:center;font-size:2.6rem;color:#fff;background:var(--ok);box-shadow:0 0 0 6px var(--accent-soft)}
.verify.bad .seal{background:var(--bad)}.attend-res .big-ic{font-size:4rem;color:var(--ok)}.attend-res.bad .big-ic{color:var(--bad)}
.cal-head{display:flex;gap:1rem;align-items:center;justify-content:center;margin-bottom:1rem}.cal-head h2{margin:0;direction:ltr}
.cal{width:100%;border-collapse:collapse;table-layout:fixed}.cal th{padding:.5rem;border-bottom:2px solid var(--accent);font-size:.85rem}
.cal td{height:110px;vertical-align:top;border:1px solid var(--line);padding:.3rem}.cal td.blank{background:var(--surface-2)}.cal td.today{box-shadow:inset 0 0 0 2px var(--accent)}
.cal-ev{display:block;font-size:.76rem;padding:.15rem .35rem;margin-top:.2rem;border-radius:6px;background:var(--primary);color:#fff!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cal-ev.cat-cultural{background:#5B2A4E}.cal-ev.cat-sports{background:#1F5A3C}.cal-ev.cat-volunteer{background:#7A4A12}
/* auth */
.auth{display:grid;grid-template-columns:1.1fr 1fr;min-height:100vh}
.auth-art{background:var(--primary) center/cover no-repeat;position:relative;display:grid;place-items:center;color:#fff;text-align:center}
.auth-art::before{content:"";position:absolute;inset:0;background:linear-gradient(160deg,color-mix(in srgb,var(--primary) 90%,transparent),color-mix(in srgb,var(--primary) 60%,transparent))}
.auth-art-in{position:relative;padding:2rem}.auth-art h2{font-size:2rem;margin:.8rem 0 .2rem}
.logo-anim{width:132px;height:132px;border-radius:50%;background:#fff;padding:6px;box-shadow:0 0 0 6px rgba(201,162,77,.35)}
.opt-motion .logo-anim{animation:glow 3.2s ease-in-out infinite}@keyframes glow{50%{box-shadow:0 0 0 14px rgba(201,162,77,.08)}}
.auth-box{padding:3rem clamp(1.5rem,5vw,4.5rem);display:flex;flex-direction:column;justify-content:center;max-width:560px;width:100%;margin-inline:auto;position:relative}
.auth-lang{position:absolute;top:1rem;inset-inline-end:1.4rem;font-size:.9rem}
/* about */
.about-hero{display:flex;gap:1.6rem;align-items:center;background:var(--primary);color:#fff;border-radius:var(--radius);padding:2rem;margin-bottom:1.2rem;flex-wrap:wrap}
.about-hero h1{font-size:2rem}.ver-pill{display:inline-block;background:var(--accent);color:#1B2233;border-radius:999px;padding:.15rem .8rem;font-weight:700}
.levels{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:.8rem}.level{padding:.8rem;border-radius:10px;background:var(--surface-2);border-inline-start:4px solid var(--accent)}.level p{margin:0;color:var(--muted);font-size:.9rem}
.features{columns:2;gap:2rem}.features li{margin:.3rem 0}
.dev-card{display:flex;gap:1rem;align-items:center;border:1px solid var(--accent)}.dev-mark .ic{width:46px;height:46px;color:var(--accent)}.dev-card b{font-size:1.2rem;display:block}.dev-card p{margin:0;color:var(--muted)}
.themes{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.7rem;margin-bottom:1rem}
.theme-card{display:flex;flex-direction:column;gap:.4rem;padding:.8rem;border:2px solid var(--line);border-radius:12px;cursor:pointer}.theme-card:has(input:checked){border-color:var(--accent)}
.theme-card input{position:absolute;opacity:0}.sw{display:flex;height:34px;border-radius:8px;overflow:hidden}.sw i{flex:1}
.score-wrap{display:flex;gap:2rem;align-items:center;flex-wrap:wrap}.score{width:170px;height:170px;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;border:10px solid var(--ok);text-align:center}
.score.s-warn{border-color:var(--warn)}.score.s-bad{border-color:var(--bad)}.score b{font-size:2.4rem}.score span{font-size:.8rem;color:var(--muted);padding:0 .8rem}
.checks{list-style:none;padding:0;margin:0;flex:1}.checks li{padding:.35rem 0}.checks li.ok{color:var(--ok)}.checks li.bad{color:var(--bad)}
.flags{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:.6rem}
.switch{display:flex;align-items:center;gap:.6rem;cursor:pointer;padding:.5rem;border-radius:10px;background:var(--surface-2)}.switch input{position:absolute;opacity:0}
.switch span{width:42px;height:24px;border-radius:12px;background:var(--line);position:relative;flex:none;transition:background .2s}.switch span::after{content:"";position:absolute;top:3px;inset-inline-start:3px;width:18px;height:18px;border-radius:50%;background:#fff;transition:inset-inline-start .2s}
.switch input:checked+span{background:var(--ok)}.switch input:checked+span::after{inset-inline-start:21px}
.matrix td,.matrix th{text-align:center}.matrix td:first-child,.matrix th:first-child{text-align:start}
.struct summary{cursor:pointer;display:flex;gap:.6rem;align-items:center;flex-wrap:wrap}
.faq summary{cursor:pointer;font-weight:700}.faq p{margin:.8rem 0 0}
.podium{list-style:none;padding:0;margin:0}.podium li{display:flex;align-items:center;gap:1rem;padding:.7rem 1rem;background:var(--surface);border:1px solid var(--line);border-radius:12px;margin-bottom:.5rem}
.podium .rank{width:38px;height:38px;border-radius:50%;display:grid;place-items:center;background:var(--surface-2);font-weight:700;flex:none}.podium small{color:var(--muted)}.podium .pts{margin-inline-start:auto;font-weight:700;color:var(--primary)}
.podium .top1 .rank{background:#D4AF37;color:#fff}.podium .top2 .rank{background:#A7B0BE;color:#fff}.podium .top3 .rank{background:#B87333;color:#fff}.podium li.me{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}
/* palette, help, toasts, tour */
.palette{position:fixed;inset:0;background:rgba(10,18,35,.45);z-index:100;display:flex;justify-content:center;padding-top:12vh}
.palette[hidden],.help-pop[hidden]{display:none}.pal-box{width:min(620px,92vw);background:var(--surface);border-radius:14px;box-shadow:0 20px 60px rgba(0,0,0,.3);overflow:hidden;align-self:flex-start}
.pal-box input{border:0;border-bottom:1px solid var(--line);border-radius:0;font-size:1.1rem;padding:1rem 1.2rem}
.pal-box ul{list-style:none;margin:0;padding:.4rem;max-height:55vh;overflow:auto}.pal-box li a{display:flex;justify-content:space-between;gap:1rem;padding:.6rem .8rem;border-radius:8px;text-decoration:none;color:var(--ink)}
.pal-box li a small{color:var(--muted)}.pal-box li.on a,.pal-box li a:hover{background:var(--surface-2)}
.help-pop{position:fixed;bottom:1.2rem;inset-inline-end:1.2rem;max-width:380px;background:var(--surface);border:1px solid var(--accent);border-radius:12px;box-shadow:var(--shadow);padding:1rem 1.1rem;z-index:90}
.toasts{position:fixed;bottom:1rem;inset-inline-start:1rem;display:flex;flex-direction:column;gap:.5rem;z-index:120;max-width:min(460px,92vw)}
.toast{background:var(--primary);color:#fff;padding:.75rem 1rem;border-radius:10px;box-shadow:var(--shadow);border-inline-start:4px solid var(--accent);word-break:break-word}
.toast.t-bad{background:#8E1C12}.toast.t-ok{background:#14532D}
.opt-motion .toast{animation:tin .25s ease-out}@keyframes tin{from{opacity:0;transform:translateY(8px)}}
.tour-tip{position:absolute;z-index:110;background:var(--primary);color:#fff;padding:.8rem 1rem;border-radius:10px;max-width:300px;box-shadow:var(--shadow)}
.tour-tip .btn{margin-top:.5rem;background:var(--accent);color:#1B2233}
.tour-hl{position:relative;z-index:105;box-shadow:0 0 0 4px var(--accent),0 0 0 9999px rgba(10,18,35,.45)!important;border-radius:10px}
.autosave-note{background:var(--accent-soft);padding:.5rem .8rem;border-radius:8px;margin-bottom:.8rem;display:flex;gap:.6rem;align-items:center;flex-wrap:wrap}
/* kiosk */
body.kiosk{margin:0;background:var(--primary);color:#fff;height:100vh;display:flex;flex-direction:column;overflow:hidden;font-family:var(--font)}
.k-head{display:flex;align-items:center;gap:1rem;padding:1rem 2rem;border-bottom:2px solid var(--accent);font-size:1.3rem}.k-head img{width:60px;height:60px;background:#fff;border-radius:50%}.k-head span{margin-inline-start:auto;direction:ltr}
.k-stage{flex:1;display:grid;place-items:center;text-align:center;padding:2rem}.k-stage h2{font-size:3rem;color:var(--accent)}.k-stage p{font-size:2.2rem}
.k-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:2rem}.k-stats b{display:block;font-size:5rem;color:#fff}.k-stats span{font-size:1.5rem;color:var(--accent)}
.k-qr svg{width:220px;height:auto;background:#fff;padding:8px;border-radius:12px}.k-bar{height:6px;background:rgba(255,255,255,.1)}.k-bar i{display:block;height:100%;background:var(--accent);width:0}
.opt-motion .k-bar i{transition:width 15s linear}
@media (max-width:980px){.cols-2,.cols-2.wide-first,.scan,.act-hero{grid-template-columns:1fr}.auth{grid-template-columns:1fr}.auth-art{min-height:220px}.features{columns:1}}
@media (max-width:860px){.side{position:fixed;inset-inline-start:0;transform:translateX(100%);transition:transform .25s;box-shadow:0 0 40px rgba(0,0,0,.3)}[dir=ltr] .side{transform:translateX(-100%)}
.side.open{transform:none}.only-m{display:inline-flex}.content{padding:1rem}.grid-f{grid-template-columns:1fr}.me-name,.search-trigger span,.search-trigger kbd{display:none}.search-trigger{flex:0}.top{padding:.6rem .8rem}.k-stats{grid-template-columns:repeat(2,1fr)}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media print{.side,.top,.foot,.filters,.bulk-bar,.head-actions,.no-print,.toasts,.announce{display:none!important}.card{box-shadow:none;border:0}body{background:#fff}}
.set-prev{max-height:90px;max-width:260px;object-fit:contain;background:#fff;border:1px solid var(--line);border-radius:10px;padding:4px;align-self:flex-start}
.auth-foot{margin-top:2.5rem;color:var(--muted);font-size:.8rem;text-align:center}
.hbars{display:flex;flex-direction:column;gap:.45rem}.hb{display:grid;grid-template-columns:minmax(90px,38%) 1fr 2.5rem;gap:.6rem;align-items:center;font-size:.88rem}
.hb-l{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted)}.hb-t{background:var(--surface-2);border-radius:6px;height:14px;overflow:hidden}.hb-t i{display:block;height:100%;border-radius:6px}.hb b{text-align:end}
@media (max-width:860px){.side:not(.open){box-shadow:none}}
.hp{position:absolute!important;left:-9999px;width:1px;height:1px;overflow:hidden}
.sudo-ic .ic{width:54px;height:54px;color:var(--accent);display:block;margin:0 auto .6rem}

/* ---- v1.1 identity & polish ---- */
body.fs-s{font-size:14px}body.fs-l{font-size:17.5px}
body.dense .tbl td{padding:.35rem .6rem}body.dense .tbl th{padding:.45rem .6rem}
.logos{display:flex;gap:.35rem;flex:none}.brand .logos .brand-logo{width:40px;height:40px}
.gov-ribbon{background:#081735;color:#E9D9AE;text-align:center;font-size:.82rem;padding:.3rem 1rem;letter-spacing:.01em}
.gov-lines{margin:0 0 1rem;color:#E9D9AE;font-size:.95rem;line-height:1.7}
.logo-pair{display:flex;gap:1.2rem;justify-content:center}.logo-pair .logo-anim{width:118px;height:118px}
.auth-art{transition:background-image .8s}
.crumbs{display:flex;gap:.4rem;font-size:.82rem;color:var(--muted);margin-bottom:.2rem}.crumbs a{color:var(--muted);text-decoration:none}
.crumbs>*+*::before{content:"/";margin-inline-end:.4rem;opacity:.6}
.hello{display:flex;justify-content:space-between;align-items:flex-end;gap:1rem;flex-wrap:wrap;margin-bottom:1.2rem;padding:1.3rem 1.5rem;border-radius:var(--radius);
 background:linear-gradient(120deg,var(--primary),var(--primary-2));color:#fff;position:relative;overflow:hidden}
.hello::after{content:"";position:absolute;inset:0;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='60' height='30'%3E%3Cpath d='M0 30l15-15 15 15 15-15 15 15' fill='none' stroke='%23C9A24D' stroke-opacity='.22' stroke-width='1.5'/%3E%3C/svg%3E");pointer-events:none}
.hello h1{margin:0;font-size:1.6rem}.hello p{margin:.2rem 0 0;opacity:.9}.hello .btn.ghost{color:#fff;border-color:rgba(255,255,255,.35);position:relative;z-index:1}
.rec-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:.8rem}
.rec{display:flex;flex-direction:column;gap:.2rem;padding:.9rem;border-radius:12px;background:var(--surface-2);border-inline-start:4px solid var(--accent);text-decoration:none;color:var(--ink)}
.rec small{color:var(--muted)}.cd{font-size:.82rem;color:var(--primary-2);font-weight:700}.cd.big{font-size:1.05rem;color:var(--accent);margin:.2rem 0 .4rem}
[data-mode=dark] .cd,[data-theme=goldnight] .cd{color:var(--accent)}
.heat-wrap{overflow-x:auto}.heat{border-collapse:separate;border-spacing:3px;font-size:.8rem;width:100%}
.heat th{font-weight:600;color:var(--muted);text-align:start;white-space:nowrap}.heat td{background:color-mix(in srgb,var(--primary) calc(var(--a)*100%),var(--surface-2));color:#fff;text-align:center;border-radius:5px;height:30px;min-width:38px}
.idcard{width:min(560px,100%);height:auto;border-radius:18px;box-shadow:0 12px 34px rgba(15,42,92,.25)}.center-row{justify-content:center}
.seg{display:inline-flex;border:1px solid var(--line);border-radius:10px;overflow:hidden;margin-bottom:1rem}.seg label{cursor:pointer}.seg input{position:absolute;opacity:0}
.seg span{display:block;padding:.4rem 1rem}.seg input:checked+span{background:var(--primary);color:#fff}
.guide-row{display:flex;justify-content:space-between;align-items:center;gap:.5rem}
.release h2{display:flex;gap:.6rem;align-items:center}
.tbl th[data-sort]{cursor:pointer;user-select:none}.tbl th[data-sort]::after{content:" ↕";opacity:.35;font-size:.8em}.tbl th[data-dir=asc]::after{content:" ↑";opacity:1}.tbl th[data-dir=desc]::after{content:" ↓";opacity:1}
.idle-warn{position:fixed;inset-inline:0;bottom:0;background:var(--accent);color:#1B2233;text-align:center;padding:.7rem;z-index:130;font-weight:700}
