/* Aladdin working parts (7 Nov 2026): the look first built in Luban, shared by every character that uses
   the Aladdin template (Luban, Adam, Zheng He, ...). Load after the character's own style.css:
   <link rel="stylesheet" href="/aladdin-ui/aladdin-parts.css">. Copied in by shared/ui/copy-kit.mjs.
   Parts: tokens · buttons · list header, view tabs and quick views · board columns and project cards ·
   list grouped by stage · calendar · property cards (rows, pills, people) · timelines · money tiles and bars ·
   forms, chips and dialogs · versions. */
/* Layout: Aladdin workspace — sticky top bar with Viewing As, department sidebar of characters, one working column; stage colours follow the brand gradient gold → orange → coral → pink-red */
:root{
  /* Aladdin UI kit tokens (shared/ui/aladdin-ui.css, Magic of Working 7 Nov 2026); Luban's names kept */
  --paper:var(--al-paper,#FBF8F3); --card:#FFFFFF; --sunk:var(--al-hover,#F2ECE3); --ink:var(--al-ink,#3A3A3C); --ink2:#5F5852; --ink3:#6E665D;
  --line:var(--al-line,#ECE4D8); --line2:var(--al-line-strong,#D9CFC2);
  --gold:#FFB51B; --amber:#FF9A28; --orange:#FF8033; --coral:#FE553E; --pink:#FF0055;
  --good:#1E5B2E; --goodbg:#E4F2E7; --warn:#7A4F00; --warnbg:#FFF1D1; --bad:#A1251A; --badbg:#FFE3DF; --info:#2F6FA8; --infobg:#E6F0FA;
  --s-enquiry:#FFB51B; --s-following:#FF9A28; --s-confirmed:#FF8033; --s-execution:#FE553E; --s-clearing:#FF0055; --s-closed:#3A3A3C; --s-exit:#B5AEA2;
  --c-luban:#FF8033; --c-zhenghe:#2F6FA8; --c-bole:#8A5CC2; --c-medici:#2E8B57;
  --on-accent:#3A3A3C; --link:#B33A0A;
  --f-body:var(--al-font,"Source Sans 3","PingFang SC","Microsoft YaHei",system-ui,sans-serif);
  --f-display:var(--al-display,"Saira","Source Sans 3",sans-serif);
  --f-zh:"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans SC",sans-serif;
  --r:12px;
}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){
  --paper:#1C1A18; --card:#262321; --sunk:#2F2B28; --ink:#EEE8DD; --ink2:#B9B1A5; --ink3:#A39B8F; --line:#3A3532; --line2:#4A4440;
  --good:#6FCF97; --goodbg:#1F3528; --warn:#F2B84B; --warnbg:#3A2E16; --bad:#FF7A86; --badbg:#3D1F23; --info:#7DB5EA; --infobg:#1C2C3D;
  --s-closed:#D8D1C5; --s-exit:#6F685F; --c-zhenghe:#7DB5EA; --c-bole:#B992EA; --c-medici:#6FCF97; --link:#FFA477; color-scheme:dark}}
:root[data-theme="dark"]{
  --paper:#1C1A18; --card:#262321; --sunk:#2F2B28; --ink:#EEE8DD; --ink2:#B9B1A5; --ink3:#A39B8F; --line:#3A3532; --line2:#4A4440;
  --good:#6FCF97; --goodbg:#1F3528; --warn:#F2B84B; --warnbg:#3A2E16; --bad:#FF7A86; --badbg:#3D1F23; --info:#7DB5EA; --infobg:#1C2C3D;
  --s-closed:#D8D1C5; --s-exit:#6F685F; --c-zhenghe:#7DB5EA; --c-bole:#B992EA; --c-medici:#6FCF97; --link:#FFA477; color-scheme:dark}
/* Base adjustments every character from the Aladdin template gets (were Luban-only) */
body{font-family:var(--f-body);font-size:16px;-webkit-font-smoothing:antialiased}
:focus-visible{outline:3px solid var(--orange);outline-offset:2px}
.chead .mark{width:44px;height:44px;border-radius:12px;object-fit:contain;flex:none;background:none}
.chead h1{font-family:var(--f-display);font-weight:600;font-size:28px;margin:0;line-height:1.15}
.btn{border:1px solid var(--line2);background:var(--card);border-radius:10px;padding:8px 14px;font-weight:600;display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.btn.primary{background:var(--ink);border-color:var(--ink);color:var(--paper);font-weight:600}
.btn.primary:hover,.btn.dark:hover{filter:brightness(.88)}
.btn.wish::before{content:"";width:16px;height:16px;flex:none;background:var(--gold);-webkit-mask:url("spark.svg") center/contain no-repeat;mask:url("spark.svg") center/contain no-repeat}
.btn.primary .zh{color:inherit;opacity:.8}
h1{text-wrap:balance;font-family:var(--f-display);font-weight:600}
h2{font-family:var(--f-display);font-weight:600;font-size:19px;margin:0 0 10px;padding-bottom:0;border-bottom:0;display:block}
.open{font-size:14px;font-weight:600;color:var(--link,#B33A0A);text-decoration:none;white-space:nowrap;cursor:pointer;background:none;border:0;padding:0}
.lbrand .mark{width:30px;height:30px;border-radius:8px;object-fit:contain;background:none}
.lbrand b{font-family:var(--f-display);font-weight:600;font-size:20px}
.edited{color:var(--link,#B33A0A)}
/* Next move (Make a Wish, 7 Nov 2026): kit look (shared/ui .al-next) in Luban's own names */
.nextmove{display:flex;flex-wrap:wrap;align-items:center;gap:14px 18px;background:#FFF8EC;border:1px solid #F6DDB3;border-radius:16px;padding:16px 20px;margin:4px 0 14px}
.nextmove .spark{width:26px;height:26px;flex:none;background:#E07A00;-webkit-mask:url("spark.svg") center/contain no-repeat;mask:url("spark.svg") center/contain no-repeat}
.nextmove .t{flex:1 1 300px;min-width:0}
.nextmove .l{font-size:13px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#7A4F00}
.nextmove b{display:block;font-family:var(--f-display);font-weight:600;font-size:19px;line-height:1.3}
.nextmove p{margin:2px 0 0;color:var(--ink2)}
.nextmove .btn{text-decoration:none}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]) .nextmove{background:#2E2618;border-color:#4A3B22}:root:not([data-theme="light"]) .nextmove .l{color:#F2B84B}}
:root[data-theme="dark"] .nextmove{background:#2E2618;border-color:#4A3B22}:root[data-theme="dark"] .nextmove .l{color:#F2B84B}

/* ───────────────────────────────────────────────────────────────────────────
   Luban · working layout (7 Nov 2026, Dustin: "more thoughtful, formal, like a mature website").
   One panel per job, quiet column headers, rows that read as records, a stepper for stages,
   and project details as a field grid. Overrides the older rules above.
   ─────────────────────────────────────────────────────────────────────────── */
:root{--hover:#F7F3EC;--tint:#FFFDF9;--shadow:0 1px 2px rgba(58,58,60,.05),0 1px 1px rgba(58,58,60,.03);--r-lg:16px}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){--hover:#2C2926;--tint:#24211F;--shadow:none}}
:root[data-theme="dark"]{--hover:#2C2926;--tint:#24211F;--shadow:none}
#app{max-width:1320px}
svg[viewBox="0 0 16 16"]{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;flex:none}
.muted{color:var(--ink3);font-size:inherit}
.sub2{font-size:13.5px;color:var(--ink2);margin-top:2px;line-height:1.4}
.num{font-variant-numeric:tabular-nums}

/* buttons: one height, one radius */
.btn{min-height:38px;padding:7px 14px;border-radius:10px;font-size:15px;gap:8px;transition:background .12s,border-color .12s}
.btn:hover{border-color:var(--line2);background:var(--hover)}
.btn.primary:hover,.btn.dark:hover{background:var(--ink);filter:brightness(.88)}
.btn.small{min-height:32px;padding:4px 12px;font-size:14px}
.linkbtn{border:0;background:none;padding:0;color:var(--link);font:inherit;font-weight:600;cursor:pointer}
a{color:var(--link)}

/* list page: header */
.lhead{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;margin:28px 0 20px}
.lhead .lt{display:flex;align-items:center;gap:14px}
.lhead .mark{width:40px;height:40px;object-fit:contain}
.lhead h1{font-size:30px;line-height:1.1;margin:0}
.lhead p{margin:2px 0 0;color:var(--ink2)}

/* views as tabs, source switch on the right */
.viewbar{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;border-bottom:1px solid var(--line);margin-bottom:16px;flex-wrap:wrap}
.vtabs{display:flex;gap:4px;overflow-x:auto;scrollbar-width:none;margin-bottom:-1px;min-width:0}
.vtabs button{display:inline-flex;align-items:center;gap:8px;white-space:nowrap;border:0;background:none;padding:10px 12px;border-bottom:2px solid transparent;color:var(--ink2);font-size:15px;font-weight:600}
.vtabs button:hover{color:var(--ink)}
.vtabs button[aria-pressed="true"]{color:var(--ink);border-bottom-color:var(--ink)}
.vtabs b{font-weight:600;font-size:12.5px;color:var(--ink2);background:var(--sunk);border-radius:999px;padding:0 8px;min-width:22px;text-align:center}
.vtabs button[aria-pressed="true"] b{background:var(--ink);color:var(--paper)}
.vtabs b.hot{background:var(--badbg);color:var(--bad)}
.seg{border-radius:10px;border-color:var(--line2);background:var(--card);padding:3px;gap:2px}
.seg button{border-radius:7px;padding:5px 12px;font-size:14px;font-weight:600;color:var(--ink2);background:none}
.seg button b{font-weight:600;color:var(--ink3);margin-left:4px}
.seg button[aria-pressed="true"]{background:var(--ink);color:var(--paper)}
.seg button[aria-pressed="true"] b{color:inherit;opacity:.75}
.srcseg{margin:0}

/* the panel: toolbar, stage filter, table */
.panel{background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow);overflow:hidden}
.ptool{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:14px 16px;border-bottom:1px solid var(--line)}
.ptool .search{position:relative;flex:1 1 280px;max-width:420px;min-width:0}
.ptool .search svg{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--ink3)}
.ptool select{flex:none;width:auto;max-width:220px}
.ptool input,.ptool select{min-height:38px;border:1px solid var(--line2);border-radius:10px;background:var(--card);padding:6px 12px;font-size:15px}
.ptool input{width:100%;padding-left:36px}
.ptool select{padding-right:30px}
.ptool .sp{flex:1}
.ptool .tot{color:var(--ink2);font-size:14px;white-space:nowrap}
.ptool .tot b{color:var(--ink)}
.pnote{margin:0;padding:10px 16px;background:var(--warnbg);color:var(--warn);font-size:14px}
.stagestrip{display:flex;gap:6px;flex-wrap:wrap;margin:0;padding:12px 16px;border-bottom:1px solid var(--line);background:var(--tint)}
.stg{flex:none;flex-direction:row;align-items:center;gap:8px;border:1px solid var(--line);border-top:1px solid var(--line);border-radius:999px;background:var(--card);padding:4px 12px 4px 10px;font-size:14px}
.stg i{width:8px;height:8px;border-radius:50%;background:var(--c,var(--ink3))}
.stg.all i{display:none}
.stg.exit i{background:transparent;border:1.5px solid var(--s-exit)}
.stg .n{font-size:14px;color:var(--ink);overflow:visible}
.stg b{font-size:13px;line-height:1;color:var(--ink2);font-weight:600}
.stg:hover{border-color:var(--line2)}
.stg[aria-pressed="true"]{background:var(--ink);border-color:var(--ink);box-shadow:none}
.stg[aria-pressed="true"] .n,.stg[aria-pressed="true"] b{color:var(--paper)}

/* table */
.panel .tablewrap{border:0;border-radius:0;background:none}
.ptable{min-width:1040px}
.ptable th,.ptable td{padding:14px 16px;border-bottom:1px solid var(--line);vertical-align:middle;font-size:15px;line-height:1.35}
.ptable th{background:none;padding-block:11px;font-size:13px;font-weight:600;color:var(--ink2)}
.ptable th .sortb{font-weight:600}
.ptable tbody tr:last-child td{border-bottom:0}
.ptable tr.row{transition:background .1s}
.ptable tr.row:hover td{background:var(--hover)}
.ptable tr.row:focus-visible{outline:2px solid var(--orange);outline-offset:-2px}
.ptable .pcode{color:var(--ink);font-weight:600;text-decoration:none;white-space:nowrap;letter-spacing:.01em}
.ptable .pcode:hover{text-decoration:underline;text-underline-offset:3px}
.ptable .cl{font-weight:600}
.ptable .nx{font-weight:600}
.ptable td.r b{font-weight:600}
.ptable b.due{color:var(--warn)}
.ptable .go{width:36px;padding-left:0;color:var(--ink3)}
.ptable .go svg{opacity:0;transition:opacity .12s,transform .12s}
.ptable tr.row:hover .go svg{opacity:1;transform:translateX(2px)}
.ptable .emptyrow{padding:40px 16px;text-align:center;color:var(--ink2)}
.who{display:inline-flex;align-items:center;gap:8px}
.av{width:26px;height:26px;font-size:12px;background:var(--sunk);color:var(--ink);border:1px solid var(--line2);font-weight:700}
.chip{font-size:13.5px;font-weight:600;padding:3px 10px 3px 8px;background:color-mix(in srgb,var(--c,var(--ink3)) 14%,var(--card));color:var(--ink)}
.chip i{width:7px;height:7px}
.chip .zh{display:none}
.flag{font-size:12.5px;font-weight:600;padding:2px 8px}
.boardwrap{padding:14px 16px}
.more{padding:12px 16px;border-top:1px solid var(--line);text-align:center}
.syncnote{display:block;margin:14px 2px 0;padding:0;background:none;border:0;font-size:13.5px;color:var(--ink2)}
.syncnote a{color:var(--link);font-weight:600;text-decoration:none}

/* project page */
.crumbs{display:flex;gap:8px;align-items:center;margin:24px 0 14px;font-size:14px;color:var(--ink2)}
.crumbs a{color:var(--ink2);text-decoration:none;font-weight:600}
.crumbs a:hover{color:var(--ink);text-decoration:underline;text-underline-offset:3px}
.crumbs span[aria-hidden]{color:var(--line2)}
.phead{display:flex;justify-content:space-between;align-items:flex-start;gap:20px;flex-wrap:wrap}
.phead .pt{min-width:0;flex:1 1 520px}
.eyebrow{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:14px;color:var(--ink2)}
.eyebrow .pcode{font-weight:600;color:var(--ink);letter-spacing:.02em}
.eyebrow .src a{color:var(--link);text-decoration:none;font-weight:600}
.phead h1{font-size:34px;line-height:1.12;margin:10px 0 0}
.facts{display:flex;flex-wrap:wrap;gap:8px 22px;margin-top:12px;font-size:15px;color:var(--ink2)}
.fact{display:inline-flex;align-items:center;gap:7px}
.fact svg{color:var(--ink3)}
.fact .av{width:22px;height:22px;font-size:11px}
.pactions{display:flex;gap:8px;flex-wrap:wrap;padding-top:4px}
.quick{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:20px 0 0;padding:10px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.quick .ql{font-size:13px;font-weight:600;color:var(--ink2);margin-right:6px}
.qa{display:inline-flex;align-items:center;gap:7px;border:0;background:none;border-radius:8px;padding:6px 10px;font-size:14px;font-weight:600;color:var(--ink)}
.qa img{width:20px;height:20px;object-fit:contain}
.qa:hover{background:var(--hover)}
.stepper{list-style:none;display:grid;grid-template-columns:repeat(6,minmax(0,1fr));margin:24px 0 18px;padding:0}
.stepper li{position:relative;display:flex;flex-direction:column;align-items:flex-start;gap:6px;padding-right:12px;min-width:0}
.stepper li::before{content:"";position:absolute;top:11px;left:24px;right:0;height:2px;background:var(--line)}
.stepper li:last-child::before{display:none}
.stepper li.done::before{background:var(--ink)}
.stepper .dot{position:relative;z-index:1;width:24px;height:24px;border-radius:50%;display:grid;place-items:center;background:var(--card);border:2px solid var(--line2);color:var(--paper)}
.stepper .dot svg{width:13px;height:13px;stroke-width:2.2}
.stepper .done .dot{background:var(--ink);border-color:var(--ink)}
.stepper .now .dot{border-color:var(--c);box-shadow:0 0 0 4px color-mix(in srgb,var(--c) 25%,transparent);background:var(--c)}
.stepper .n{font-size:14px;font-weight:600;color:var(--ink2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.stepper .done .n,.stepper .now .n{color:var(--ink)}
.stepper .d{font-size:13px;color:var(--ink3);min-height:1.2em}
.stepper .now .d{color:var(--ink2);font-weight:600}
.nextmove{margin:0 0 6px}
.tabs{margin:24px 0 20px;gap:4px}
.tabs a{padding:10px 12px;border-bottom-width:2px;font-weight:600;color:var(--ink2)}
.tabs a[aria-current="page"]{border-color:var(--ink);color:var(--ink);font-weight:600}
.tabs a .zh{display:none}

/* overview */
.ovw{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:20px;align-items:start}
.card{border-radius:var(--r-lg);box-shadow:var(--shadow)}
.ch{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:4px}
.ch h2{font-family:var(--f-body);font-size:17px;font-weight:700;margin:0}
.ch .open{font-size:14px}
.dcard{padding:20px 24px 8px}
.dsec{border-top:1px solid var(--line);padding:16px 0 12px;margin:0}
.dsec:first-of-type{border-top:0;padding-top:8px}
.dsec h3{font-size:13px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ink2);margin:0 0 12px}
.fgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:16px 24px;margin:0}
.fld{min-width:0}
.fld.wide{grid-column:1/-1}
.fld dt{font-size:13px;color:var(--ink2);margin-bottom:3px}
.fld dd{margin:0;font-size:15px;font-weight:600;overflow-wrap:anywhere}
.fld.unset dd{font-weight:400;color:var(--ink3)}
.oside{display:flex;flex-direction:column;gap:16px;min-width:0}
.sbox{padding:18px 20px}
.sbox .big{font-size:18px;font-weight:600;margin:6px 0 4px}
.sbox .meta{margin:4px 0 0;font-size:14px;color:var(--ink2);display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.sbox .fnote{margin:6px 0 0;white-space:pre-wrap;font-size:15px}
.sbox .empty{padding:6px 0 0;font-size:14px}
.fig{display:flex;flex-direction:column;margin:8px 0 6px}
.fig span{font-size:13px;color:var(--ink2)}
.fig b{font-family:var(--f-display);font-weight:600;font-size:28px;line-height:1.2}
.mrows{margin:6px 0 0;border-top:1px solid var(--line)}
.mrows div{display:flex;justify-content:space-between;gap:10px;padding:8px 0;border-bottom:1px solid var(--line);font-size:14px}
.mrows div:last-child{border-bottom:0}
.mrows dt{color:var(--ink2)}.mrows dd{margin:0;font-weight:600}
.two{gap:20px}
.pane{padding:20px 24px}
@media (max-width:900px){.ovw{grid-template-columns:1fr}.stepper{grid-template-columns:repeat(3,minmax(0,1fr));row-gap:16px}.stepper li:nth-child(3)::before{display:none}}
@media (max-width:560px){.phead h1{font-size:28px}.stepper{grid-template-columns:repeat(2,minmax(0,1fr))}.stepper li:nth-child(3)::before{display:block}.stepper li:nth-child(2n)::before{display:none}.ptool .tot{order:5;width:100%}}

/* ───────────────────────────────────────────────────────────────────────────
   Luban · three views (7 Nov 2026, after Dustin's Dribbble reference "Oripio"):
   Board by stage with project cards, List grouped by stage, Calendar of events.
   ─────────────────────────────────────────────────────────────────────────── */
:root{--colbg:#F4F0EA;--cardline:#E9E3DA}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){--colbg:#221F1D;--cardline:#3A3532}}
:root[data-theme="dark"]{--colbg:#221F1D;--cardline:#3A3532}
.lhead{margin:28px 0 18px}
.lhead p{max-width:60ch}

/* layout tabs + tools */
.layoutbar{display:flex;align-items:flex-end;justify-content:space-between;gap:12px 16px;flex-wrap:wrap;border-bottom:1px solid var(--line)}
.ltabs{display:flex;gap:2px;margin-bottom:-1px}
.ltabs button{display:inline-flex;align-items:center;gap:8px;border:0;background:none;padding:10px 14px;border-bottom:2px solid transparent;color:var(--ink2);font-size:15px;font-weight:600}
.ltabs button:hover{color:var(--ink)}
.ltabs button[aria-pressed="true"]{color:var(--ink);border-bottom-color:var(--ink)}
.ltools{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding-bottom:10px}
.ltools .search{position:relative;width:240px;max-width:100%}
.ltools .search svg{position:absolute;left:11px;top:50%;transform:translateY(-50%);color:var(--ink3)}
.ltools input,.ltools select{min-height:36px;border:1px solid var(--line2);border-radius:10px;background:var(--card);padding:5px 12px;font-size:14.5px;width:auto}
.ltools input{width:100%;padding-left:34px}
.ltools select{padding-right:28px;max-width:170px}

/* quick views */
.qviews{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:14px 0 18px}
.qviews button{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--line);background:var(--card);border-radius:999px;padding:5px 12px;font-size:14px;font-weight:600;color:var(--ink2)}
.qviews button:hover{border-color:var(--line2);color:var(--ink)}
.qviews button b{font-weight:600;font-size:12.5px;color:var(--ink3)}
.qviews button[aria-pressed="true"]{background:var(--ink);border-color:var(--ink);color:var(--paper)}
.qviews button[aria-pressed="true"] b{color:inherit;opacity:.7}
.qviews b.hot{color:var(--bad)!important;opacity:1!important}
.qviews .sp{flex:1}
.qviews .tot{font-size:14px;color:var(--ink2)}
.qviews .tot b{color:var(--ink)}

/* shared bits */
.lgdot{width:8px;height:8px;border-radius:50%;background:var(--c);flex:none}
.ct{font-size:12.5px;font-weight:700;min-width:22px;height:22px;padding:0 7px;border-radius:999px;display:inline-grid;place-items:center;background:color-mix(in srgb,var(--c,var(--ink3)) 18%,var(--card));color:var(--ink)}
.lgv{font-size:13.5px;color:var(--ink2);font-weight:600}

/* board */
.board2{display:grid;grid-template-columns:repeat(6,minmax(250px,1fr));gap:14px;overflow-x:auto;padding-bottom:10px;align-items:start}
.board2.exits{grid-template-columns:repeat(3,minmax(250px,1fr));margin-top:6px}
.bcol{background:var(--colbg);border-radius:16px;padding:10px;min-height:120px}
.bcol.over{outline:2px dashed var(--orange);outline-offset:-2px}
.bcol>header{display:flex;align-items:center;gap:8px;padding:4px 6px 10px}
.bcol>header b{font-size:15px}
.bcol>header .sp{flex:1}
.bcol.exit .lgdot{background:transparent;border:1.5px solid var(--s-exit)}
.bcards{display:flex;flex-direction:column;gap:10px}
.pcard{background:var(--card);border:1px solid var(--cardline);border-radius:12px;padding:14px 14px 12px;cursor:pointer;box-shadow:0 1px 2px rgba(58,58,60,.04);transition:box-shadow .15s,transform .15s,border-color .15s;display:flex;flex-direction:column;gap:8px;min-width:0}
.pcard:hover{box-shadow:0 6px 18px rgba(58,58,60,.10);border-color:var(--line2);transform:translateY(-1px)}
.pcard:focus-visible{outline:2px solid var(--orange);outline-offset:2px}
.pcard[draggable="true"]:active{cursor:grabbing}
.pcard header{display:flex;align-items:center;justify-content:space-between;gap:8px}
.pc-code{font-size:12.5px;font-weight:600;color:var(--ink2);letter-spacing:.02em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pcard h4{margin:0;font-size:16px;line-height:1.3;font-weight:700;overflow-wrap:anywhere}
.pc-desc{margin:-4px 0 0;font-size:13.5px;color:var(--ink2);line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:1.4em}
.pc-prog{display:flex;justify-content:space-between;align-items:center;font-size:13.5px;color:var(--ink2);margin-top:2px}
.pc-prog span{display:inline-flex;align-items:center;gap:6px}
.pc-prog svg{width:14px;height:14px}
.pc-prog b{font-weight:600;color:var(--ink)}
.pc-bar{height:4px;border-radius:99px;background:var(--line)}
.pc-bar i{display:block;height:100%;border-radius:inherit;background:var(--c)}
.pc-who{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:13.5px;color:var(--ink2);min-height:26px}
.pc-who>span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.avs{display:inline-flex;flex:none}
.avs .av{width:24px;height:24px;font-size:11px;margin-left:-6px;box-shadow:0 0 0 2px var(--card)}
.avs .av:first-child{margin-left:0}
.pcard footer{display:flex;align-items:center;gap:6px 12px;flex-wrap:wrap;padding-top:10px;border-top:1px solid var(--line);font-size:13px;color:var(--ink2)}
.pcard footer span{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.pcard footer svg{width:14px;height:14px;color:var(--ink3)}
.pc-dest{min-width:0;overflow:hidden;text-overflow:ellipsis}
.pc-due{margin-left:auto}
.addnew{display:flex;align-items:center;justify-content:center;gap:6px;border:1.5px dashed var(--line2);background:none;border-radius:12px;padding:10px;font-size:14px;font-weight:600;color:var(--ink2)}
.addnew:hover{border-color:var(--ink3);color:var(--ink);background:var(--card)}
.bempty{margin:0;padding:18px 8px;text-align:center;font-size:13.5px;color:var(--ink3);border:1.5px dashed var(--line);border-radius:12px}

/* list grouped by stage */
.lgroups{display:flex;flex-direction:column;gap:12px}
.lgroup{background:var(--card);border:1px solid var(--line);border-radius:14px;overflow:hidden;box-shadow:var(--shadow)}
.lghead{display:flex;align-items:center;gap:10px;width:100%;border:0;background:none;padding:13px 16px;text-align:left;font-size:15px}
.lghead:hover{background:var(--hover)}
.lghead svg{color:var(--ink2);transition:transform .15s}
.lgroup.shut .lghead svg{transform:rotate(-90deg)}
.lghead .sp{flex:1}
.lgroup .tablewrap{border-top:1px solid var(--line)}
.lgempty{margin:0;padding:14px 16px;border-top:1px solid var(--line);color:var(--ink3);font-size:14px}
.ptable{min-width:960px}
.ptable th .sortb{display:inline-flex;align-items:center;gap:6px}
.ptable th svg{width:14px;height:14px;color:var(--ink3)}
.ptable th{background:var(--tint)}

/* calendar */
.calwrap{background:var(--card);border:1px solid var(--line);border-radius:16px;overflow:hidden;box-shadow:var(--shadow)}
.calhead{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:14px 16px;border-bottom:1px solid var(--line)}
.calnav{display:flex;align-items:center;gap:8px}
.calnav h2{font-size:20px;margin:0 6px;min-width:150px}
.btn.icon{width:32px;padding:0;justify-content:center}
.cdow{display:grid;grid-template-columns:repeat(7,1fr);border-bottom:1px solid var(--line);background:var(--tint)}
.cdow span{padding:8px 10px;font-size:13px;font-weight:600;color:var(--ink2)}
.cweek{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));grid-template-rows:30px repeat(var(--lanes),30px) 10px;row-gap:4px;border-bottom:1px solid var(--line);min-height:110px}
.cweek:last-child{border-bottom:0}
.cday{border-right:1px solid var(--line);padding:6px 10px;font-size:13.5px;color:var(--ink2)}
.cday:nth-child(7){border-right:0}
.cday.out{background:var(--tint);color:var(--ink3)}
.cday.today span{display:inline-grid;place-items:center;min-width:24px;height:24px;border-radius:999px;background:var(--ink);color:var(--paper);font-weight:700;margin:-3px 0 0 -6px}
.cbar{position:relative;z-index:1;margin:0 4px;display:flex;align-items:center;gap:6px;min-width:0;padding:0 8px;border-radius:7px;background:color-mix(in srgb,var(--c) 18%,var(--card));border-left:3px solid var(--c);color:var(--ink);text-decoration:none;font-size:13px;white-space:nowrap;overflow:hidden}
.cbar b{font-weight:700;overflow:hidden;text-overflow:ellipsis}
.cbar span{color:var(--ink2);overflow:hidden;text-overflow:ellipsis}
.cbar:hover{background:color-mix(in srgb,var(--c) 30%,var(--card))}
.cbar.cont{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:0;border-left-style:dotted}
.cbar.more{border-top-right-radius:0;border-bottom-right-radius:0;margin-right:0}
@media (max-width:700px){.ltools{width:100%}.ltools .search{flex:1 1 100%;width:auto}.cbar span{display:none}.qviews .tot{width:100%}}
/* refinements */
#app{max-width:1560px}
.board2{grid-template-columns:repeat(6,minmax(232px,1fr))}
.bcol>header{display:grid;grid-template-columns:auto 1fr auto;grid-template-rows:auto auto;column-gap:8px;row-gap:2px;padding:4px 6px 12px}
.bcol>header b{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bcol>header .lgv{grid-column:2/4;font-size:13px;font-weight:600;color:var(--ink2);min-height:1.3em}
.pc-next{display:inline-flex;align-items:center;gap:6px;min-width:0;overflow:hidden;white-space:nowrap}
.pc-next svg{width:14px;height:14px;color:var(--ink3);flex:none}
.pc-next b{font-weight:600;color:var(--ink);overflow:hidden;text-overflow:ellipsis}
.ptable{table-layout:fixed;min-width:1000px}
.ptable th:nth-child(1){width:19%}.ptable th:nth-child(2){width:17%}.ptable th:nth-child(3){width:14%}.ptable th:nth-child(4){width:12%}.ptable th:nth-child(5){width:18%}.ptable th:nth-child(6){width:11%}.ptable th:nth-child(7){width:9%}.ptable th:nth-child(8){width:44px}
.ptable td{overflow:hidden;text-overflow:ellipsis}
.cweek{min-height:0;grid-template-rows:32px repeat(var(--lanes),28px) minmax(18px,1fr);min-height:112px}
.cbar{justify-content:flex-start;text-align:left}

/* ───────────────────────────────────────────────────────────────────────────
   Luban · project overview as property cards (7 Nov 2026, Dustin's references: Notion-style
   property rows with icons, coloured chips and people, a payment bar). Brand tints only.
   ─────────────────────────────────────────────────────────────────────────── */
:root{
  --t-gold:#FFF1D1;--k-gold:#7A4F00;--t-orange:#FFE6D6;--k-orange:#8A2E0A;--t-coral:#FFE3DF;--k-coral:#A1251A;--t-ruby:#FFE0EA;--k-ruby:#A3003A;
  --t-green:#E4F2E7;--k-green:#1E5B2E;--t-blue:#E3EEF9;--k-blue:#1F4E7A;--t-purple:#EEE6F8;--k-purple:#5A3A87;--t-grey:#EFEAE3;--k-grey:#4A4540;
}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){--t-gold:#3A2E16;--k-gold:#F2C46B;--t-orange:#3B2418;--k-orange:#FFAB7D;--t-coral:#3D211D;--k-coral:#FF9A8C;--t-ruby:#3D1A26;--k-ruby:#FF8FB2;--t-green:#1F3528;--k-green:#8FD6A6;--t-blue:#1C2C3D;--k-blue:#9CC7F0;--t-purple:#2C2338;--k-purple:#C8B1EE;--t-grey:#2F2B28;--k-grey:#D8D1C5}}
:root[data-theme="dark"]{--t-gold:#3A2E16;--k-gold:#F2C46B;--t-orange:#3B2418;--k-orange:#FFAB7D;--t-coral:#3D211D;--k-coral:#FF9A8C;--t-ruby:#3D1A26;--k-ruby:#FF8FB2;--t-green:#1F3528;--k-green:#8FD6A6;--t-blue:#1C2C3D;--k-blue:#9CC7F0;--t-purple:#2C2338;--k-purple:#C8B1EE;--t-grey:#2F2B28;--k-grey:#D8D1C5}
.omain{display:flex;flex-direction:column;gap:16px;min-width:0}
.props{padding:18px 22px 10px}
.props .ch{margin-bottom:8px}
.ch h2{display:flex;align-items:center;gap:10px}
.hic{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;flex:none}
.hic svg{width:16px;height:16px}
.hic.gold{background:var(--t-gold);color:var(--k-gold)}.hic.orange{background:var(--t-orange);color:var(--k-orange)}.hic.coral{background:var(--t-coral);color:var(--k-coral)}
.hic.green{background:var(--t-green);color:var(--k-green)}.hic.blue{background:var(--t-blue);color:var(--k-blue)}.hic.purple{background:var(--t-purple);color:var(--k-purple)}
.ch .btn svg{width:15px;height:15px}
.pcols{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 32px}
.pcols dl{margin:0}
.prow{display:grid;grid-template-columns:150px minmax(0,1fr);align-items:center;gap:12px;min-height:44px;padding:6px 0;border-bottom:1px dashed var(--line)}
.pcols dl .prow:last-child{border-bottom:0}
.prow dt{display:flex;align-items:center;gap:9px;color:var(--ink2);font-size:14.5px}
.prow dt svg{color:var(--ink3)}
.prow dd{margin:0;display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:15px;min-width:0;overflow-wrap:anywhere}
.prow dd b{font-weight:700}
.prow dd a{color:var(--k-blue);text-decoration:none;font-weight:600}
.prow dd a:hover{text-decoration:underline}
.pill{display:inline-flex;align-items:center;gap:6px;border-radius:8px;padding:3px 10px;font-size:14px;font-weight:600;background:var(--t-grey);color:var(--k-grey);white-space:nowrap}
.pill.gold{background:var(--t-gold);color:var(--k-gold)}.pill.orange{background:var(--t-orange);color:var(--k-orange)}.pill.coral{background:var(--t-coral);color:var(--k-coral)}.pill.ruby{background:var(--t-ruby);color:var(--k-ruby)}
.pill.green{background:var(--t-green);color:var(--k-green)}.pill.blue{background:var(--t-blue);color:var(--k-blue)}.pill.purple{background:var(--t-purple);color:var(--k-purple)}
.pill.dot::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor}
.pav{width:26px;height:26px;border-radius:50%;display:inline-grid;place-items:center;background:var(--av);color:#3A3A3C;font-size:11px;font-weight:700;letter-spacing:.02em;flex:none}
.pav.big{width:34px;height:34px;font-size:13px}
.pchip{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--line);border-radius:999px;padding:2px 12px 2px 2px;background:var(--card);white-space:nowrap}
.pchip.sm{padding-right:10px;font-size:14px}
.addv{display:inline-flex;align-items:center;gap:5px;border:1px dashed var(--line2);background:none;border-radius:8px;padding:3px 10px;font-size:13.5px;font-weight:600;color:var(--ink3)}
.addv svg{width:13px;height:13px}
.addv:hover{border-color:var(--ink3);color:var(--ink);background:var(--hover)}
.addv.warn{border-color:#F3C77E;color:var(--k-gold);background:var(--t-gold)}
.nil{color:var(--ink3);font-size:14px}
.brief{border:1px solid var(--line);border-radius:12px;padding:14px 16px;margin:4px 0 12px;white-space:pre-wrap;font-size:15px;line-height:1.6;background:var(--tint)}
.briefadd{display:flex;align-items:center;gap:8px;width:100%;border:1.5px dashed var(--line2);border-radius:12px;background:none;padding:16px;margin:4px 0 12px;color:var(--ink2);font-size:14.5px;font-weight:600;text-align:left}
.briefadd:hover{border-color:var(--ink3);color:var(--ink);background:var(--hover)}
.nextact{background:linear-gradient(180deg,var(--t-orange),var(--card) 70%)}
.nextact .meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.figs{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:8px 0 12px}
.figs .fig{margin:0;padding:10px 12px;border-radius:12px;background:var(--tint);border:1px solid var(--line)}
.figs .fig b{font-size:21px}
.figs .fig b.ok{color:var(--k-green)}
.mbar{display:flex;gap:3px;height:10px;border-radius:99px;overflow:hidden;background:var(--line)}
.mbar i{display:block;height:100%}
.mbar .green,.sw.green{background:#3FA35B}.mbar .gold,.sw.gold{background:#FFB51B}.mbar .coral,.sw.coral{background:#FE553E}
.mlegend{list-style:none;margin:10px 0 0;padding:0;display:flex;flex-direction:column;gap:6px;font-size:14px;color:var(--ink2)}
.mlegend li{display:flex;align-items:center;gap:8px}
.mlegend b{margin-left:auto;color:var(--ink);font-weight:600}
.sw{width:9px;height:9px;border-radius:50%}
.fuitem{display:flex;gap:10px;align-items:flex-start;margin-top:6px}
.fuitem .meta{margin:0}
@media (max-width:760px){.pcols{grid-template-columns:1fr}.pcols dl+dl .prow:first-child{border-top:1px dashed var(--line)}.prow{grid-template-columns:130px minmax(0,1fr)}}

/* ───────────────────────────────────────────────────────────────────────────
   Luban · project tabs, edit form and register dialog in the property-card style (7 Nov 2026)
   ─────────────────────────────────────────────────────────────────────────── */
.hic.grey{background:var(--t-grey);color:var(--k-grey)}.hic.gold{background:var(--t-gold);color:var(--k-gold)}
.hic.big{width:48px;height:48px;border-radius:14px}.hic.big svg{width:24px;height:24px}
.chi{object-fit:contain;flex:none}
.btn .chi{width:18px;height:18px}
.btn svg{width:15px;height:15px}
.btn.full{width:100%;justify-content:center}
.eact{display:flex;gap:8px;flex-wrap:wrap}
.muted{color:var(--ink3)}
.intro{margin:0 0 16px;color:var(--ink2);max-width:90ch}
.subhead{display:flex;align-items:center;gap:10px;font-size:19px;margin:26px 0 12px}
.ch h2 .zh,.subhead .zh{font-family:var(--f-zh);font-weight:400;font-size:13px;color:var(--ink3);margin-left:2px}
.emptybox{display:flex;flex-direction:column;align-items:center;text-align:center;gap:6px;padding:28px 16px 30px;border:1.5px dashed var(--line);border-radius:14px;margin:6px 0 12px}
.emptybox b{font-size:16px;margin-top:6px}.emptybox p{margin:0;color:var(--ink2);max-width:46ch;font-size:14.5px}

/* form controls everywhere */
.form{gap:14px 16px}
.form label{font-size:13.5px;font-weight:600;color:var(--ink2);gap:6px}
.form input,.form select,.form textarea{min-height:40px;padding:8px 12px;border-radius:10px;border:1px solid var(--line2);font-size:15px;font-weight:400;transition:border-color .12s,box-shadow .12s}
.form input:focus,.form select:focus,.form textarea:focus{outline:none;border-color:var(--orange);box-shadow:0 0 0 3px color-mix(in srgb,var(--orange) 22%,transparent)}
.form.one{grid-template-columns:1fr 1fr}
.fl{display:flex;flex-direction:column;gap:8px;grid-column:1/-1}
.fl .lbl{font-size:13.5px;font-weight:600;color:var(--ink2)}
.typeset{display:flex;flex-wrap:wrap;gap:6px}
.tchip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line2);background:var(--card);border-radius:999px;padding:5px 12px;font-size:14px;font-weight:600;color:var(--ink2)}
.tchip svg{width:14px;height:14px}
.tchip:hover{border-color:var(--ink3);color:var(--ink)}
.tchip[aria-checked="true"],.tchip[aria-pressed="true"]{border-color:transparent}
.tchip.blue[aria-checked="true"],.tchip.blue[aria-pressed="true"]{background:var(--t-blue);color:var(--k-blue);box-shadow:inset 0 0 0 1.5px var(--k-blue)}
.tchip.gold[aria-checked="true"]{background:var(--t-gold);color:var(--k-gold);box-shadow:inset 0 0 0 1.5px var(--k-gold)}
.tchip.green[aria-checked="true"]{background:var(--t-green);color:var(--k-green);box-shadow:inset 0 0 0 1.5px var(--k-green)}
.tchip.purple[aria-checked="true"]{background:var(--t-purple);color:var(--k-purple);box-shadow:inset 0 0 0 1.5px var(--k-purple)}
.tchip.orange[aria-checked="true"]{background:var(--t-orange);color:var(--k-orange);box-shadow:inset 0 0 0 1.5px var(--k-orange)}
.tchip.grey[aria-checked="true"]{background:var(--t-grey);color:var(--k-grey);box-shadow:inset 0 0 0 1.5px var(--k-grey)}

/* 1 · edit form */
.eform{display:flex;flex-direction:column;gap:16px}
.ebar{position:sticky;top:8px;z-index:6;display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;background:var(--ink);color:var(--paper);border-radius:14px;padding:12px 14px 12px 18px;box-shadow:0 8px 24px rgba(58,58,60,.18)}
.ebar b{display:block;font-size:16px}.ebar span{font-size:13.5px;opacity:.75}
.ebar .btn{background:transparent;color:var(--paper);border-color:rgba(255,255,255,.3)}
.ebar .btn.primary{background:var(--gold);border-color:var(--gold);color:#3A3A3C}
.egrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.esec2.full{grid-column:1/-1}
.esec2 .form{padding:4px 0 14px;grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}

/* 2 · register dialog */
.modal{width:min(820px,100%);border-radius:18px;padding:22px 26px}
.mhead{display:flex;gap:14px;align-items:center;margin-bottom:6px}
.mhead h2{margin:0}.mhead p{margin:2px 0 0;color:var(--ink2);font-size:14px}
.fsec{display:flex;align-items:center;gap:10px;font-size:15px;margin:14px 0 0;padding-top:14px;border-top:1px solid var(--line)}
.fsec .hic{width:26px;height:26px;border-radius:8px}.fsec .hic svg{width:14px;height:14px}
.codeprev{gap:12px;background:var(--t-orange);border-radius:12px;padding:12px 14px}
.codeprev>div{display:flex;flex-direction:column}
.codeprev>div span{font-size:12.5px;color:var(--k-orange);font-weight:600}
.codeprev b{font-size:18px;color:var(--ink)}

/* 3 · follow-ups and 7 · history: timeline */
.tl{list-style:none;margin:6px 0 10px;padding:0;position:relative}
.tl::before{content:"";position:absolute;left:17px;top:8px;bottom:8px;width:2px;background:var(--line)}
.tl>li{position:relative;display:grid;grid-template-columns:36px minmax(0,1fr);gap:14px;padding:10px 0}
.tlic{position:relative;z-index:1;width:36px;height:36px;border-radius:12px;display:grid;place-items:center;box-shadow:0 0 0 4px var(--card)}
.tlic.blue{background:var(--t-blue);color:var(--k-blue)}.tlic.gold{background:var(--t-gold);color:var(--k-gold)}.tlic.green{background:var(--t-green);color:var(--k-green)}.tlic.purple{background:var(--t-purple);color:var(--k-purple)}.tlic.orange{background:var(--t-orange);color:var(--k-orange)}.tlic.grey{background:var(--t-grey);color:var(--k-grey)}
.tlbody{min-width:0;padding-top:4px}
.tlhead{display:flex;align-items:center;gap:6px 12px;flex-wrap:wrap;font-size:14px;color:var(--ink2)}
.tlhead b{font-size:15px;color:var(--ink)}
.tlbody>p{margin:6px 0 0;white-space:pre-wrap;background:var(--tint);border:1px solid var(--line);border-radius:12px;padding:10px 14px;font-size:15px}
.diffs{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-direction:column;gap:6px}
.diffs li{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:14px}
.diffs .dk{font-weight:600;color:var(--ink2);min-width:120px}
.diffs s{background:var(--t-coral);color:var(--k-coral);border-radius:6px;padding:1px 8px}
.diffs b{background:var(--t-green);color:var(--k-green);border-radius:6px;padding:1px 8px;font-weight:600}
.logcard{background:linear-gradient(180deg,var(--t-orange),var(--card) 120px)}
.logcard .note{font-size:13px}

/* 4 · linked records */
.linkcards{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px}
.lcard{padding:18px 20px;display:flex;flex-direction:column;gap:10px;transition:box-shadow .15s,transform .15s}
.lcard:hover{box-shadow:0 6px 18px rgba(58,58,60,.10);transform:translateY(-1px)}
.lcard header{display:flex;align-items:center;gap:12px}
.lcic{width:44px;height:44px;border-radius:12px;background:var(--tint);border:1px solid var(--line);display:grid;place-items:center;flex:none}
.ch h2 .lcic{width:36px;height:36px;border-radius:10px}
.lcard h3{margin:0;font-size:16px}.lcard h3 .zh{font-size:12.5px;color:var(--ink3);margin-left:6px;font-weight:400}
.lcard small{font-size:13px;color:var(--ink2)}
.lcard p{margin:0;color:var(--ink2);font-size:14.5px;flex:1}
.lact{display:flex;flex-wrap:wrap;gap:6px}
.lact .btn{text-decoration:none;color:var(--ink)}
.lact .btn span{color:var(--ink3);font-size:12px}
.lact .btn.lead{background:var(--ink);border-color:var(--ink);color:var(--paper)}
.lact .btn.lead span{color:inherit;opacity:.7}

/* 5 · money */
.kpis2{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;margin-bottom:16px}
.kpi2{display:flex;gap:14px;align-items:flex-start;padding:16px 18px}
.kpi2 .l{font-size:13.5px;font-weight:600;color:var(--ink2)}
.kpi2 .v{font-family:var(--f-display);font-weight:600;font-size:24px;line-height:1.25}
.kpi2 .h{font-size:13px;color:var(--ink3)}
.props+.props,.kpis2+.props{margin-top:16px}
.cashflow .cfrow{display:grid;grid-template-columns:160px minmax(0,1fr) 120px;gap:14px;align-items:center;padding:8px 0;font-size:14.5px}
.cashflow .cfrow b{text-align:right}
.cashflow .mbar{height:12px}
.mlegend.row{flex-direction:row;flex-wrap:wrap;gap:6px 18px;margin:8px 0 12px}
.mtrack{height:10px;border-radius:99px;background:var(--line)}
.mfill{height:100%;border-radius:99px;background:var(--c)}
.mrow{padding:9px 0;border-bottom:1px dashed var(--line);font-size:14.5px}
.mrow:last-child{border-bottom:0}
.tbl{width:100%;border-collapse:collapse;font-size:14.5px;margin:4px 0 12px}
.tbl th{text-align:left;font-size:13px;font-weight:600;color:var(--ink2);padding:10px 12px;background:var(--tint);border-bottom:1px solid var(--line)}
.tbl td{padding:12px;border-bottom:1px solid var(--line);vertical-align:top}
.tbl tr:last-child td{border-bottom:0}
.tbl th:first-child{border-top-left-radius:10px}.tbl th:last-child{border-top-right-radius:10px}

/* 6 · programme & quotation */
.vgrid{gap:16px}.vgrid .props+.props{margin-top:0}
.vers{margin:4px 0 12px}
.ver{display:grid;grid-template-columns:44px minmax(0,1fr) auto;gap:12px;align-items:center;padding:12px 0;border-top:1px dashed var(--line)}
.ver.conf{margin:4px -12px;padding:12px;border:1.5px solid #9BD3AB;background:var(--t-green);border-radius:12px}
.vic{width:44px;height:44px;border-radius:12px;display:grid;place-items:center;background:var(--t-gold);color:var(--k-gold)}
.vic.m{background:var(--tint);border:1px solid var(--line)}.vic.z{background:var(--t-blue);color:var(--k-blue)}
.vic svg{width:20px;height:20px}
.vact{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.callout.draft{display:flex;align-items:center;gap:14px;border-color:#F6DDB3;background:#FFF8EC;border-radius:14px;padding:12px 16px}
.callout.draft>div{flex:1}
@media (max-width:900px){.egrid{grid-template-columns:1fr}.cashflow .cfrow{grid-template-columns:1fr;gap:6px}.cashflow .cfrow b{text-align:left}.ver{grid-template-columns:44px minmax(0,1fr)}.vact{grid-column:1/-1;justify-content:flex-start}.form.one{grid-template-columns:1fr}}
.form .wide,.form .btn.full{grid-column:1/-1}
.form label{min-width:0}
.form input,.form select,.form textarea{width:100%;min-width:0;box-sizing:border-box}
#regform{grid-template-columns:repeat(2,minmax(0,1fr))}
#regform .fsec{margin-top:6px}
.diffs .dv{font-size:13px;color:var(--ink3)}
.lcard h3 .zh{display:block;margin:2px 0 0}
.tbl th.num,.tbl td.num{text-align:right;font-variant-numeric:tabular-nums}
a.btn{color:var(--ink);text-decoration:none}a.btn.primary{color:var(--paper)}

