/* =====================================================================
   Citizens Affairs Programme v2 — CPC portal design system, static build
   Tokens and patterns follow ~/Projects/cpc-portal (app/globals.css and
   .claude/skills/cpc-design-system). Logical properties only; RTL first.
   ===================================================================== */
:root{
  --ink:#1c1a17;--ink-2:#2e2b26;--muted:#67625a;--muted-on-ink:#b8b1a2;--line:#e3ddd0;
  --surface:#f8f6f1;--card:#ffffff;--surface-2:#f8f5ee;--surface-3:#efe8d8;
  --gold:#ba9765;--gold-deep:#8a6b3d;--gold-soft:#f2eadb;
  --success:#2f7a4d;--warning:#c2622d;--danger:#b3261e;
  /* the same hues darkened for small text on their 12% tints (contrast ≥ 4.5:1) */
  --success-text:#276a42;--warning-text:#9a4b1f;--danger-text:#9c1f17;--gold-text:#6f5531;
  --r-control:8px;--r-card:14px;--r-panel:20px;
  --shadow-menu:0 8px 24px rgba(28,26,23,.10);
  --shadow-soft:0 1px 2px rgba(28,26,23,.05),0 0 0 1px rgba(28,26,23,.05);
  --shadow-lift:0 10px 30px -12px rgba(28,26,23,.18),0 0 0 1px rgba(28,26,23,.04);
  --sans:"IBM Plex Sans","Noto Kufi Arabic",system-ui,-apple-system,"Segoe UI",sans-serif;
  --serif:"IBM Plex Serif","Noto Kufi Arabic",Georgia,"Times New Roman",serif;
  --kufi:"Noto Kufi Arabic","IBM Plex Sans",system-ui,sans-serif;
  --top:68px;
  --ease-out:cubic-bezier(.23,1,.32,1);--ease-in-out:cubic-bezier(.77,0,.175,1);--ease-drawer:cubic-bezier(.32,.72,0,1);
}
*{box-sizing:border-box;margin:0;padding:0}
html{color:var(--ink);background:var(--surface);-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;overflow-x:clip}
body{font-size:15px;line-height:1.6;overflow-x:clip;min-height:100vh}
html[lang=en] body{font-family:var(--sans)}
html[lang=ar] body{font-family:var(--kufi);line-height:1.8}
html[lang=en]{--display:var(--serif);--lh-display:1.1;--ls-display:-0.005em}
html[lang=ar]{--display:var(--kufi);--lh-display:1.35;--ls-display:0}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
input,textarea,select{font:inherit;color:inherit}
a{color:inherit;text-decoration:none}
img{display:block;max-width:100%}
svg.i{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round;flex:none}
bdi{unicode-bidi:isolate}
[hidden]{display:none!important}
:focus-visible{outline:2px solid var(--gold-deep);outline-offset:2px;border-radius:4px}

/* ---------- type ---------- */
.display{font-family:var(--display);line-height:var(--lh-display);letter-spacing:var(--ls-display);font-weight:500}
.h1{font-size:40px}.h2{font-size:30px}.h3{font-size:20px;line-height:1.35}
.eyebrow{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.14em;color:var(--gold-deep);display:inline-flex;align-items:center;gap:8px}
html[lang=ar] .eyebrow{letter-spacing:0;font-size:13px}
.muted{color:var(--muted)}.small{font-size:13.5px}.caption{font-size:12.5px;color:var(--muted)}
.lead{font-size:16px;color:var(--muted);max-width:60ch}
.num{font-family:var(--serif);font-weight:500;font-variant-numeric:tabular-nums}
html[lang=ar] .num{font-family:var(--kufi)}
.fade{animation:fadeIn 180ms var(--ease-out) both}
@keyframes fadeIn{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
@keyframes fadeOnly{from{opacity:0}to{opacity:1}}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}

