:root{
 --sand:#F2ECE1;--paper:#FBF8F2;--card:#FFFFFF;--ink:#28231C;--ink2:#5C544A;--muted:#948A7C;
 --line:#EAE1D2;--line2:#E0D6C4;--jade:#1E6B58;--terra:#C25E36;--amber:#B7841F;--red:#A8392B;
 --jade-s:#E4F0EA;--terra-s:#F7E7DD;--red-s:#F6E2DE;--amber-s:#F6ECD6;
 --sans:'Hanken Grotesk',ui-sans-serif,system-ui,sans-serif;--serif:'Fraunces',Georgia,serif;}
*{box-sizing:border-box}
body{margin:0;background:var(--sand);color:var(--ink);font-family:var(--sans);font-size:15px;line-height:1.5;
 background-image:radial-gradient(circle at 8% -8%,#fffaf0 0,transparent 34%),radial-gradient(circle at 96% -4%,#edf2ee 0,transparent 26%);background-attachment:fixed;-webkit-font-smoothing:antialiased}
.wrap{max-width:860px;margin:0 auto;padding:20px 16px 90px}
h1,h2,h3{font-family:var(--serif);font-weight:500;letter-spacing:-.01em;margin:0}
button{font-family:var(--sans);cursor:pointer;color:inherit}
.xs{font-size:12px}.sm{font-size:13px}.muted{color:var(--muted)}
.btn{border:1px solid var(--line2);background:var(--card);border-radius:10px;padding:8px 13px;font-size:13px;font-weight:600;transition:.15s}
.btn:hover{border-color:var(--jade);color:var(--jade)}
.btn.solid{background:var(--jade);color:#fff;border-color:var(--jade)}.btn.solid:hover{background:#185748}
/* header */
header{display:flex;justify-content:space-between;align-items:flex-end;gap:14px;flex-wrap:wrap;margin-bottom:18px}
.ey{font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--terra);font-weight:700}
header h1{font-size:27px;margin-top:3px}
.hsub{color:var(--muted);font-size:12.5px;margin-top:4px}
.hbtns{display:flex;gap:7px;align-items:center;flex-wrap:wrap}
#status{font-size:11px;color:var(--muted)}
/* villa nav */
.vnav{display:flex;gap:10px;overflow-x:auto;padding:4px 2px 12px;margin:0 -2px 6px;scrollbar-width:thin}
.vcard{flex:0 0 auto;min-width:138px;background:var(--card);border:1px solid var(--line);border-radius:15px;padding:13px 14px;text-align:left;transition:.16s;position:relative}
.vcard:hover{border-color:var(--line2);transform:translateY(-1px)}
.vcard.on{border-color:var(--jade);box-shadow:0 0 0 1px var(--jade),0 10px 24px -16px rgba(30,107,88,.5)}
.vcard .top{display:flex;align-items:center;gap:10px}
.vcard .nm{font-family:var(--serif);font-size:17px;line-height:1.1}
.vcard .ty{font-size:10px;color:var(--terra);font-weight:700;letter-spacing:.05em}
.vcard .left{margin-top:9px;font-size:12px;color:var(--ink2);font-weight:600}
.vcard .left b{color:var(--ink)}
.vcard.done .left b{color:var(--jade)}
/* villa panel */
.panel{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:20px 20px 8px;margin-top:6px;box-shadow:0 1px 0 rgba(120,90,40,.03)}
.phead{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex-wrap:wrap;padding-bottom:14px;border-bottom:1px solid var(--line)}
.phead .nm{font-size:23px}
.phead .ty{font-size:11px;color:var(--terra);font-weight:700;letter-spacing:.05em}
.phead .ph{color:var(--muted);font-size:13px;margin-top:1px}
.phead .pr{text-align:right;min-width:120px}
.bigpct{font-family:var(--serif);font-size:30px;font-weight:500;line-height:1}
.leftcount{font-size:12.5px;color:var(--ink2);font-weight:600;margin-top:3px}
.pbar{height:7px;border-radius:99px;background:var(--sand);overflow:hidden;margin-top:9px;width:150px;margin-left:auto}
.pbar>div{height:100%;border-radius:99px}
.allclear{text-align:center;padding:26px 10px;color:var(--jade)}
.allclear .big{font-family:var(--serif);font-size:20px}
/* category group */
.cat{margin-top:16px}
.cathead{display:flex;align-items:center;gap:9px;margin-bottom:4px}
.dot{width:9px;height:9px;border-radius:3px;flex:none}
.cathead .cn{font-size:12px;letter-spacing:.06em;text-transform:uppercase;font-weight:700;color:var(--ink2)}
.cathead .cc{font-size:11px;color:var(--muted);background:var(--paper);border:1px solid var(--line);border-radius:99px;padding:0 7px;font-weight:600}
/* item */
.item{display:flex;align-items:flex-start;gap:11px;padding:9px 2px;border-bottom:1px solid var(--line)}
.item:last-child{border-bottom:none}
.chk{flex:none;width:21px;height:21px;border-radius:7px;border:1.5px solid var(--line2);background:var(--paper);margin-top:1px;display:flex;align-items:center;justify-content:center;font-size:13px;color:transparent;transition:.12s}
.chk:hover{border-color:var(--jade);color:var(--jade)}
.item .lab{flex:1;font-size:14.5px;line-height:1.4}
.chip{flex:none;font-size:11px;font-weight:700;letter-spacing:.02em;border:none;border-radius:7px;padding:4px 9px;white-space:nowrap}
.c-todo{background:var(--paper);color:var(--muted);border:1px solid var(--line2)}
.c-doing{background:var(--terra-s);color:var(--terra)}
.c-blocked{background:var(--red-s);color:var(--red)}
.del{flex:none;background:none;border:none;color:var(--muted);font-size:15px;opacity:.35;padding:0 2px;margin-top:1px}
.del:hover{opacity:1;color:var(--red)}
/* add + done */
.addbar{display:flex;gap:7px;margin:16px 0 6px;flex-wrap:wrap}
.addbar select,.addbar input,.modal textarea,.modal input{font-family:var(--sans);font-size:13.5px;border:1px solid var(--line2);border-radius:9px;padding:8px 10px;background:var(--paper);color:var(--ink)}
.addbar input{flex:1;min-width:140px}
.donewrap{margin:10px 0 14px;border-top:1px dashed var(--line2);padding-top:10px}
.donetoggle{background:none;border:none;font-size:12.5px;color:var(--muted);font-weight:600;padding:4px 0}
.doneitem{display:flex;align-items:center;gap:10px;padding:6px 2px;font-size:13.5px;color:var(--muted)}
.doneitem .dchk{width:18px;height:18px;border-radius:6px;background:var(--jade-s);color:var(--jade);display:flex;align-items:center;justify-content:center;font-size:12px;flex:none}
.doneitem .dl{flex:1;text-decoration:line-through;text-decoration-color:var(--line2)}
/* collapsible blocks */
.block{background:var(--card);border:1px solid var(--line);border-radius:15px;margin-top:14px;overflow:hidden}
.bhead{display:flex;align-items:center;justify-content:space-between;padding:13px 16px;cursor:pointer}
.bhead h3{font-size:16px}
.bhead .cnt{font-size:11px;font-weight:700;color:var(--muted)}
.bbody{padding:0 16px 14px;display:none}
.block.open .bbody{display:block}
.chev{transition:.2s;color:var(--muted)}.block.open .chev{transform:rotate(180deg)}
.flag{border-left:3px solid var(--muted);padding:9px 0 9px 12px;margin-bottom:8px}
.flag.decision{border-color:var(--terra)}.flag.blocker{border-color:var(--red)}.flag.risk{border-color:var(--amber)}.flag.followup{border-color:var(--jade)}
.flag.forgotten{border-color:var(--amber)}.flag.discrepancy{border-color:var(--red);background:var(--red-s);border-radius:0 8px 8px 0;padding-right:10px}
.flag .ft{font-size:14px;font-weight:600}
.flag .ktag{font-size:9.5px;font-weight:700;letter-spacing:.09em;text-transform:uppercase}
.flag.decision .ktag{color:var(--terra)}.flag.blocker .ktag{color:var(--red)}.flag.risk .ktag{color:var(--amber)}.flag.followup .ktag{color:var(--jade)}
.flag.forgotten .ktag{color:var(--amber)}.flag.discrepancy .ktag{color:var(--red)}
/* AI activity log */
.aitag{font-size:10px;font-weight:700;color:var(--jade);background:var(--jade-s);border-radius:99px;padding:1px 8px;letter-spacing:.04em}
.chg{display:flex;gap:10px;align-items:flex-start;padding:8px 0;border-bottom:1px dashed var(--line)}
.chg:last-child{border-bottom:none}
.chg .ci{flex:1;font-size:13px}
.chg .cm{font-size:11.5px;color:var(--muted);margin-top:2px}
.chg .cv{font-weight:700}
.chg .arr{color:var(--muted);padding:0 4px}
.chg.reverted{opacity:.5}.chg.reverted .ci{text-decoration:line-through;text-decoration-color:var(--line2)}
.chg .undo{flex:none;font-size:11px;font-weight:600;border:1px solid var(--line2);background:var(--paper);border-radius:7px;padding:3px 9px;color:var(--ink2)}
.chg .undo:hover{border-color:var(--red);color:var(--red)}
.batchrow{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:6px 0 10px;border-bottom:1px solid var(--line);margin-bottom:6px}
.batchrow .bs{font-size:12px;color:var(--ink2);font-weight:600}
.kpill{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:1px 7px;border-radius:99px}
.kpill.status{background:var(--terra-s);color:var(--terra)}.kpill.create{background:var(--jade-s);color:var(--jade)}
.kpill.forgotten{background:var(--amber-s);color:var(--amber)}.kpill.discrepancy{background:var(--red-s);color:var(--red)}.kpill.translation{background:var(--paper);color:var(--muted);border:1px solid var(--line2)}
.flag .fd{font-size:12.5px;color:var(--muted);margin-top:2px}
.todo{display:flex;gap:9px;align-items:flex-start;padding:6px 0}
.todo input{margin-top:3px;width:16px;height:16px;accent-color:var(--jade);flex:none}
.todo.done span{text-decoration:line-through;color:var(--muted)}
.todo .vt{font-size:11px;color:var(--terra);font-weight:700}
.logr{display:flex;gap:10px;padding:6px 0;font-size:13px;border-bottom:1px dashed var(--line);}
.logr:last-child{border:none}.logr .d{color:var(--muted);font-size:11px;min-width:40px}.logr .lv{font-weight:700;font-size:11px;color:var(--terra)}
/* modal/toast */
.scrim{position:fixed;inset:0;background:rgba(40,30,18,.45);display:none;align-items:center;justify-content:center;padding:16px;z-index:50}
.scrim.on{display:flex}
.modal{background:var(--paper);border:1px solid var(--line);border-radius:16px;max-width:560px;width:100%;max-height:86vh;overflow:auto;padding:20px}
.modal h3{font-size:20px;margin-bottom:6px}.modal textarea{width:100%;min-height:150px;font-family:ui-monospace,monospace;font-size:12px}
.note{background:var(--amber-s);border:1px solid #ecd9ad;border-radius:10px;padding:9px 11px;font-size:12px;color:#7a5a12;margin:9px 0}
.toast{position:fixed;bottom:18px;left:50%;transform:translateX(-50%) translateY(20px);background:var(--ink);color:#fff;padding:10px 18px;border-radius:99px;font-size:13px;opacity:0;transition:.3s;z-index:60}
.toast.on{opacity:1;transform:translateX(-50%) translateY(0)}
.fade{animation:fi .45s both}@keyframes fi{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
/* login */
.login{max-width:340px;margin:14vh auto 0;background:var(--card);border:1px solid var(--line);border-radius:18px;padding:26px 24px;text-align:center}
.login .ey{display:block;margin-bottom:6px}
.login h1{font-size:24px;margin-bottom:16px}
.login input{width:100%;font-family:var(--sans);font-size:15px;border:1px solid var(--line2);border-radius:10px;padding:11px 13px;background:var(--paper);color:var(--ink);margin-bottom:10px}
.login .err{color:var(--red);font-size:12.5px;min-height:16px;margin-bottom:8px}
