:root{--bg:#f4f1ea;--panel:#fbfaf6;--ink:#24211d;--muted:#6f685e;--line:#e3ddd1;--chip:#efeae0;--accent:#8a2a22;--accent-ink:#fff}
@media (prefers-color-scheme: dark){:root{--bg:#171614;--panel:#1f1d1a;--ink:#ece7de;--muted:#a59d90;--line:#34302a;--chip:#2a2723;--accent:#d0574b}}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.5 ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif}
main{max-width:40rem;margin:0 auto;padding:40px 16px}
h1{font-size:22px;margin:0 0 4px}
.muted{color:var(--muted)}
.card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:20px;margin-top:20px}
label{display:block;font-size:13px;color:var(--muted);margin:0 0 6px}
input{width:100%;font:inherit;font-size:16px;padding:11px 12px;border:1px solid var(--line);border-radius:10px;background:var(--chip);color:var(--ink)}
button{font:inherit;cursor:pointer}
.primary{margin-top:14px;background:var(--accent);color:var(--accent-ink);border:0;border-radius:10px;padding:11px 18px;font-weight:600;min-height:44px}
.primary:disabled{opacity:.6}
.link{background:none;border:0;color:var(--accent);padding:8px 0;min-height:36px}
.note{min-height:1.5em;margin:10px 0 0;color:var(--muted)}
.brand{display:flex;gap:10px;align-items:center;margin-bottom:20px}
.brand svg{width:34px;height:34px}
.projects{list-style:none;padding:0;margin:0}
.projects a{display:flex;justify-content:space-between;gap:12px;padding:14px 0;border-top:1px solid var(--line);color:inherit;text-decoration:none}
.projects li:first-child a{border-top:0}
.projects a:hover b{color:var(--accent)}
.top{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}
/* the portal (index.html + app.js) */
main.wide{max-width:72rem}
nav.tabs{display:flex;gap:4px;flex-wrap:wrap;margin:16px 0 0;border-bottom:1px solid var(--line)}
nav.tabs a{padding:10px 14px;color:var(--muted);text-decoration:none;border-bottom:2px solid transparent;margin-bottom:-1px;font-weight:600}
nav.tabs a.on{color:var(--ink);border-color:var(--accent)}
.bar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin:16px 0}
.bar input,.bar select{width:auto;flex:1 1 14rem;font-size:15px;padding:9px 11px}
.chip{border:1px solid var(--line);background:var(--chip);border-radius:999px;padding:6px 12px;min-height:34px;font-size:13px;color:var(--ink)}
.chip.on{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.btn{border:1px solid var(--line);background:var(--chip);color:var(--ink);border-radius:10px;padding:9px 14px;min-height:40px;font-weight:600}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);margin:0}
table.list{width:100%;border-collapse:collapse}
table.list th,table.list td{text-align:left;padding:11px 8px;border-top:1px solid var(--line);vertical-align:top}
table.list th{font-size:12px;color:var(--muted);font-weight:600;border-top:0}
table.list tr.row{cursor:pointer}
table.list tr.row:hover td{background:color-mix(in srgb,var(--chip) 60%,transparent)}
.status{display:inline-block;border-radius:999px;padding:2px 10px;font-size:12px;font-weight:600;background:var(--chip);white-space:nowrap}
.status.booked,.status.lead{background:#e7eef6;color:#244a73}.status.visited,.status.modelling{background:#fdf1dc;color:#7a4b00}
.status.design,.status.review{background:#efe6f7;color:#5b2c83}.status.delivered{background:#e3f1e5;color:#24603a}.status.closed{opacity:.6}
@media (prefers-color-scheme: dark){.status.booked,.status.lead{background:#1f2b38;color:#a9c7ea}.status.visited,.status.modelling{background:#3a2d17;color:#f0c27a}.status.design,.status.review{background:#2e2238;color:#d1b3ec}.status.delivered{background:#1d3324;color:#9fd8ad}}
.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(18rem,1fr));gap:16px}
.card h2{font-size:16px;margin:0 0 12px}
.kv{display:grid;grid-template-columns:8rem 1fr;gap:6px 12px;font-size:14px}.kv span{color:var(--muted)}
.form{display:grid;gap:12px}.form .two{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.checks{display:flex;gap:14px;flex-wrap:wrap}.checks label{display:flex;gap:6px;align-items:center;color:var(--ink);font-size:14px;margin:0}
.checks input{width:auto}
.timeline{list-style:none;margin:0;padding:0;font-size:14px}.timeline li{padding:8px 0;border-top:1px solid var(--line)}.timeline li:first-child{border-top:0}
.timeline small{color:var(--muted);display:block}
.thumbs{display:grid;grid-template-columns:repeat(auto-fill,minmax(88px,1fr));gap:6px;margin-top:8px}
.thumbs img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:6px;background:var(--chip)}
.banner{background:#fdf1dc;color:#7a4b00;border-radius:12px;padding:12px 14px;margin:16px 0;display:flex;gap:10px;align-items:center;flex-wrap:wrap}
@media (prefers-color-scheme: dark){.banner{background:#3a2d17;color:#f0c27a}}
dialog{border:1px solid var(--line);border-radius:14px;background:var(--panel);color:var(--ink);padding:20px;width:min(36rem,calc(100% - 32px))}
dialog::backdrop{background:rgba(0,0,0,.45)}
.err{color:#b3261e;min-height:1.4em;margin:0}
@media (max-width:640px){.form .two{grid-template-columns:1fr}table.list .hide-sm{display:none}}