/* ---------- shell ---------- */
.topbar{position:sticky;top:0;z-index:40;background:rgba(255,255,255,.92);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid rgba(227,221,208,.8)}
.topbar-in{max-width:1280px;margin-inline:auto;padding-inline:20px;height:var(--top);display:flex;align-items:center;gap:20px}
@media(min-width:1024px){.topbar-in{padding-inline:32px}}
.brand{display:flex;align-items:center;gap:14px;flex:none;min-width:0}
.brand img{height:40px;width:auto}
.brand .prog{display:flex;flex-direction:column;line-height:1.15;padding-inline-start:14px;border-inline-start:1px solid var(--line)}
.brand .prog b{font-family:var(--display);font-weight:500;font-size:15px;white-space:nowrap}
.brand .prog span{font-size:11px;color:var(--muted);white-space:nowrap}
.nav{display:none;align-items:center;align-self:stretch;gap:22px;margin-inline:auto}
@media(min-width:1024px){.nav{display:flex}}
.nav a{position:relative;display:flex;align-items:center;height:100%;font-size:14.5px;letter-spacing:-.005em;white-space:nowrap;color:var(--muted);transition:color .15s}
html[lang=ar] .nav a{letter-spacing:0} /* no letter-spacing on Arabic, ever */
.nav a:hover{color:var(--ink)}
.nav a.on{color:var(--ink);font-weight:500}
.nav a::after{content:"";position:absolute;inset-inline:0;bottom:-1px;height:2px;background:var(--gold);border-radius:2px;opacity:0;transition:opacity .15s}
.nav a.on::after{opacity:1}
.cluster{margin-inline-start:auto;display:flex;align-items:center;gap:4px}
@media(min-width:1024px){.cluster{margin-inline-start:0}}
.ibtn{width:40px;height:40px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;color:var(--ink);position:relative}
.ibtn:hover{background:var(--surface-2)}
.ibtn .dot{position:absolute;top:9px;inset-inline-end:9px;width:8px;height:8px;border-radius:50%;background:var(--danger);border:2px solid #fff}
.kbd{display:none;font-size:11px;color:var(--muted);border:1px solid var(--line);border-radius:5px;padding:1px 5px;margin-inline-start:6px}
@media(min-width:1280px){.search-pill .kbd{display:inline-block}}
.search-pill{display:inline-flex;align-items:center;gap:8px;height:40px;padding-inline:12px;border-radius:var(--r-control);color:var(--muted);font-size:13.5px}
.search-pill:hover{background:var(--surface-2);color:var(--ink)}
.search-pill span.lbl{display:none}@media(min-width:1180px){.search-pill span.lbl{display:inline}}
.askbtn{display:inline-flex;align-items:center;gap:7px;height:40px;padding-inline:14px;border-radius:var(--r-control);background:var(--ink);color:#fff;font-size:14px;font-weight:500;white-space:nowrap;margin-inline-start:4px}
.askbtn:hover{background:var(--ink-2)}
.askbtn .i{width:15px;height:15px}
.askbtn span{display:none}@media(min-width:1280px){.askbtn span{display:inline}}
.avatar{width:36px;height:36px;border-radius:50%;background:var(--surface-3);color:var(--gold-deep);font-weight:600;font-size:13px;display:inline-flex;align-items:center;justify-content:center;overflow:hidden;flex:none}
.avatar img{width:100%;height:100%;object-fit:cover}
.avbtn{margin-inline-start:6px;display:inline-flex;align-items:center;gap:8px;height:40px;padding-inline:4px;border-radius:999px}
.avbtn:hover{background:var(--surface-2)}
.lang{height:40px;padding-inline:10px;display:inline-flex;align-items:center;font-size:14px;color:rgba(28,26,23,.7);border-radius:var(--r-control)}
.lang:hover{color:var(--ink);background:var(--surface-2)}
html[lang=ar] .lang{font-family:var(--sans)}html[lang=en] .lang{font-family:var(--kufi)}
.menu{position:absolute;top:calc(100% + 6px);inset-inline-end:0;min-width:240px;background:#fff;border-radius:var(--r-card);box-shadow:var(--shadow-menu);padding:8px;z-index:50}
.menu .mh{padding:10px 12px 8px;border-bottom:1px solid var(--line);margin-bottom:6px}
.menu .mh b{display:block;font-size:14px}.menu .mh span{font-size:12.5px;color:var(--muted)}
.menu button,.menu a{display:flex;align-items:center;gap:10px;width:100%;height:40px;padding-inline:12px;border-radius:var(--r-control);font-size:14px;text-align:start}
/* menu links can be two lines (notifications): the row grows instead of overlapping the next one */
.menu a{height:auto;min-height:40px;padding-block:10px;align-items:flex-start;line-height:1.5}
.menu a .i{margin-top:2px}
.menu.notif{width:min(360px,calc(100vw - 32px))}
.menu button:hover,.menu a:hover{background:var(--surface-2)}
.menu .sep{height:1px;background:var(--line);margin:6px 0}
.rel{position:relative}
main{min-height:calc(100vh - var(--top))}
.page{max-width:1280px;margin-inline:auto;padding-inline:20px;padding-block:40px 80px;display:flex;flex-direction:column;gap:40px}
@media(min-width:1024px){.page{padding-inline:32px}}
.page.tight{padding-block:28px 80px;gap:28px}
.foot{max-width:1280px;margin-inline:auto;padding:24px 20px;font-size:12.5px;color:var(--muted);display:flex;flex-wrap:wrap;gap:6px 20px}
@media(min-width:1024px){.foot{padding-inline:32px}}
.foot .end{margin-inline-start:auto}

/* ---------- banner photo ---------- */
.banner{position:relative;height:220px;overflow:hidden;background:var(--surface-3)}
@media(min-width:768px){.banner{height:320px}}
.banner img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center 12%}
.banner.lg{height:300px}@media(min-width:768px){.banner.lg{height:420px}}
.banner .cap{position:absolute;inset-inline-start:0;bottom:0;padding:18px 32px;color:#fff;background:linear-gradient(to top,rgba(28,26,23,.55),transparent);width:100%}
.banner .cap .eyebrow{color:var(--gold-soft)}
.banner .cap b{display:block;font-family:var(--display);font-weight:500;font-size:26px;line-height:1.2;margin-top:4px}

/* ---------- blocks ---------- */
.card{background:var(--card);border-radius:var(--r-card);box-shadow:var(--shadow-soft);padding:24px;display:flex;flex-direction:column;gap:12px;min-width:0}
.card.cream{background:var(--surface-2);box-shadow:none}
.card.flat{padding:0;overflow:hidden}
.card .ch{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap}
.card .ch .h3{margin:0}
.sec{display:flex;flex-direction:column;gap:16px}
.sec-h{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;flex-wrap:wrap}
.sec-h .tt{display:flex;flex-direction:column;gap:6px}
.grid{display:grid;gap:16px}
.g2{grid-template-columns:repeat(2,minmax(0,1fr))}.g3{grid-template-columns:repeat(3,minmax(0,1fr))}.g4{grid-template-columns:repeat(4,minmax(0,1fr))}
@media(max-width:1100px){.g4{grid-template-columns:repeat(2,minmax(0,1fr))}.g3{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:640px){.g2,.g3,.g4{grid-template-columns:minmax(0,1fr)}}
.split{display:grid;grid-template-columns:minmax(0,1fr) 380px;gap:24px;align-items:start}
.split.wide{grid-template-columns:minmax(0,1fr) 440px}
@media(max-width:1100px){.split,.split.wide{grid-template-columns:minmax(0,1fr)}}
.stack{display:flex;flex-direction:column;gap:24px;min-width:0}
.row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.row.between{justify-content:space-between}
.hr{height:1px;background:var(--line)}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:44px;padding-inline:20px;border-radius:var(--r-control);font-size:15px;font-weight:500;white-space:nowrap;transition:background .15s,color .15s,border-color .15s;background:var(--gold);color:var(--ink)}
.btn:hover{background:var(--gold-deep);color:#fff}
.btn.ghost{background:#fff;border:1px solid var(--line);color:var(--ink)}.btn.ghost:hover{border-color:var(--ink);background:#fff;color:var(--ink)}
.btn.dark{background:var(--ink);color:#fff}.btn.dark:hover{background:var(--ink-2)}
.btn.sm{height:38px;padding-inline:14px;font-size:14px}
.btn.lg{height:48px;padding-inline:24px;font-size:16px}
.btn.gold-on-ink{background:var(--gold);color:var(--ink)}.btn.gold-on-ink:hover{background:var(--gold-soft)}
.btn:disabled{opacity:.5;cursor:default}
.link{color:var(--gold-deep);font-weight:500;display:inline-flex;align-items:center;gap:4px}
.link:hover{text-decoration:underline}
.chev{width:14px;height:14px}
html[dir=rtl] .flip{transform:scaleX(-1)}
.chip{display:inline-flex;align-items:center;height:24px;padding-inline:8px;border-radius:6px;font-size:12px;font-weight:500;white-space:nowrap;gap:5px}
.chip.study{color:var(--warning);background:rgba(194,98,45,.12)}
.chip.progress{color:var(--gold-deep);background:var(--gold-soft)}
.chip.done{color:var(--success);background:rgba(47,122,77,.12)}
.chip.info{color:var(--gold-deep);background:var(--gold-soft)}
.chip.neutral{color:var(--muted);background:rgba(122,117,108,.15)}
.chip.danger{color:var(--danger);background:rgba(179,38,30,.12)}
.chip.fin{color:var(--gold-deep);background:var(--gold-soft)}.chip.hou{color:var(--ink-2);background:var(--surface-3)}.chip.med{color:var(--danger);background:rgba(179,38,30,.10)}
.tile{width:44px;height:44px;border-radius:var(--r-control);background:var(--gold-soft);color:var(--gold-deep);display:inline-flex;align-items:center;justify-content:center;flex:none}
.tile .i{width:21px;height:21px}
.tile.ink{background:var(--ink);color:var(--gold)}.tile.warn{background:rgba(194,98,45,.12);color:var(--warning)}.tile.sm{width:36px;height:36px}.tile.sm .i{width:17px;height:17px}
.kv{display:flex;flex-direction:column;gap:2px;min-width:0}
.kv .k{font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-weight:600}
html[lang=ar] .kv .k{letter-spacing:0;font-size:12.5px}
.kv .v{font-size:15px;font-weight:500;overflow-wrap:anywhere}
.kv .v.big{font-family:var(--display);font-size:26px;line-height:1.15}
.facts{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}
@media(max-width:1100px){.facts{grid-template-columns:repeat(2,minmax(0,1fr))}}
.fact{background:var(--card);border-radius:var(--r-card);box-shadow:var(--shadow-soft);padding:18px 20px;display:flex;align-items:center;gap:14px;min-width:0}
.fact .kv .v{font-size:17px}
.toast{position:fixed;bottom:24px;inset-inline-start:50%;--tx:-50%;transform:translateX(var(--tx));background:var(--ink);color:#fff;padding:12px 18px;border-radius:var(--r-control);font-size:14px;box-shadow:var(--shadow-menu);z-index:80;display:flex;align-items:center;gap:10px}
html[dir=rtl] .toast{--tx:50%}
.empty{padding:22px;border:1px dashed var(--line);border-radius:var(--r-card);color:var(--muted);font-size:14px;text-align:center}

/* ---------- table ---------- */
.tbl{width:100%;border-collapse:collapse;font-size:14px}
.tbl th{font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-weight:600;text-align:start;padding:12px 16px;background:var(--surface-2);white-space:nowrap}
html[lang=ar] .tbl th{letter-spacing:0;font-size:12.5px}
.tbl td{padding:14px 16px;border-top:1px solid var(--line);vertical-align:middle}
.tbl tr.rowlink{cursor:pointer}.tbl tr.rowlink:hover td{background:var(--surface-2)}
.tbl td.end{text-align:end;width:40px}
.tbl .t-main{font-weight:500;display:block}.tbl .t-sub{font-size:12.5px;color:var(--muted);display:block}
.tbl .num{font-size:15px}
.tbl-wrap{overflow-x:auto;position:relative} /* positioned: visually hidden labels inside the table stay inside the scroller */

/* ---------- AI identity ---------- */
.ai{background:var(--ink);color:#fff;border-radius:var(--r-card);padding:24px;display:flex;flex-direction:column;gap:18px;position:relative;overflow:hidden}
@media(min-width:768px){.ai{padding:28px 32px}}
.ai .eyebrow{color:var(--gold)}
.ai .motif{position:absolute;inset-inline-end:-120px;top:-120px;color:var(--gold);pointer-events:none}
.ai p{color:rgba(255,255,255,.82);font-size:15.5px;max-width:78ch;position:relative}
.ai .big{font-family:var(--display);font-weight:500;font-size:22px;line-height:1.3;color:#fff;max-width:none}
@media(min-width:768px){.ai .big{font-size:24px}}
.ai .ins{display:grid;grid-template-columns:repeat(1,minmax(0,1fr));gap:20px 32px;position:relative}
@media(min-width:768px){.ai .ins{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(min-width:1280px){.ai .ins.three{grid-template-columns:repeat(3,minmax(0,1fr))}}
.ai .in{display:flex;align-items:flex-start;gap:14px;color:#fff}
.ai .in .d{margin-top:9px;width:10px;height:10px;border-radius:50%;flex:none}
.ai .in .d.good{background:var(--success)}.ai .in .d.watch{background:var(--gold)}.ai .in .d.act{background:var(--danger)}
.ai .in b{display:block;font-family:var(--display);font-weight:500;font-size:20px;line-height:1.25}
.ai .in:hover b{color:var(--gold)}
.ai .in span{display:block;font-size:13.5px;color:rgba(255,255,255,.65);margin-top:2px}
.ai .in .go{display:inline-flex;align-items:center;gap:4px;font-size:12.5px;font-weight:500;color:var(--gold);margin-top:4px}
.ai .ask{display:flex;gap:8px;padding-top:16px;border-top:1px solid rgba(255,255,255,.15);position:relative}
.ai .ask input{flex:1;min-width:0;height:44px;border-radius:var(--r-control);background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.15);padding-inline:16px;color:#fff;font-size:14.5px;outline:0}
.ai .ask input::placeholder{color:rgba(255,255,255,.5)}.ai .ask input:focus{border-color:var(--gold)}
.ai .foot{font-size:12.5px;color:rgba(255,255,255,.55);padding:0}
.ai .hint{font-size:12.5px;color:rgba(255,255,255,.55);margin-inline-start:auto}
.ai .top{display:flex;align-items:baseline;justify-content:space-between;gap:12px;flex-wrap:wrap;position:relative}
.ai-tag{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:var(--gold-deep);background:var(--gold-soft);border-radius:6px;height:24px;padding-inline:8px;white-space:nowrap}
.ai-tag .i{width:13px;height:13px}
.ai .ai-tag{background:rgba(186,151,101,.18);color:var(--gold)}
.why{width:20px;height:20px;border-radius:50%;border:1px solid currentColor;font-size:11px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;flex:none;font-family:var(--sans)}
.why:hover{background:rgba(138,107,61,.12)}
.ai .why:hover{background:rgba(255,255,255,.12)}
.modal-bg{position:fixed;inset:0;background:rgba(28,26,23,.45);z-index:70;display:flex;align-items:center;justify-content:center;padding:20px}
.modal{background:#fff;border-radius:var(--r-panel);max-width:620px;width:100%;max-height:88vh;overflow:auto;padding:28px;display:flex;flex-direction:column;gap:14px;box-shadow:var(--shadow-menu)}
.modal h3{font-family:var(--display);font-weight:500;font-size:22px;line-height:1.25}
.modal .steps{display:flex;flex-direction:column;gap:10px}
.modal .steps>div{display:flex;gap:12px;font-size:14px}
.modal .steps>div>div{display:flex;flex-direction:column;gap:2px;min-width:0}
.modal .steps>div>b{color:var(--gold-deep);font-family:var(--serif);font-weight:500;flex:none;width:28px}
html[lang=ar] .modal .steps>div>b{font-family:var(--kufi)}
.modal .mk{font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-weight:600}
html[lang=ar] .modal .mk{letter-spacing:0}
.modal .x{margin-inline-start:auto}
.sheet{background:#fff;border-radius:var(--r-panel);max-width:520px;width:100%;padding:24px;display:flex;flex-direction:column;gap:14px}
.sheet .opt{display:flex;align-items:center;gap:12px;height:48px;padding-inline:14px;border:1px solid var(--line);border-radius:var(--r-control);font-size:14.5px;cursor:pointer}
.sheet .opt.on{border-color:var(--gold-deep);background:var(--gold-soft)}
.field{display:flex;flex-direction:column;gap:6px}
.field label{font-size:13px;font-weight:600}
.field input,.field textarea,.field select{height:48px;border:1px solid var(--line);border-radius:var(--r-control);padding-inline:14px;background:#fff;font-size:15px;outline:0;width:100%}
.field textarea{height:auto;min-height:96px;padding:12px 14px;resize:vertical}
.field input:focus,.field textarea:focus,.field select:focus{border-color:var(--gold-deep);box-shadow:0 0 0 3px var(--gold-soft)}
.field .hint{font-size:12.5px;color:var(--muted)}
.form{display:flex;flex-direction:column;gap:18px;max-width:640px}
.choice{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.choice label{display:flex;align-items:center;gap:10px;height:48px;padding-inline:14px;border:1px solid var(--line);border-radius:var(--r-control);cursor:pointer;font-size:14px}
.choice label{position:relative}
.field .choice input{position:absolute;opacity:0;width:1px;height:1px;padding:0;border:0;pointer-events:none;margin:0}
.choice label:has(input:checked){border-color:var(--gold-deep);background:var(--gold-soft)}
.choice label:has(input:focus-visible){outline:2px solid var(--gold-deep);outline-offset:2px}
@media(max-width:640px){.choice{grid-template-columns:minmax(0,1fr)}}
fieldset.field{border:0;padding:0;margin:0;min-width:0}
fieldset.field legend{font-size:13px;font-weight:600;padding:0;margin-bottom:6px}
.drop{border:1px dashed var(--line);border-radius:var(--r-card);padding:22px;display:flex;align-items:center;gap:14px;background:var(--surface-2)}
.drop b{display:block;font-size:14px}.drop span{font-size:12.5px;color:var(--muted)}

/* ---------- chat drawer ---------- */
.drawer-bg{position:fixed;inset:0;z-index:60;background:rgba(28,26,23,.25)}
.drawer{position:fixed;top:0;bottom:0;inset-inline-end:0;width:min(460px,100%);background:#fff;z-index:61;display:flex;flex-direction:column;box-shadow:var(--shadow-menu)}
html[dir=rtl] .drawer{--sx:-100%}
.chat-h{display:flex;align-items:center;gap:10px;height:60px;padding-inline:18px;border-bottom:1px solid var(--line)}
.chat-h b{font-size:15px;display:flex;align-items:center;gap:8px;white-space:nowrap;flex:none}
.chat-h .caption{margin-inline-start:auto;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.chat-list{flex:1;overflow:auto;padding:18px;display:flex;flex-direction:column;gap:14px;background:var(--surface)}
.msg{display:flex;gap:10px;align-items:flex-start;max-width:100%}
.msg .av{width:30px;height:30px;border-radius:50%;flex:none;display:inline-flex;align-items:center;justify-content:center;font-size:12px;font-weight:600}
.msg.user{flex-direction:row-reverse}
.msg.user .av{background:var(--surface-3);color:var(--gold-deep)}
.msg.bot .av{background:var(--ink);color:var(--gold)}
.msg .b{background:#fff;border-radius:var(--r-card);padding:12px 14px;font-size:14px;box-shadow:var(--shadow-soft);max-width:calc(100% - 40px);display:flex;flex-direction:column;gap:8px}
.msg.user .b{background:var(--gold-soft);box-shadow:none}
.msg .b p{margin:0}
.msg .links{display:flex;flex-wrap:wrap;gap:6px}
.msg .links a{display:inline-flex;align-items:center;gap:4px;min-height:40px;padding:8px 10px;line-height:1.35;border-radius:6px;background:var(--surface-2);font-size:12.5px;font-weight:500;color:var(--gold-deep)}
.msg .links a:hover{background:var(--surface-3)}
.msg .fu{display:flex;flex-wrap:wrap;gap:6px}
.msg .fu button{min-height:40px;padding:8px 10px;line-height:1.35;text-align:start;border:1px solid var(--line);border-radius:6px;font-size:12.5px;background:#fff}
.msg .fu button:hover{border-color:var(--ink)}
.msg .lab{display:flex;align-items:center;gap:8px;font-size:11.5px;color:var(--muted)}
.chat-c{padding:12px 16px 16px;border-top:1px solid var(--line);display:flex;flex-direction:column;gap:8px;background:#fff}
.chat-c .box{display:flex;gap:8px;align-items:flex-end}
.chat-c textarea{flex:1;min-width:0;min-height:46px;max-height:160px;border:1px solid var(--line);border-radius:var(--r-control);padding:11px 14px;resize:none;outline:0;font-size:14.5px;line-height:1.5}
.chat-c textarea:focus{border-color:var(--gold-deep);box-shadow:0 0 0 3px var(--gold-soft)}
.chat-c .send{width:46px;height:46px;border-radius:var(--r-control);background:var(--gold);color:var(--ink);display:inline-flex;align-items:center;justify-content:center;flex:none}
.chat-c .send:hover{background:var(--gold-deep);color:#fff}
.chat-c .foot{display:block;max-width:none;margin:0;font-size:11.5px;color:var(--muted);padding:0} /* not the page footer: start-aligned under the composer, never centred */
.welcome{display:flex;flex-direction:column;gap:14px}
.welcome .h3{margin:0}
.prompts{display:flex;flex-direction:column;gap:4px}
.prompts button{text-align:start;padding:8px 10px;border-radius:6px;font-size:13.5px;color:rgba(28,26,23,.8);display:flex;align-items:center;gap:8px}
.prompts button:hover{background:#fff;color:var(--gold-deep)}
.typing{display:inline-flex;gap:4px;padding:4px 0}
.typing i{width:6px;height:6px;border-radius:50%;background:var(--gold-deep);animation:bob 1s infinite}
.typing i:nth-child(2){animation-delay:.15s}.typing i:nth-child(3){animation-delay:.3s}
@keyframes bob{0%,80%,100%{transform:translateY(0);opacity:.4}40%{transform:translateY(-4px);opacity:1}}

/* ---------- command palette ---------- */
.pal-bg{position:fixed;inset:0;background:rgba(28,26,23,.35);z-index:65;display:flex;align-items:flex-start;justify-content:center;padding:12vh 20px 20px}
.pal{width:100%;max-width:640px;background:#fff;border-radius:var(--r-panel);box-shadow:var(--shadow-menu);overflow:hidden;display:flex;flex-direction:column;max-height:70vh}
.pal .in{display:flex;align-items:center;gap:10px;height:56px;padding-inline:18px;border-bottom:1px solid var(--line)}
.pal .in input{flex:1;min-width:0;border:0;outline:0;font-size:16px;background:transparent}
.pal ul{list-style:none;overflow:auto;padding:8px}
.pal li a,.pal li button,.pal li .po{display:flex;align-items:center;gap:12px;width:100%;min-height:40px;padding:10px 12px;border-radius:var(--r-control);font-size:14px;text-align:start;cursor:pointer}
.pal li a:hover,.pal li button:hover,.pal li .po:hover,.pal li.on a,.pal li.on button,.pal li.on .po{background:var(--surface-2)}
.pal li .t{display:flex;flex-direction:column;min-width:0}.pal li .t span{font-size:12.5px;color:var(--muted)}
.pal .gh{padding:10px 12px 4px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.12em;color:var(--muted)}
html[lang=ar] .pal .gh{letter-spacing:0}
.pal .pf{display:flex;gap:16px;padding:8px 18px;border-top:1px solid var(--line);font-size:12px;color:var(--muted)}

/* ---------- persona chooser ---------- */
.gate{min-height:100vh;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
@media(max-width:900px){.gate{grid-template-columns:minmax(0,1fr)}}
.gate .ph{position:relative;min-height:320px;background:var(--surface-3)}
.gate .ph img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:35% 30%}
.gate .ph .ov{position:absolute;inset:0;background:linear-gradient(to top,rgba(28,26,23,.9) 0%,rgba(28,26,23,.72) 40%,rgba(28,26,23,.1) 78%)}
.gate .ph .cap{position:absolute;bottom:0;inset-inline:0;padding:40px;color:#fff;display:flex;flex-direction:column;gap:10px}
.gate .ph .cap .eyebrow{color:var(--gold-soft)}
.gate .ph .cap b{font-family:var(--display);font-weight:500;font-size:34px;line-height:var(--lh-display)}
.gate .ph .cap p{color:rgba(255,255,255,.8);max-width:52ch;font-size:15px}
.gate .pick{padding:48px 40px;display:flex;flex-direction:column;gap:26px;justify-content:center;max-width:620px;margin-inline:auto;width:100%}
.gate .pick .logo img{height:52px}
.gate .pick h1{font-family:var(--display);font-weight:500;font-size:34px;line-height:var(--lh-display)}
.gate .pick h1:focus{outline:none}
.gate .roles{display:flex;flex-direction:column;gap:10px}
.gate .role{display:flex;align-items:center;gap:16px;padding:16px 18px;border:1px solid var(--line);border-radius:var(--r-card);background:#fff;text-align:start;transition:border-color .15s,box-shadow .15s}
.gate .role:hover{border-color:var(--gold-deep);box-shadow:var(--shadow-soft)}
.gate .role b{display:block;font-size:16px;font-weight:500}.gate .role span{display:block;font-size:13.5px;color:var(--muted)}
.gate .role .chev{margin-inline-start:auto;color:var(--muted)}
.gate .modes{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.gate .mode{display:flex;flex-direction:column;align-items:flex-start;gap:8px;padding:18px;border:1px solid var(--line);border-radius:var(--r-card);background:#fff;text-align:start}
.gate .mode:hover{border-color:var(--gold-deep)}
.gate .mode b{font-size:15px;font-weight:500}.gate .mode span{font-size:13px;color:var(--muted)}
.gate .back{align-self:flex-start;min-height:40px}

/* ---------- Chairman: search ---------- */
.hero{display:flex;flex-direction:column;gap:18px;max-width:760px}
.hero .h1{margin:0}
.hsearch{display:flex;align-items:center;gap:10px;height:60px;background:#fff;border:1px solid var(--line);border-radius:var(--r-card);padding-inline:18px 8px;box-shadow:var(--shadow-soft);transition:border-color .15s,box-shadow .15s}
.hsearch:focus-within{border-color:var(--gold-deep);box-shadow:0 0 0 3px var(--gold-soft)}
.hsearch .i{color:var(--gold-deep)}
.hsearch input{flex:1;min-width:0;border:0;outline:0;font-size:17px;background:transparent;height:100%}
.hsearch .ibtn{width:36px;height:36px}
.hsearch .go{height:44px;padding-inline:18px;border-radius:var(--r-control);background:var(--ink);color:#fff;font-size:14px;font-weight:500;display:inline-flex;align-items:center;gap:8px}
.hsearch .go:hover{background:var(--ink-2)}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chips button{height:34px;padding-inline:12px;border:1px solid var(--line);border-radius:999px;background:#fff;font-size:13px;color:rgba(28,26,23,.8);display:inline-flex;align-items:center;gap:6px}
.chips button:hover{border-color:var(--gold-deep);color:var(--gold-deep)}
.chips .i{width:13px;height:13px;color:var(--gold-deep)}
.ps-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
@media(max-width:640px){.ps-grid{grid-template-columns:minmax(0,1fr)}}
.ps{background:#fff;border-radius:var(--r-card);box-shadow:var(--shadow-soft);padding:20px;display:flex;align-items:flex-start;gap:16px;text-align:start;transition:box-shadow 150ms ease,transform 160ms var(--ease-out);min-width:0}

.ps .pic{width:60px;height:60px;border-radius:50%;overflow:hidden;background:var(--surface-3);flex:none;display:inline-flex;align-items:center;justify-content:center;color:var(--gold-deep);font-weight:600;font-size:18px}
.ps .pic img{width:100%;height:100%;object-fit:cover}
.ps .t{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}
.ps .t b{font-family:var(--display);font-weight:500;font-size:19px;line-height:1.25;overflow-wrap:anywhere}
/* phone · Emirates ID: each identifier is a whole <bdi> (never broken, never cut); when the line is too narrow it wraps at the « · » between them */
.ps .t span{font-size:13px;color:var(--muted);direction:ltr;unicode-bidi:isolate;text-align:start;white-space:normal;overflow:visible;text-overflow:clip}
html[dir=rtl] .ps .t span{text-align:right}
.ps .cnt{display:flex;flex-direction:column;align-items:center;flex:none;background:var(--gold-soft);color:var(--gold-deep);border-radius:var(--r-control);padding:8px 12px;min-width:64px}
.ps .cnt b{font-family:var(--serif);font-size:22px;font-weight:500;line-height:1}
html[lang=ar] .ps .cnt b{font-family:var(--kufi)}
.ps .cnt span{font-size:12px;font-weight:600;margin-top:3px;color:var(--gold-text)}
mark{background:var(--gold-soft);color:inherit;border-radius:3px;padding:0 1px}

/* ---------- citizen file ---------- */
.idc{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:24px;align-items:center}
@media(max-width:760px){.idc{grid-template-columns:auto minmax(0,1fr)}.idc .acts{grid-column:1/-1}}
.idc .pic{width:104px;height:104px;border-radius:50%;overflow:hidden;background:var(--surface-3);display:inline-flex;align-items:center;justify-content:center;color:var(--gold-deep);font-weight:600;font-size:30px;flex:none;box-shadow:0 0 0 4px var(--gold-soft)}
.idc .pic img{width:100%;height:100%;object-fit:cover}
/* H.H. and Executive Management on the profile: the same person glyph as the top-bar avatar (never the logo lockup) */
.idc .pic .i{width:44px;height:44px;stroke-width:1.5}
.idc .who{display:flex;flex-direction:column;gap:8px;min-width:0}
.idc .who .nm{font-family:var(--display);font-weight:500;font-size:30px;line-height:1.15}
.idc .meta{display:grid;grid-template-columns:repeat(3,auto);gap:8px 28px;justify-content:start}
@media(max-width:640px){.idc .meta{grid-template-columns:1fr}}
.idc .acts{display:flex;flex-direction:column;gap:8px;align-items:stretch}
.reading{display:flex;flex-direction:column;gap:10px}
.reading .lines{display:flex;flex-direction:column;gap:8px;position:relative}
.reading .lines p{font-size:16px;line-height:1.6;color:#fff;max-width:none}
.reading .lines p .k{color:var(--gold);font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.1em;display:block;margin-bottom:2px}
html[lang=ar] .reading .lines p .k{letter-spacing:0;font-size:12.5px}
.req{display:flex;align-items:center;gap:16px;padding:16px 20px;background:#fff;border-radius:var(--r-card);box-shadow:var(--shadow-soft);text-align:start;width:100%;transition:box-shadow 150ms ease,transform 160ms var(--ease-out)}

.req .t{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}
.req .t b{font-size:16px;font-weight:500;line-height:1.35;overflow-wrap:anywhere}
.req .t .sub{font-size:13px;color:var(--muted);display:flex;flex-wrap:wrap;gap:4px 10px}
.req .t .sum{font-size:14px;color:rgba(28,26,23,.78)}
.req .st{display:flex;flex-direction:column;align-items:flex-end;gap:6px;flex:none}
.req .st .amt{font-family:var(--serif);font-size:16px;font-weight:500}
html[lang=ar] .req .st .amt{font-family:var(--kufi)}
.req .chev{color:var(--muted)}
.acc{border-top:1px solid var(--line)}
.acc summary{list-style:none;display:flex;align-items:center;gap:12px;height:56px;cursor:pointer;font-weight:500;font-size:15px}
.acc summary::-webkit-details-marker{display:none}
.acc summary .n{color:var(--muted);font-weight:400;font-size:13.5px}
.acc summary .chev{margin-inline-start:auto;color:var(--muted);transition:transform .2s}
.acc summary .chev{transition:transform 200ms var(--ease-out)}
.acc[open] summary .chev{transform:rotate(90deg)}
html[dir=rtl] .acc[open] summary .chev{transform:rotate(-90deg) scaleX(-1)}
.acc .body{padding:0 0 20px;display:flex;flex-direction:column;gap:12px}
.kvgrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px 24px}
@media(max-width:760px){.kvgrid{grid-template-columns:repeat(2,minmax(0,1fr))}}
.list{display:flex;flex-direction:column}
.list .li{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr) auto;gap:8px 16px;padding:12px 0;border-top:1px solid var(--line);font-size:14px;align-items:center}
.list .li:first-child{border-top:0}
.list .li b{font-weight:500}.list .li .m{color:var(--muted);font-size:13px}
.list .li .e{text-align:end;white-space:nowrap}
.person{display:flex;align-items:center;gap:12px;padding:10px 0;border-top:1px solid var(--line);font-size:14px}
.person:first-child{border-top:0}
.person .av{width:36px;height:36px;border-radius:50%;background:var(--surface-3);color:var(--gold-deep);font-weight:600;font-size:12px;display:inline-flex;align-items:center;justify-content:center;flex:none}
.person .t{display:flex;flex-direction:column;min-width:0;flex:1}.person .t span{font-size:12.5px;color:var(--muted)}
.person .e{white-space:nowrap;color:var(--muted);font-size:13px}

/* ---------- request page ---------- */
.rhead{display:flex;align-items:flex-start;gap:18px}
.rhead .t{display:flex;flex-direction:column;gap:8px;min-width:0;flex:1}
.rhead .t .h2{margin:0}
.rhead .t .sub{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:14px;color:var(--muted)}
.rhead .acts{display:flex;gap:8px;flex:none;flex-wrap:wrap;justify-content:flex-end}
.stepper{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
@media(max-width:640px){.stepper{grid-template-columns:repeat(2,minmax(0,1fr))}}
.step{display:flex;flex-direction:column;gap:8px;padding-top:12px;border-top:2px solid var(--line);font-size:13.5px}
.step.done{border-top-color:var(--success)}.step.now{border-top-color:var(--gold)}
.step b{font-weight:500;font-size:14px}.step span{color:var(--muted);font-size:12.5px}
.step .mk{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.08em}
html[lang=ar] .step .mk{letter-spacing:0}
.step.done .mk{color:var(--success)}.step.now .mk{color:var(--gold-deep)}.step .mk{color:var(--muted)}
.tl{display:flex;flex-direction:column}
.tl .e{display:grid;grid-template-columns:150px minmax(0,1fr);gap:16px;padding:12px 0;border-top:1px solid var(--line);font-size:14px}
.tl .e:first-child{border-top:0}
.tl .e .d{color:var(--muted);font-size:13px;white-space:nowrap}
.tl .e b{display:block;font-weight:500}.tl .e span{display:block;color:rgba(28,26,23,.75);font-size:13.5px}
@media(max-width:640px){.tl .e{grid-template-columns:1fr;gap:2px}}
.quote{border-inline-start:2px solid var(--gold);padding-inline-start:16px;font-family:var(--display);font-size:17px;line-height:1.5;color:rgba(28,26,23,.85)}
.docs .li{grid-template-columns:auto minmax(0,1fr) auto}
.crit{display:flex;flex-direction:column}
.crit .c{display:grid;grid-template-columns:minmax(0,1fr) 120px 48px;gap:14px;align-items:center;padding:10px 0;border-top:1px solid var(--line);font-size:14px}
.crit .c:first-child{border-top:0}
.crit .bar{height:6px;background:var(--surface-3);border-radius:3px;overflow:hidden}
.crit .bar i{display:block;height:100%;background:var(--gold)}
.crit .c .n{text-align:end;font-family:var(--serif);font-weight:500}
html[lang=ar] .crit .c .n{font-family:var(--kufi)}
.score{display:flex;align-items:center;gap:16px}
.score .ring{width:72px;height:72px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-family:var(--serif);font-size:22px;font-weight:500;color:var(--ink);background:conic-gradient(var(--gold) calc(var(--p)*1%),var(--surface-3) 0);position:relative;flex:none}
.score .ring::before{content:"";position:absolute;inset:7px;background:#fff;border-radius:50%}
.score .ring b{position:relative}
html[lang=ar] .score .ring{font-family:var(--kufi)}
.score .t b{display:block;font-size:16px;font-weight:500}.score .t span{font-size:13px;color:var(--muted)}

/* ---------- Executive Management ---------- */
.stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}
@media(max-width:1100px){.stats{grid-template-columns:repeat(2,minmax(0,1fr))}}
.stat{background:#fff;border-radius:var(--r-card);box-shadow:var(--shadow-soft);padding:20px 22px;display:flex;flex-direction:column;gap:4px;min-width:0}
.stat .k{font-size:12.5px;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.08em}
html[lang=ar] .stat .k{letter-spacing:0}
.stat .v{font-family:var(--display);font-size:34px;line-height:1.1;font-weight:500}
.stat .v.money{font-size:24px;line-height:1.2}
.stat .d{font-size:13px;color:var(--muted)}
.risk{display:flex;flex-direction:column;gap:4px;padding:12px 0;border-top:1px solid var(--line);font-size:14px}
.risk:first-child{border-top:0}
.risk b{font-weight:500;display:flex;justify-content:space-between;gap:12px}
.risk b span{color:var(--warning-text);font-family:var(--serif);white-space:nowrap}
html[lang=ar] .risk b span{font-family:var(--kufi)}
.risk p{color:rgba(28,26,23,.75);font-size:13.5px}
.clause{background:var(--surface-2);border-radius:var(--r-card);padding:18px 20px;font-family:var(--display);font-size:16px;line-height:1.5}
.clause .src{display:block;font-family:var(--sans);font-size:12.5px;color:var(--muted);margin-top:8px}
html[lang=ar] .clause .src{font-family:var(--kufi)}

/* ---------- request study desk ---------- */
.desk-h{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap}
.filters{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.filters button{height:36px;padding-inline:12px;border:1px solid var(--line);border-radius:var(--r-control);background:#fff;font-size:13.5px}
.filters button.on{background:var(--ink);color:#fff;border-color:var(--ink)}
.filters .sp{flex:1}
.filters input{height:36px;border:1px solid var(--line);border-radius:var(--r-control);padding-inline:12px;font-size:13.5px;outline:0;min-width:min(280px,100%)}
.filters input:focus{border-color:var(--gold-deep)}
.late{color:var(--danger);font-weight:500}
/* the CPC GPT next-step line (a <p> or <span>; never the state of a work step) */
p.next,span.next{display:flex;align-items:center;gap:8px;font-size:13.5px}
p.next .i,span.next .i{width:14px;height:14px;color:var(--gold-deep)}
.hero-reg{position:relative;border-radius:var(--r-card);overflow:hidden;min-height:200px;display:flex;align-items:flex-end;color:#fff}
.hero-reg img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center 40%}
.hero-reg .ov{position:absolute;inset:0;background:linear-gradient(to top,rgba(28,26,23,.9),rgba(28,26,23,.74) 60%,rgba(28,26,23,.3))}
.hero-reg .eyebrow{color:var(--gold-soft)}
.hero-reg .why{color:#fff}
.hero-reg h1{font-size:26px;line-height:var(--lh-display)}
.hero-reg .t{position:relative;padding:24px;display:flex;flex-direction:column;gap:6px}
.hero-reg .t b{font-family:var(--display);font-weight:500;font-size:26px;line-height:1.2}
.hero-reg .t span{color:rgba(255,255,255,.8);font-size:14px}
.extract{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 20px}
.extract .kv .v{font-size:14.5px}
.conf{font-size:12px;color:var(--muted)}

/* ---------- case study prose ---------- */
.prose{display:flex;flex-direction:column;gap:22px;max-width:76ch}
.prose h3{font-family:var(--display);font-weight:500;font-size:22px;line-height:1.3;padding-top:22px;border-top:1px solid var(--line)}
.prose h3:first-child{padding-top:0;border-top:0}
.prose p{font-size:16px;line-height:1.75;color:rgba(28,26,23,.88)}
html[lang=ar] .prose p{line-height:1.95}
.prose .pressure{display:flex;align-items:center;gap:14px;padding:16px 18px;background:var(--surface-2);border-radius:var(--r-card)}
.prose .pressure b{font-family:var(--display);font-weight:500;font-size:20px}
.prose .pressure span{font-size:13.5px;color:var(--muted)}
.study-side{display:flex;flex-direction:column;gap:16px}
.share-ok{display:flex;align-items:center;gap:10px;color:var(--success);font-size:14px}

/* ---------- printable brief ---------- */
.brief{background:#fff;border-radius:var(--r-card);box-shadow:var(--shadow-soft);padding:48px 56px;display:flex;flex-direction:column;gap:22px;max-width:860px;margin-inline:auto;width:100%}
.brief .bh{display:flex;align-items:center;justify-content:space-between;gap:20px;border-bottom:2px solid var(--gold);padding-bottom:18px}
.brief .bh img{height:48px}
.brief .bh .t{text-align:end;display:flex;flex-direction:column;gap:2px}
.brief .bh .t b{font-family:var(--display);font-weight:500;font-size:18px}.brief .bh .t span{font-size:12.5px;color:var(--muted)}
.brief h1{font-family:var(--display);font-weight:500;font-size:28px;line-height:1.2}
.brief .bf{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px 20px}
.brief .sec-t{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.12em;color:var(--gold-deep);border-top:1px solid var(--line);padding-top:14px}
html[lang=ar] .brief .sec-t{letter-spacing:0}
.brief p{font-size:14.5px;line-height:1.7}
.brief .ft{border-top:1px solid var(--line);padding-top:14px;font-size:12px;color:var(--muted);display:flex;justify-content:space-between;gap:12px}
@media print{.topbar,.foot,.noprint,.drawer,.drawer-bg,.toast,.why,.tabbar,.skip{display:none!important}body,html{background:#fff}.page{padding:0;gap:0}.brief{box-shadow:none;padding:0;max-width:none}}

/* ---------- iPhone frame (web view of the mobile app) ---------- */
.phone-wrap{display:flex;flex-direction:column;align-items:center;gap:18px;padding:34px 22px 60px;min-height:calc(100vh - var(--top))}
.phone{position:relative;width:430px;height:884px;max-width:100%;border-radius:58px;background:#0f0f10;padding:14px;box-shadow:0 30px 80px -20px rgba(28,26,23,.45),0 0 0 1px rgba(0,0,0,.6)}
.phone::before,.phone::after{content:"";position:absolute;background:#2c2c2e;border-radius:2px}
.phone::before{inset-inline-end:-4px;top:210px;width:4px;height:96px}
.phone::after{inset-inline-start:-4px;top:170px;width:4px;height:130px}
.phone-island{position:absolute;top:26px;left:50%;transform:translateX(-50%);width:122px;height:34px;background:#0f0f10;border-radius:20px;z-index:2}
.phone iframe{display:block;width:100%;height:100%;border:0;border-radius:44px;background:#fff}
.phone-note{font-size:14px;color:var(--muted);text-align:center;max-width:52ch}
@media(max-height:980px){.phone{transform:scale(.9);transform-origin:top center;margin-bottom:-88px}}
@media(max-height:880px){.phone{transform:scale(.8);margin-bottom:-176px}}

/* ---------- mobile app layout ---------- */
html.mobile{--top:56px}
html.mobile body{padding-bottom:calc(72px + env(safe-area-inset-bottom))}
html.mobile main{min-height:calc(100vh - var(--top) - 1px - 72px - env(safe-area-inset-bottom));min-height:calc(100dvh - var(--top) - 1px - 72px - env(safe-area-inset-bottom))} /* less the top bar's hairline and the tab bar, so a short screen never scrolls into empty space */
html.mobile .topbar-in{height:56px;padding-inline:16px;gap:10px;padding-top:env(safe-area-inset-top)}
html.mobile .brand img{height:30px}
html.mobile .brand .prog{display:none}
html.mobile .nav,html.mobile .search-pill,html.mobile .askbtn,html.mobile .kbd{display:none}
html.mobile .page{padding:18px 16px 40px;gap:20px}
html.mobile .banner{height:150px}
html.mobile .banner .cap{padding:12px 16px}html.mobile .banner .cap b{font-size:18px}
html.mobile .h1{font-size:26px}html.mobile .h2{font-size:22px}
html.mobile .hero{gap:12px}
html.mobile .hsearch{height:52px;padding-inline:14px 6px}html.mobile .hsearch input{font-size:16px}html.mobile .hsearch .go span{display:none}html.mobile .hsearch .go{padding-inline:12px;height:40px}
html.mobile .ps-grid{grid-template-columns:1fr}
html.mobile .ps{padding:14px}html.mobile .ps .pic{width:52px;height:52px}html.mobile .ps .t b{font-size:17px}
html.mobile .card{padding:18px;border-radius:12px}
html.mobile .ai{padding:20px;border-radius:12px}html.mobile .ai .big{font-size:19px}
html.mobile .ai .in b{font-size:17px}
html.mobile .facts{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
html.mobile .fact{padding:12px 14px;gap:10px}html.mobile .fact .kv .v{font-size:14.5px}html.mobile .fact .tile{width:36px;height:36px}
html.mobile .idc{grid-template-columns:auto minmax(0,1fr);gap:14px}html.mobile .idc .pic{width:72px;height:72px;font-size:22px}html.mobile .idc .who .nm{font-size:22px}
html.mobile .idc .meta{grid-template-columns:1fr;gap:4px}html.mobile .idc .acts{grid-column:1/-1}
html.mobile .req{padding:14px;gap:12px}html.mobile .req .t b{font-size:15px}html.mobile .req .st .amt{font-size:14px}
html.mobile .split,html.mobile .split.wide{grid-template-columns:1fr;gap:16px}
html.mobile .stats{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}html.mobile .stat .v{font-size:26px}html.mobile .stat{padding:14px 16px}
html.mobile .g2,html.mobile .g3,html.mobile .g4{grid-template-columns:1fr}
html.mobile .prose p{font-size:15px}
html.mobile .brief{padding:20px}html.mobile .brief .bf{grid-template-columns:1fr 1fr}
html.mobile footer.foot{display:none} /* the page footer only: the CPC GPT line under the composer stays on the phone */
html.mobile .card.flat{padding:0}html.mobile .tbl th,html.mobile .tbl td{padding:10px 12px}
.tabbar{display:none}
html.mobile .tabbar{display:grid;position:fixed;bottom:0;inset-inline:0;z-index:45;background:rgba(255,255,255,.96);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-top:1px solid var(--line);grid-auto-flow:column;grid-auto-columns:1fr;padding-bottom:env(safe-area-inset-bottom);height:calc(72px + env(safe-area-inset-bottom))}
.tabbar button{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;font-size:11.5px;color:var(--muted);height:72px}
.tabbar button.on{color:var(--ink);font-weight:500}
.tabbar button .i{width:22px;height:22px}
.tabbar button.on .i{color:var(--gold-deep)}
html.mobile .drawer{width:100%;top:0;bottom:0}
html.mobile .m-back{display:inline-flex;align-items:center;gap:6px;color:var(--gold-deep);font-size:14px;font-weight:500;margin-bottom:-6px}
html.mobile .chat-page{display:flex;flex-direction:column;height:calc(100vh - var(--top) - 1px - 72px - env(safe-area-inset-bottom));height:calc(100dvh - var(--top) - 1px - 72px - env(safe-area-inset-bottom))}
html.mobile .chat-page .chat-list{padding:16px}
html.mobile .pal-bg{padding:10px}
#splash{position:fixed;inset:0;z-index:999;background:#fff;display:flex;align-items:center;justify-content:center;transition:opacity 350ms var(--ease-out)}
#splash.out{opacity:0;pointer-events:none}
#splash img{height:72px;animation:fadeOnly 400ms var(--ease-out) both}

/* ---------- refinements after the first sweep ---------- */
.split .facts{grid-template-columns:repeat(2,minmax(0,1fr))}
.split .fact .kv .v{font-size:15.5px}
aside .list .li{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"a c" "b b"}
aside .list .li>span:nth-child(1){grid-area:a}aside .list .li>span:nth-child(2){grid-area:b}aside .list .li>span:nth-child(3){grid-area:c}
aside .list .li .e{text-align:end}
.rhead .t .h2{font-size:26px}

/* =====================================================================
   Motion — Emil Kowalski's design-engineering rules applied (2026-10-12)
   transform/opacity only · strong custom curves · UI under 300 ms ·
   transitions for anything fired rapidly · hover gated · reduced motion
   keeps opacity and drops movement · ⌘K and keyboard actions never animate.
   ===================================================================== */
/* Press feedback: the interface heard the tap (100–160 ms, scale 0.97) */
.btn,.ibtn,.askbtn,.avbtn,.lang,.search-pill,.chips button,.filters button,.px-categories button,.tabbar button,.gate .role,.gate .mode,.sheet .opt,.prompts button,.msg .fu button,.hsearch .go,.choice label,.menu button,.menu a,.pal li button{transition:transform 160ms var(--ease-out),background-color 150ms ease,color 150ms ease,border-color 150ms ease,box-shadow 150ms ease}
.btn:active,.askbtn:active,.chips button:active,.filters button:active,.px-categories button:active,.tabbar button:active,.gate .role:active,.gate .mode:active,.sheet .opt:active,.hsearch .go:active,.choice label:active,.menu button:active,.menu a:active{transform:scale(.97)}
.ibtn:active,.avbtn:active,.lang:active,.search-pill:active,.prompts button:active,.msg .fu button:active,.pal li button:active{transform:scale(.95)}
.ps:active,.req:active,.ai .in:active,.px-policy:active,.px-evidence>a:active{transform:scale(.985)}
.tbl tr.rowlink td{transition:background-color 150ms ease}
.ai .in b,.link,.nav a,.why{transition:color 150ms ease,background-color 150ms ease}
/* Hover only where there is a real pointer */
@media(hover:hover) and (pointer:fine){
  .ps:hover,.req:hover,.px-policy:hover,.px-evidence>a:hover{box-shadow:var(--shadow-lift)}
  .ai .in:hover b{color:var(--gold)}
}
/* Entering content: never from nothing (scale ≥ .95), strong ease-out, short */
.enter{animation:enterIn 220ms var(--ease-out) both}
@keyframes enterIn{from{opacity:0;transform:translateY(6px) scale(.985)}to{opacity:1;transform:none}}
.stagger>*{animation:stagIn 240ms var(--ease-out) both}
.stagger>*:nth-child(2){animation-delay:40ms}.stagger>*:nth-child(3){animation-delay:80ms}.stagger>*:nth-child(4){animation-delay:120ms}.stagger>*:nth-child(5){animation-delay:160ms}.stagger>*:nth-child(n+6){animation-delay:200ms}
@keyframes stagIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
/* Modal: centred, scale .96 + opacity, 250 ms; backdrop fades with it; exit faster */
.modal-bg{transition:opacity 250ms var(--ease-out);@starting-style{opacity:0}}
.modal,.sheet{transform-origin:center;transition:opacity 250ms var(--ease-out),transform 250ms var(--ease-out);@starting-style{opacity:0;transform:scale(.96)}}
.modal-bg.out{opacity:0;transition-duration:180ms}
.modal-bg.out .modal,.modal-bg.out .sheet{opacity:0;transform:scale(.97);transition-duration:180ms}
/* Drawer: iOS curve in, snappier out, same edge both ways */
.drawer{transform:translateX(0);transition:transform 280ms var(--ease-drawer);@starting-style{transform:translateX(var(--sx,100%))}}
.drawer.out{transform:translateX(var(--sx,100%));transition:transform 200ms var(--ease-out)}
.drawer-bg{transition:opacity 280ms var(--ease-drawer);@starting-style{opacity:0}}
.drawer-bg.out{opacity:0;transition-duration:200ms}
/* Toast: enters and leaves through the bottom, under 300 ms */
.toast{opacity:1;transition:opacity 240ms var(--ease-out),transform 240ms var(--ease-out);@starting-style{opacity:0;transform:translate(var(--tx),100%)}}
.toast.out{opacity:0;transform:translate(var(--tx),100%);transition:opacity 200ms var(--ease-out),transform 200ms var(--ease-out)}
/* Chat: a new message slides up 6 px; older ones never re-animate */
.msg.enter{animation:enterIn 200ms var(--ease-out) both}
/* Accordion: opens in place; the body fades and settles 4 px (opacity + transform only, WAAPI in app.js) */
/* Reduced motion: keep the fades that explain, drop the movement */
@media(prefers-reduced-motion:reduce){
  .fade,.enter,.stagger>*,.msg.enter,#splash img{animation:fadeOnly 150ms ease-out both}
  .stagger>*{animation-delay:0ms!important}
  .drawer{transition:opacity 200ms ease-out;@starting-style{transform:none;opacity:0}}
  .drawer.out{transform:none;opacity:0}
  .modal,.sheet{@starting-style{transform:none}}
  .modal-bg.out .modal,.modal-bg.out .sheet{transform:none}
  .toast{@starting-style{transform:translateX(var(--tx))}}
  .toast.out{transform:translateX(var(--tx))}
  .btn:active,.ps:active,.req:active,.ai .in:active,.px-policy:active,.px-evidence>a:active,.cs:active{transform:none}
  .typing i{animation:none;opacity:.7}
}

/* ---------- Desk tiles (request study): one row of six from 1180 px ---------- */
.ctrl{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
@media(min-width:1180px){.ctrl.six{grid-template-columns:repeat(6,minmax(0,1fr))}}
@media(max-width:640px){.ctrl,.ctrl.six{grid-template-columns:repeat(2,minmax(0,1fr))}}
.cs{display:flex;align-items:center;gap:10px;padding:14px;background:#fff;border-radius:var(--r-card);box-shadow:var(--shadow-soft);text-align:start;min-width:0;border:1px solid transparent;transition:transform 160ms var(--ease-out),border-color 150ms ease,box-shadow 150ms ease}
.cs .kv .v{font-size:24px;line-height:1.1}
.cs .kv .k{font-size:11.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cs.hot .kv .v{color:var(--danger)}
.cs.on{border-color:var(--gold-deep);background:var(--gold-soft)}
.cs:active{transform:scale(.97)}
@media(hover:hover) and (pointer:fine){.cs:hover{border-color:var(--gold-deep)}}
.trend{display:inline-flex;align-items:center;direction:ltr;unicode-bidi:isolate;font-size:12px;font-weight:600;color:var(--muted);padding-inline:6px;height:22px;border-radius:6px;background:rgba(122,117,108,.12);margin-inline-start:6px}
.trend.up{color:var(--danger);background:rgba(179,38,30,.1)}.trend.dn{color:var(--success);background:rgba(47,122,77,.12)}
.ps-pic{width:48px;height:48px;border-radius:50%;overflow:hidden;background:var(--surface-3);display:inline-flex;align-items:center;justify-content:center;color:var(--gold-deep);font-weight:600;flex:none}
.ps-pic img{width:100%;height:100%;object-fit:cover}
a.chip{cursor:pointer}
/* ---------- Request study work flow ---------- */
.wflow{gap:0}
.wstep{border-top:1px solid var(--line);padding:0}
.wstep:first-of-type{border-top:0}
.wstep summary{list-style:none;display:flex;align-items:center;gap:12px;padding:14px 0;cursor:pointer}
.wstep summary::-webkit-details-marker{display:none}
.wstep summary .n{width:28px;height:28px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-family:var(--serif);font-weight:500;font-size:13px;background:var(--surface-3);color:var(--muted);flex:none}
html[lang=ar] .wstep summary .n{font-family:var(--kufi)}
.wstep.now summary .n{background:var(--ink);color:var(--gold)}.wstep.done summary .n{background:rgba(47,122,77,.12);color:var(--success-text)}
.wstep summary .t{flex:1;min-width:0;display:flex;flex-direction:column}
.wstep summary .t b{font-weight:500;font-size:15px}.wstep summary .t span{font-size:12.5px;color:var(--muted)}
.wstep.later summary .t b{color:var(--muted)}
.wstep .body{padding-block:0 18px;padding-inline:40px 0;display:flex;flex-direction:column;gap:12px}
.regsteps{display:flex;gap:8px;margin-bottom:6px}
.rs{display:inline-flex;align-items:center;gap:8px;height:34px;padding-inline:10px 14px;border-radius:var(--r-control);border:1px solid var(--line);font-size:13.5px;color:var(--muted)}
.rs b{width:22px;height:22px;border-radius:4px;background:var(--surface-3);display:inline-flex;align-items:center;justify-content:center;font-size:12px;font-family:var(--serif)}
.rs.on{color:var(--ink);border-color:var(--ink)}.rs.on b{background:var(--ink);color:#fff}
.rs.done{color:var(--success)}.rs.done b{background:rgba(47,122,77,.12);color:var(--success)}
html.mobile .ctrl,html.mobile .ctrl.six{grid-template-columns:repeat(2,minmax(0,1fr))}
.cs .kv .k{white-space:normal;overflow:visible;text-overflow:clip;line-height:1.25}
.stat .v.money{font-size:22px}

.wstep:not([open]) .body{display:none}

/* ---------- accessibility pass (2026-10-13): contrast, targets, keyboard, menu ---------- */
.chip.study{color:var(--warning-text)}.chip.done{color:var(--success-text)}.chip.danger,.chip.med{color:var(--danger-text)}.chip.neutral{color:var(--ink-2)}
.trend.up{color:var(--danger-text)}.trend.dn{color:var(--success-text)}
.why{width:24px;height:24px;font-size:12px;position:relative}
.why::after{content:"";position:absolute;inset:-8px}
.btn.sm{height:40px}
.chips button{height:40px;padding-inline:14px}
.filters button,.filters input{height:40px}
.tabbar button{min-height:44px}
.skip{position:absolute;top:8px;inset-inline-start:8px;z-index:100;background:#fff;color:var(--ink);padding:10px 14px;border-radius:var(--r-control);box-shadow:var(--shadow-menu);transform:translateY(-200%);transition:transform 160ms var(--ease-out)}
.skip:focus{transform:none}
main:focus{outline:none}
[role=link][tabindex]:focus-visible{outline:2px solid var(--gold-deep);outline-offset:-2px}
.menu-btn{display:none}
@media(max-width:1023px){.menu-btn{display:inline-flex}}
.navsheet{display:flex;flex-direction:column}
.navsheet a{display:flex;align-items:center;justify-content:space-between;height:52px;padding-inline:12px;border-top:1px solid var(--line);font-size:16px}
.navsheet a:first-child{border-top:0}
.navsheet a.on{color:var(--gold-deep);font-weight:500}
.notfound{align-items:flex-start;max-width:560px;margin-inline:0;gap:16px}
.caption,.kv .k,.tbl th,.stat .k{color:var(--muted)}

.chip.progress,.chip.info,.chip.fin,.ai-tag{color:var(--gold-text)}
/* initials on cream circles */
.ps .pic,.person .av,.ps-pic,.idc .pic,.avatar,.msg.user .av{color:var(--gold-text)}

/* =====================================================================
   Executive Management (executive.js) — policy monitor, register, policy page, recommendation paper, impact on citizens.
   Same tokens and patterns as the Chairman and study screens: white cards on warm white, cream insets, ink for CPC GPT,
   gold only for the active rule and numerals. Logical properties throughout.
   ===================================================================== */
.px-heading{display:flex;flex-direction:column;gap:10px;max-width:760px}
.px-heading .h1{margin:0}
.ai ul.ins{list-style:none}
/* key figures: label on top, figure at the foot so figures line up across the row */
.px-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}
.px-stats:has(>:nth-child(3):last-child){grid-template-columns:repeat(3,minmax(0,1fr))}
@media(max-width:1100px){.px-stats,.px-stats:has(>:nth-child(3):last-child){grid-template-columns:repeat(2,minmax(0,1fr))}}
.px-stats>div{background:var(--card);border-radius:var(--r-card);box-shadow:var(--shadow-soft);padding:20px 22px;display:flex;flex-direction:column-reverse;justify-content:space-between;gap:10px;min-width:0}
.px-stats strong{font-family:var(--display);font-weight:500;font-size:34px;line-height:1.1;font-variant-numeric:tabular-nums}
.px-stats span{font-size:12.5px;font-weight:600;line-height:1.4;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}
html[lang=ar] .px-stats span{letter-spacing:0;font-size:13px}
.px-section-title{display:flex;align-items:flex-end;justify-content:space-between;gap:8px 16px;flex-wrap:wrap}
.px-section-title>div:not(.row){display:flex;flex-direction:column;gap:4px;min-width:0}
.px-section-title>.row{gap:8px;flex-wrap:nowrap}
.px-section-title h2{font-family:var(--display);font-weight:500;font-size:30px;line-height:var(--lh-display);letter-spacing:var(--ls-display)}
.card .px-section-title h2{font-size:20px;line-height:1.35}
.px-section-title>span{font-size:13.5px;color:var(--muted)}
/* filters: category buttons (ink when chosen, like the desk filters) and a search field */
.px-toolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px 16px}
.px-categories{display:flex;gap:8px;flex-wrap:wrap}
.px-categories button{height:40px;padding-inline:14px;border:1px solid var(--line);border-radius:var(--r-control);background:#fff;font-size:13.5px;color:var(--ink)}
.px-categories button.on{background:var(--ink);color:#fff;border-color:var(--ink)}
@media(hover:hover) and (pointer:fine){.px-categories button:not(.on):hover{border-color:var(--ink)}}
.px-search{display:flex;align-items:center;gap:8px;height:40px;width:min(320px,100%);padding-inline:12px;border:1px solid var(--line);border-radius:var(--r-control);background:#fff;color:var(--muted);transition:border-color 150ms ease,box-shadow 150ms ease}
.px-search:focus-within{border-color:var(--gold-deep);box-shadow:0 0 0 3px var(--gold-soft)}
.px-search input{flex:1;min-width:0;height:100%;border:0;outline:0;background:transparent;font-size:14px;color:var(--ink)}
.px-search input::placeholder{color:var(--muted)}
@media(max-width:640px){.px-search{width:100%}}
/* policy cards */
.px-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
@media(max-width:1100px){.px-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:640px){.px-grid{grid-template-columns:minmax(0,1fr)}}
.px-grid>.empty{grid-column:1/-1}
.px-policy{background:var(--card);border-radius:var(--r-card);box-shadow:var(--shadow-soft);padding:24px;display:flex;flex-direction:column;align-items:flex-start;gap:10px;min-width:0;text-align:start;transition:box-shadow 150ms ease,transform 160ms var(--ease-out)}
.px-policy>.row{align-self:stretch;gap:8px}
.px-policy h2{font-family:var(--display);font-weight:500;font-size:20px;line-height:1.35;margin-top:4px;transition:color 150ms ease}
.px-policy>p{font-size:13.5px;color:var(--muted)}
.px-figs{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 8px;padding-top:6px}
.px-figs .num{font-size:30px;line-height:1.1}
.px-figs .caption{font-size:13px}
.px-figs .trend{margin-inline-start:0;align-self:center}
.px-card-foot{align-self:stretch;margin-top:auto;padding-top:14px;border-top:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:13.5px;font-weight:500;color:var(--gold-deep)}
@media(hover:hover) and (pointer:fine){.px-policy:hover h2{color:var(--gold-deep)}}
/* the five steps from observation to recommendation */
.px-guide{display:flex;gap:16px;align-items:flex-start;background:var(--surface-2);border-radius:var(--r-card);padding:24px}
.px-guide>div{flex:1;min-width:0;display:flex;flex-direction:column;gap:14px}
.px-guide h2{font-family:var(--display);font-weight:500;font-size:20px;line-height:1.35}
.px-guide .px-checklist{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:16px}
.px-guide .px-checklist li,.px-guide .px-checklist li:first-child{grid-template-columns:minmax(0,1fr);gap:4px;padding:12px 0 0;border-top:2px solid var(--line)}
@media(max-width:1100px){.px-guide .px-checklist{display:flex}.px-guide .px-checklist li{grid-template-columns:28px minmax(0,1fr);gap:12px;padding:12px 0;border-top:1px solid var(--line)}.px-guide .px-checklist li:first-child{border-top:0;padding-top:4px;grid-template-columns:28px minmax(0,1fr);gap:12px}}
/* numbered list: gold numerals 01, hairline between rows (design-system pattern) */
.px-checklist{list-style:none;counter-reset:s;display:flex;flex-direction:column}
.px-checklist li{counter-increment:s;display:grid;grid-template-columns:28px minmax(0,1fr);gap:12px;padding:12px 0;border-top:1px solid var(--line);font-size:14px;line-height:1.5}
.px-checklist li:first-child{border-top:0;padding-top:4px}
.px-checklist li::before{content:counter(s,decimal-leading-zero);font-family:var(--serif);font-weight:500;color:var(--gold-deep);font-variant-numeric:tabular-nums}
html[lang=ar] .px-checklist li::before{font-family:var(--kufi)}
/* policy page: header card, tabs (2 px gold rule on the active tab, as in the nav), two columns */
.px-workspace>#pxHead+.px-tabs{margin-top:-12px}
.px-tabs{display:flex;gap:4px 28px;box-shadow:inset 0 -1px 0 var(--line);overflow-x:auto;scrollbar-width:none}
.px-tabs::-webkit-scrollbar{display:none}
.px-tabs button{position:relative;flex:none;height:48px;font-size:15px;color:var(--muted);white-space:nowrap;transition:color 150ms ease}
.px-tabs button:hover{color:var(--ink)}
.px-tabs button.on{color:var(--ink);font-weight:500}
.px-tabs button::after{content:"";position:absolute;inset-inline:0;bottom:0;height:2px;background:var(--gold);opacity:0;transition:opacity 150ms ease}
.px-tabs button.on::after{opacity:1}
.px-tabs button:focus-visible{outline-offset:-2px}
.px-workspace>.px-tabs+#pxBody{margin-top:-16px}
#pxBody{display:flex;flex-direction:column;gap:24px;min-width:0}
.px-two{display:grid;grid-template-columns:minmax(0,1fr) 380px;gap:24px;align-items:start}
@media(max-width:1100px){.px-two{grid-template-columns:minmax(0,1fr)}}
.px-workspace .card>.btn,.px-workspace .card>.chip{align-self:flex-start}
.px-workspace .rhead .acts .kv{align-items:flex-end;text-align:end}
.px-workspace .rhead .acts .kv .v.big{font-size:34px}
/* linked requests as evidence (read-only rows in the look of the request rows) */
.px-ev-block{display:flex;flex-direction:column;gap:12px}
.px-evidence{display:flex;flex-direction:column;gap:12px}
.px-evidence>a{display:flex;align-items:center;gap:16px;padding:16px 20px;background:var(--card);border-radius:var(--r-card);box-shadow:var(--shadow-soft);text-align:start;min-width:0;transition:box-shadow 150ms ease,transform 160ms var(--ease-out)}
.card .px-evidence>a{box-shadow:none;border:1px solid var(--line)}
.px-evidence .pic{width:48px;height:48px;border-radius:50%;overflow:hidden;background:var(--surface-3);color:var(--gold-text);font-weight:600;font-size:15px;display:inline-flex;align-items:center;justify-content:center;flex:none}
.px-evidence .pic img{width:100%;height:100%;object-fit:cover}
.px-evidence>a>div{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.px-evidence b{font-weight:500;font-size:15.5px;line-height:1.35;transition:color 150ms ease}
.px-evidence p{font-size:14px;color:rgba(28,26,23,.78)}
.px-evidence .chev{color:var(--muted)}
@media(hover:hover) and (pointer:fine){.px-evidence>a:hover b{color:var(--gold-deep)}}
/* CPC GPT estimate (labelled, with its assumptions) */
.px-estimate .stats{grid-template-columns:repeat(3,minmax(0,1fr))}
@media(max-width:760px){.px-estimate .stats{grid-template-columns:minmax(0,1fr)}}
.px-estimate .stat{background:var(--surface-2);box-shadow:none}
.px-estimate h3{margin-top:8px}
/* study editor */
.px-editor .form{max-width:760px}
.px-editor #pxNote:empty{display:none}
.px-editor textarea{min-height:132px;line-height:1.6}
.px-editor textarea[readonly]{background:var(--surface-2);border-color:transparent;resize:none;cursor:default}
.px-editor textarea[readonly]:focus{box-shadow:none;border-color:var(--line)}
/* a field's header row: its <label>, then the CPC GPT tag and its (!) beside it (never inside the label) */
.field-head{display:flex;align-items:center;flex-wrap:wrap;gap:6px 8px;min-height:24px}
.px-ai{display:inline-flex;align-items:center;gap:6px}
/* follow-up: the study stage and the entity's own report, side by side and kept apart */
.px-follow{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-bottom:12px}
@media(max-width:760px){.px-follow{grid-template-columns:minmax(0,1fr)}}
.px-follow>div{background:var(--surface-2);border-radius:var(--r-card);padding:18px 20px;display:flex;flex-direction:column;align-items:flex-start;gap:8px;min-width:0}
/* recommendation paper: the printable brief, then the review step (never printed) */
.px-review-card{max-width:860px;margin-inline:auto;width:100%}
.px-review-card>.chip,.px-review-card .btn{align-self:flex-start}
.px-review{display:flex;align-items:center;gap:12px;min-height:48px;padding:10px 14px;border:1px solid var(--line);border-radius:var(--r-control);background:#fff;cursor:pointer;font-size:14.5px;transition:border-color 150ms ease,background-color 150ms ease}
.px-review input{width:20px;height:20px;margin:0;flex:none;accent-color:var(--gold-deep);cursor:inherit}
.px-review:has(input:checked){border-color:var(--gold-deep);background:var(--gold-soft)}
.px-review:has(input:disabled){cursor:default;color:var(--muted)}
.px-review:has(input:focus-visible){outline:2px solid var(--gold-deep);outline-offset:2px}
.brief .row .ai-tag{flex:none}
/* impact on citizens: one section per policy */
.sec-h h2 a{color:inherit;transition:color 150ms ease}
@media(hover:hover) and (pointer:fine){.sec-h h2 a:hover{color:var(--gold-deep)}}
html.mobile .px-grid,html.mobile .px-two,html.mobile .px-follow,html.mobile .px-estimate .stats{grid-template-columns:minmax(0,1fr)}
html.mobile .px-stats,html.mobile .px-stats:has(>:nth-child(3):last-child){grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
html.mobile .px-stats>div{padding:14px 16px}html.mobile .px-stats strong{font-size:26px}
html.mobile .px-section-title h2{font-size:22px}
html.mobile .px-guide{padding:18px;flex-direction:column}

/* ---------- request study: work page, register (operations lead's new classes) ---------- */
.wflow>.ch{padding-bottom:10px}
.wf-head{padding-bottom:12px;border-bottom:1px solid var(--line);gap:8px 12px}
.wf-done{padding:12px 0;border-bottom:1px solid var(--line);gap:8px 12px}
.wf-head+.wstep,.wf-done+.wstep{border-top:0}
.wstep.later summary .n{background:transparent;box-shadow:inset 0 0 0 1px var(--line)}
.memo-field textarea{min-height:240px;font-size:14.5px;line-height:1.65}
.memo-field textarea[readonly]{background:var(--surface-2);border-color:transparent;resize:none}
.form.newcit{gap:12px;padding:16px;border:1px solid var(--line);border-radius:var(--r-card);background:var(--surface-2);max-width:none}
.field-error{font-size:12.5px;font-weight:500;color:var(--danger-text)}
.field input[aria-invalid=true],.field select[aria-invalid=true],.field textarea[aria-invalid=true]{border-color:var(--danger)}
.req-mark{color:var(--danger-text);margin-inline-start:2px}

/* desk: the CPC GPT column header carries its (!) */
.tbl th .th-ai{display:inline-flex;align-items:center;gap:6px}

/* ---------- identifiers stay whole and left-to-right (Emirates ID, phone, reference, file size) ---------- */
bdi{white-space:nowrap}

/* ---------- targets: back links and small links reach 40 px ---------- */
.link.back,.page>.link:first-child,.page>.row>.link:first-child,html.mobile .m-back{min-height:40px;display:inline-flex;align-items:center}
.page>.link:first-child{align-self:flex-start}
html.mobile .brand{min-height:40px}
.study-side .card>.link,.card .ch>.link{min-height:40px}
.rhead .sub .link{position:relative}
.rhead .sub .link::after{content:"";position:absolute;inset:-9px -2px}

/* ---------- CPC GPT answer links wrap instead of being cut at the panel edge ---------- */
.ai .row .btn{white-space:normal;height:auto;min-height:40px;padding-block:8px;line-height:1.35;text-align:start;max-width:100%}

/* ---------- iPhone frame: a status-bar zone under the Dynamic Island; the note sits beside the phone on wide screens ---------- */
html.mobile.framed{--top:100px}
html.mobile.framed .topbar-in{height:100px;padding-top:44px}
.phone-side{display:flex;flex-direction:column;align-items:center;gap:18px}
@media(min-width:1100px){.phone-wrap{flex-direction:row;justify-content:center;align-items:center;gap:48px}.phone-side{align-items:flex-start;max-width:34ch}.phone-side .phone-note{text-align:start}}

/* ---------- fix round 2 (design) ---------- */
html.mobile .idc .pic .i{width:32px;height:32px}
/* a criterion the citizen file does not record yet: stated on one line across the bar and score columns, no score */
.crit .c.na .caption{grid-column:2/-1;white-space:nowrap;line-height:1.3}
/* error toast: the alert mark in a danger square (white on danger 6.5:1), announced as an alert */
.toast.err .i{width:24px;height:24px;padding:4px;border-radius:6px;background:var(--danger);color:#fff}
/* the recommendation paper keeps the paragraphs the officer typed */
.px-paper p{white-space:pre-line}
/* profile on the web system: buttons sized to their labels, the two account actions side by side (the phone keeps full-width rows) */
html:not(.mobile) .profile .card>.btn{align-self:flex-start}
html:not(.mobile) .profile .card:last-child{flex-direction:row;flex-wrap:wrap;align-items:center}
html:not(.mobile) .profile .card:last-child>.caption{flex-basis:100%}
/* contrast: the (!) mark at full strength (no opacity: gold-deep 4.6:1 on cream, 4.9:1 on white); a done register step in the darker success text */
.rs.done,.rs.done b{color:var(--success-text)}
/* targets ≥ 40 px: short nav labels, the search clear button, heading links and links inside a sentence (hit area grows, not the type) */
.nav a{min-width:40px;justify-content:center}
.hsearch .ibtn{width:40px;height:40px}
.sec-h h2 a,p>a.link{position:relative}
.sec-h h2 a::after,p>a.link::after{content:"";position:absolute;inset:-9px -2px}
/* the request count on a person card in the darker gold text (5.8:1 on gold-soft); the assistant's suggested questions reach 40 px */
.ps .cnt b{color:var(--gold-text)}
.prompts button{min-height:40px}

/* ---------- fix round 3 (design) ---------- */
/* phone: a toast rises above the 72 px tab bar instead of covering it */
html.mobile .toast{bottom:calc(72px + 12px + env(safe-area-inset-bottom))}
/* phone: the toast is centred across the whole width (a box pinned at 50% could only use half the screen, so a short
   confirmation broke over two lines) */
html.mobile .toast,html.mobile[dir=rtl] .toast{inset-inline:16px;margin-inline:auto;width:max-content;max-width:calc(100% - 32px);--tx:0px}
/* …and it rises 12 px into place above the tab bar instead of sliding up through it (opacity + transform, 240 ms in, 200 ms out) */
html.mobile .toast{@starting-style{opacity:0;transform:translate(0,12px)}}
html.mobile .toast.out{transform:translate(0,12px)}
@media(prefers-reduced-motion:reduce){html.mobile .toast{@starting-style{transform:none}}html.mobile .toast.out{transform:none}}
/* person cards on the web system: one tile width for "Request" and "Requests" (طلب / طلبات), so counts line up down the
   results grid; the phone keeps its approved 64 px tile and the room it leaves for the phone number and Emirates ID */
html:not(.mobile) .ps .cnt{min-width:76px}
/* request work page: in the 440 px work column the criterion names keep one line in Arabic and English (228 px for the name;
   the bar is a visual aid, so it gives way; the score column keeps room for «20/25») */
@media(min-width:1101px){.wflow .crit .c{grid-template-columns:minmax(0,1fr) 60px 44px;gap:10px}}

/* ---------- fix round 4 (design) ---------- */
/* a caption led by an icon (a later step's lock, the policy note on the Study step, Route held while the memo has unsaved
   edits): a 14 px icon centred on the first line of text, the text beside it, as in the CPC GPT next-step line */
p.caption:has(>svg.i:first-child){display:flex;align-items:flex-start;gap:6px}
p.caption>svg.i:first-child{width:14px;height:14px;margin-top:calc((1lh - 14px)/2)}
/* Route is held: the alert mark in the warning text tone (6.2:1 on white), the words stay muted */
#routeWait>svg.i{color:var(--warning-text)}

/* ---------- final pass (2026-10-20) ---------- */
.tabbar button span{white-space:nowrap;padding-inline:2px}
html.mobile .crit .c{grid-template-columns:minmax(0,1fr) 56px 44px;gap:10px}

/* ---------- phone layout, sign-off fixes (2026-10-20) ---------- */
/* the three policy tabs share the width; a long label takes two lines inside its 48 px target */
html.mobile .px-tabs{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0;overflow:visible}
html.mobile .px-tabs button{white-space:normal;height:auto;min-height:48px;padding:8px 6px;line-height:1.3;font-size:14px;text-align:center}
/* page headers stack: the title gets the full card width, the figure or brief button moves under it */
html.mobile .rhead{display:grid;grid-template-columns:44px minmax(0,1fr);gap:12px 14px}
html.mobile .rhead .acts{grid-column:1/-1;justify-content:flex-start}
html.mobile .rhead .acts .kv{align-items:flex-start;text-align:start}
/* tables stack into one card per row; the first cell leads, the others carry their column name */
html.mobile .tbl-wrap{margin-inline:0;overflow:visible}
html.mobile .tbl,html.mobile .tbl tbody,html.mobile .tbl tr,html.mobile .tbl td{display:block;width:auto}
html.mobile .tbl thead{display:none}
html.mobile .tbl tr{position:relative;padding:14px 16px;border-top:1px solid var(--line)}
html.mobile .tbl tbody tr:first-child{border-top:0}
html.mobile .tbl td{border:0;padding:3px 0;font-size:14px;white-space:normal}
html.mobile .tbl td:first-child{padding-inline-end:36px}
html.mobile .tbl td.end{position:absolute;top:16px;inset-inline-end:12px;padding:0}
html.mobile .tbl td[data-label]:nth-child(n+3):not(.end)::before{content:attr(data-label) " · ";color:var(--muted);font-size:12.5px;font-weight:500}
html.mobile .tbl tr.rowlink:active{background:var(--surface-2)}
/* the citizen panel: the financial-pressure chip drops under the name block */
html.mobile .card .row:has(>.ps-pic){flex-wrap:wrap}
html.mobile .card .row:has(>.ps-pic)>.kv{flex:1 1 calc(100% - 62px)!important;min-width:0} /* outranks the inline flex:1 so the chip wraps under the name */
html.mobile .card .row:has(>.ps-pic)>.chip{margin-inline-start:62px}
/* the chooser has no tab bar */
html.mobile body:has(.gate){padding-bottom:0}

/* ===== sign-off #2 (2026-10-20) ===== */
/* a title typed in the other language keeps its own reading order but stays on the page's edge */
html[dir=rtl] :is(.rhead h1,.brief h1,.req .t b,.tbl td,.tl .e b,.tl .e span,.li b)[dir]{text-align:right}
html[dir=ltr] :is(.rhead h1,.brief h1,.req .t b,.tbl td,.tl .e b,.tl .e span,.li b)[dir]{text-align:left}
html.mobile .filters input{flex:1 1 100%;min-width:0}
/* the policy link under a request title: a 40 px target without moving the line */
.rhead .sub a.link{position:relative}
.rhead .sub a.link::after{content:"";position:absolute;inset:-11px -4px}
html.mobile .tbl td .next .why{flex:none;margin-inline-start:4px}

/* ===== entry and banner photo: the whole group in frame (Faisal, 2026-10-20) =====
   The barza photograph is a wide 2.8:1 image; the group stands across one half (the right in Banner-image.jpg, the left in
   its mirrored -rtl copy). The entry page now shows it as a wide band under a slim logo bar, sized so every person stays in
   frame at 1280–2000, with the caption over the open grass; the role cards sit in a row beneath. */
.gate{display:flex;flex-direction:column;min-height:100vh;grid-template-columns:none;background:var(--bg)}
.gate .gbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px clamp(16px,4vw,48px);background:#fff;border-bottom:1px solid var(--line)}
.gate .gbar .logo img{height:44px;display:block}
.gate .ph{min-height:0;flex:none;height:clamp(300px,46vh,calc(100vw / 2.81));overflow:hidden}
/* the official photograph is never mirrored: the group stands on the right of the frame in both languages, so the caption sits over the open left side */
.gate .ph img{object-position:100% 28%}
.gate .ph .ov{background:linear-gradient(to right,rgba(28,26,23,.86) 0%,rgba(28,26,23,.6) 26%,rgba(28,26,23,0) 46%)}
.gate .ph .cap{inset-inline:auto;left:0;right:auto;max-width:min(560px,40%);padding:clamp(24px,3vw,44px);top:0;justify-content:center}
.gate .ph .cap b{font-size:clamp(26px,2.4vw,36px)}
.gate .pick{max-width:1120px;padding:clamp(28px,3.4vw,44px) clamp(16px,4vw,48px) 40px;justify-content:flex-start;gap:22px}
.gate .pick h1{font-size:clamp(26px,2.2vw,32px)}
@media(min-width:901px){
  .gate .roles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
  .gate .role{align-items:flex-start;height:100%}
  .gate .role .chev{align-self:center}
  .gate .modes{max-width:760px}
}
/* phone and narrow windows: the photo keeps the group in frame (anchored on its side) and the caption sits under it */
@media(max-width:900px){
  .gate .ph{height:auto;overflow:visible;display:flex;flex-direction:column}
  .gate .ph img{position:relative;inset:auto;height:clamp(200px,52vw,320px)}
  .gate .ph .ov{display:none}
  .gate .ph .cap{position:static;max-width:none;background:var(--ink);padding:20px 20px 22px;gap:8px}
  .gate .ph .cap b{font-size:24px}
  .gate .ph .cap p{font-size:14px}
}
html.mobile .gate .gbar{padding-top:max(14px,env(safe-area-inset-top))}
/* the Chairman's home banner: anchored on the group's side so no one is cut at the edge; a little taller on very wide screens */
.banner img{object-position:100% 12%}
@media(min-width:768px){.banner{height:clamp(320px,20vw,420px)}}

/* ===== Executive Management: impact overview and impact studio (2026-10-20) ===== */
@property --p{syntax:'<number>';inherits:false;initial-value:0}
.px-overview{gap:20px}
.px-overview-grid{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(260px,1fr);gap:24px;align-items:stretch}
@media(max-width:1100px){.px-overview-grid{grid-template-columns:minmax(0,1fr)}}
.px-chart-wrap{min-width:0;background:var(--surface-2);border-radius:var(--r-card);padding:16px 12px 8px}
.px-chart{display:block;width:100%;height:auto}
.px-chart .grid{stroke:var(--line);stroke-width:1}
.px-chart .ax{font:12px var(--sans);fill:var(--muted)}
html[lang=ar] .px-chart .ax{font-family:var(--kufi)}
.px-chart .tot{font:12px var(--serif);font-weight:500;fill:var(--ink)}
html[lang=ar] .px-chart .tot{font-family:var(--kufi)}
.px-chart rect{transition:y 240ms var(--ease-out),height 240ms var(--ease-out)}
.px-chart rect.obs{fill:var(--ink)}
.px-chart rect.prj{fill:var(--gold)}
.px-chart .mark{stroke:var(--gold-deep);stroke-width:1.5;stroke-dasharray:4 4}
.px-chart text.mark{fill:var(--gold-deep);stroke:none;font-weight:600}
.px-kpis{display:flex;flex-direction:column;gap:12px}
.px-kpi{background:var(--surface-2);border-radius:var(--r-card);padding:16px 18px;display:flex;flex-direction:column;gap:4px;min-width:0}
.px-kpi.gold{background:var(--ink);color:#fff}
.px-kpi .k{font-size:12px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
html[lang=ar] .px-kpi .k{letter-spacing:0;font-size:13px}
.px-kpi.gold .k{color:var(--gold)}
.px-kpi strong{font-family:var(--display);font-weight:500;font-size:32px;line-height:1.1;font-variant-numeric:tabular-nums;direction:ltr;unicode-bidi:isolate;text-align:start}
.px-kpi strong.money{font-size:24px}
.px-kpi .d{font-size:13px;color:var(--muted);line-height:1.45}
.px-kpi.gold .d{color:rgba(255,255,255,.72)}
.px-legend{list-style:none;display:flex;flex-wrap:wrap;gap:8px 18px}
.px-legend a{display:inline-flex;align-items:center;gap:8px;min-height:40px;font-size:13.5px;color:var(--ink)}
.px-legend i{width:12px;height:12px;border-radius:3px;flex:none}
.px-legend b{font-family:var(--serif);font-weight:500;color:var(--muted)}
html[lang=ar] .px-legend b{font-family:var(--kufi)}
.px-legend a:hover span{color:var(--gold-deep)}
.px-spark{width:120px;height:36px;flex:none}
.px-spark polyline{fill:none;stroke:var(--gold-deep);stroke-width:2;stroke-linejoin:round;stroke-linecap:round}
.px-spark circle{fill:var(--gold-deep)}
.px-card-spark{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.px-est{display:inline-flex;align-items:center;gap:5px;height:24px;padding-inline:8px;border-radius:6px;font-size:12px;font-weight:500;color:var(--gold-text);background:var(--gold-soft);white-space:nowrap}
.px-est .i{width:13px;height:13px}
a.px-est{min-height:40px;padding-block:8px;height:auto}
.sec-h .px-card-spark{justify-content:flex-end}
/* the studio */
.px-studio{gap:22px}
.px-studio-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:28px;align-items:start}
@media(max-width:1100px){.px-studio-grid{grid-template-columns:minmax(0,1fr)}}
.px-levers{display:flex;flex-direction:column;gap:18px}
.lever{display:flex;flex-direction:column;gap:6px}
.lever .lh{display:flex;align-items:baseline;justify-content:space-between;gap:12px}
.lever label{font-size:14px;font-weight:500}
.lever output{font-family:var(--serif);font-weight:500;font-size:18px;color:var(--gold-deep);white-space:nowrap;direction:ltr;unicode-bidi:isolate;font-variant-numeric:tabular-nums}
html[lang=ar] .lever output{font-family:var(--kufi);direction:rtl}
.lever input[type=range]{width:100%;height:40px;margin:0;accent-color:var(--gold-deep);cursor:pointer;background:transparent}
.lever input[type=range]:disabled{cursor:default;opacity:.6}
.lever input[type=range]:focus-visible{outline:2px solid var(--gold-deep);outline-offset:4px;border-radius:4px}
.px-results{display:flex;flex-direction:column;gap:16px}
.px-hero-fig{display:flex;align-items:center;gap:18px;padding:20px;background:var(--ink);color:#fff;border-radius:var(--r-card)}
.px-hero-fig .ring{width:84px;height:84px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-family:var(--serif);font-size:18px;font-weight:500;color:#fff;background:conic-gradient(var(--gold) calc(var(--p)*1%),rgba(255,255,255,.14) 0);position:relative;flex:none;transition:--p 240ms var(--ease-out)}
.px-hero-fig .ring::before{content:"";position:absolute;inset:8px;background:var(--ink);border-radius:50%}
.px-hero-fig .ring b{position:relative;direction:ltr;unicode-bidi:isolate}
html[lang=ar] .px-hero-fig .ring{font-family:var(--kufi)}
.px-hero-fig>div{display:flex;flex-direction:column;gap:2px;min-width:0}
.px-hero-fig strong{font-family:var(--display);font-weight:500;font-size:40px;line-height:1.05;color:var(--gold)}
.px-hero-fig>div>span{font-size:14px;color:rgba(255,255,255,.85)}
.px-hero-fig .caption{color:rgba(255,255,255,.55)}
.px-res-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
@media(max-width:640px){.px-res-grid{grid-template-columns:minmax(0,1fr)}}
.px-res-grid .px-kpi strong{font-size:26px}
.px-res-grid .px-kpi strong.money{font-size:20px}
.px-proj{display:flex;flex-direction:column;gap:12px}
.px-legend-inline{display:inline-flex;align-items:center;gap:6px 8px;flex-wrap:wrap;font-size:13px;color:var(--muted)}
.px-legend-inline i{width:12px;height:12px;border-radius:3px;display:inline-block}
.px-legend-inline i.obs{background:var(--ink)}.px-legend-inline i.prj{background:var(--gold);margin-inline-start:10px}
.px-studio-foot{display:flex;align-items:center;justify-content:space-between;gap:12px 16px;flex-wrap:wrap;padding-top:16px;border-top:1px solid var(--line)}
.px-studio-foot .caption{flex:1 1 360px;min-width:0}
.px-evidence p[dir]{text-align:start}
html[dir=rtl] .px-evidence p[dir]{text-align:right}html[dir=ltr] .px-evidence p[dir]{text-align:left}
@media(prefers-reduced-motion:reduce){.px-chart rect,.px-hero-fig .ring{transition:none}}
/* phone */
html.mobile .px-overview-grid,html.mobile .px-studio-grid{grid-template-columns:minmax(0,1fr);gap:16px}
html.mobile .px-chart-wrap{padding:10px 6px 4px}
html.mobile .px-chart .ax{font-size:14px}
html.mobile .px-hero-fig strong{font-size:32px}
.px-kpi strong.money{direction:inherit;unicode-bidi:normal;font-size:22px}
/* a title isolated in a bdi still wraps (bdi is otherwise kept whole for references) */
bdi.tt{white-space:normal}
/* ===== sign-off #5 ===== */
.px-chart.compact .ax{font-size:15px}
.px-chart.compact text.mark{font-size:14px}
.px-legend-inline .lg{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.px-legend-inline .lg+.lg{margin-inline-start:10px}
.px-legend-inline .lg i.prj{margin-inline-start:0}
/* ===== sign-off #6 ===== */
@media(max-width:639px){.px-tabs{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0;overflow:visible}.px-tabs button{white-space:normal;height:auto;min-height:48px;padding:8px 6px;line-height:1.3;font-size:14px;text-align:center}}
/* ===== sign-off #7 ===== */
.why::after{content:"";position:absolute;inset:-8px}
@media(max-width:639px){.px-workspace .rhead{display:grid;grid-template-columns:44px minmax(0,1fr);gap:12px 14px}.px-workspace .rhead .acts{grid-column:1/-1;justify-content:flex-start}.px-workspace .rhead .acts .kv{align-items:flex-start;text-align:start}}
/* ===== sign-off #8 polish ===== */
.filters select{height:40px;padding-inline:12px;border:1px solid var(--line);border-radius:var(--r-control);background:#fff;font:inherit;font-size:13.5px;color:var(--ink)}
.px-search{height:42px}
.px-policy{cursor:pointer}
.px-policy h2 a{color:inherit;text-decoration:none}
.px-policy h2 a:focus-visible{outline:2px solid var(--gold-deep);outline-offset:2px;border-radius:4px}
.px-res-grid .px-kpi strong.money{font-size:18px;white-space:nowrap}
@media(max-width:1300px){.px-res-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:640px){.px-res-grid{grid-template-columns:minmax(0,1fr)}}
