:root{--bg:#faf7f5;--card:#fff;--ink:#2c2320;--muted:#8a7f79;--accent:#b08968;--accent-soft:#efe4da;--line:#ece5df;--good:#6b9e78;--warn:#c98a5a;--danger:#c0605a;--shadow:0 1px 3px rgba(0,0,0,.06),0 6px 24px rgba(0,0,0,.05)}*{box-sizing:border-box}body,html{margin:0;padding:0}body{background:var(--bg);color:var(--ink);font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased}a{color:var(--accent)}button{font-family:inherit;cursor:pointer}input,select,textarea{font-family:inherit;font-size:14px;color:var(--ink);border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:#fff;outline:none}input:focus,select:focus,textarea:focus{border-color:var(--accent)}.wrap{max-width:1000px;margin:0 auto;padding:24px 20px 80px}.header{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:8px;flex-wrap:wrap}.title{font-size:26px;font-weight:700;letter-spacing:-.02em;margin:0}.subtitle{color:var(--muted);margin:2px 0 0;font-size:14px}.countdown{text-align:right}.countdown .n{font-size:30px;font-weight:700;color:var(--accent);line-height:1}.countdown .l{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.tabs{display:flex;gap:6px;margin:20px 0 18px;flex-wrap:wrap;border-bottom:1px solid var(--line)}.tab{background:none;padding:10px 14px;font-size:14px;color:var(--muted);border:none;border-bottom:2px solid transparent;margin-bottom:-1px}.tab.active{color:var(--ink);border-bottom-color:var(--accent);font-weight:600}.card{background:var(--card);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);padding:18px;margin-bottom:16px}.card h2{margin:0 0 12px;font-size:16px}.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.spread{justify-content:space-between}.grow{flex:1 1;min-width:120px}.muted{color:var(--muted);font-size:13px}.pill{font-size:12px;padding:3px 9px;border-radius:999px;background:var(--accent-soft);color:var(--accent)}.btn{border:1px solid var(--line);background:#fff;border-radius:8px;padding:8px 12px;font-size:14px;color:var(--ink)}.btn.primary,.btn:hover{border-color:var(--accent)}.btn.primary{background:var(--accent);color:#fff}.btn.primary:hover{filter:brightness(1.05)}.btn.ghost{border-color:transparent;color:var(--muted)}.btn.sm{padding:4px 8px;font-size:12px}.btn.danger{color:var(--danger)}table{width:100%;border-collapse:collapse;font-size:14px}th{text-align:left;color:var(--muted);font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.05em}td,th{padding:8px;border-bottom:1px solid var(--line)}td{vertical-align:middle}tr:last-child td{border-bottom:none}td input,td select{width:100%}.check{display:flex;align-items:center;gap:10px;padding:9px 4px;border-bottom:1px solid var(--line)}.check:last-child{border-bottom:none}.check input[type=checkbox]{width:18px;height:18px;accent-color:var(--accent)}.check .txt{flex:1 1}.check.done .txt{text-decoration:line-through;color:var(--muted)}.cat{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin:16px 0 4px}.stat{display:flex;gap:22px;flex-wrap:wrap}.stat .b{font-size:22px;font-weight:700}.progress{height:8px;background:var(--accent-soft);border-radius:999px;overflow:hidden;margin-top:6px}.progress>span{display:block;height:100%;background:var(--accent)}.login-wrap{min-height:100vh;display:grid;place-items:center;padding:24px}.login-card{background:var(--card);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);padding:32px;width:100%;max-width:360px;text-align:center}.login-card h1{font-size:22px;margin:0 0 4px}.login-card p{color:var(--muted);font-size:14px;margin:0 0 20px}.login-card input{width:100%;text-align:center;letter-spacing:.1em;margin-bottom:12px}.err{color:var(--danger);font-size:13px;min-height:18px;margin-top:8px}.assignee{width:92px;padding:5px 8px;font-size:13px}.pkg-title{font-size:16px;font-weight:700;border:none;padding:4px 2px;background:transparent;width:60%}.pkg-title:focus{border-bottom:1px solid var(--accent)}.task{border-bottom:1px solid var(--line);padding:7px 0}.task:last-child{border-bottom:none}.task-main{display:flex;align-items:center;gap:8px}.task-main input[type=checkbox]{width:17px;height:17px;accent-color:var(--accent);flex:none}.task-text{flex:1 1;border:none;background:transparent;padding:4px 2px;font-size:14px}.task-text:focus{border-bottom:1px solid var(--line)}.task.done .task-text{text-decoration:line-through;color:var(--muted)}.btn.has{border-color:var(--accent);color:var(--accent)}.comments{margin:8px 0 4px 26px;padding:10px 12px;background:#fbf8f6;border:1px solid var(--line);border-radius:10px}.comment{padding:6px 0;border-bottom:1px dashed var(--line);font-size:14px}.comment:last-of-type{border-bottom:none}.tiny{font-size:11px}.modal{position:fixed;inset:0;background:rgba(44,35,32,.4);display:grid;place-items:center;z-index:50;padding:20px}.modal-card{background:#fff;border-radius:16px;padding:26px;max-width:420px;text-align:center;box-shadow:var(--shadow)}.modal-card h2{margin:0 0 6px}.chat-log{max-height:55vh;overflow-y:auto;flex-direction:column;gap:8px;padding:6px 2px}.chat-log,.msg{display:flex}.msg.mine{justify-content:flex-end}.bubble{max-width:78%;background:#f3ede8;border:1px solid var(--line);border-radius:12px;padding:8px 12px;font-size:14px}.msg.mine .bubble{background:var(--accent-soft);border-color:var(--accent-soft)}@media (max-width:640px){.wrap{padding:16px 14px 72px}.title{font-size:22px}.countdown .n{font-size:24px}input,select,textarea{font-size:16px}.assignee{width:100%}.rtable,.rtable tbody,.rtable td,.rtable tr{display:block;width:100%}.rtable thead{display:none}.rtable tr{border:1px solid var(--line);border-radius:12px;padding:8px 12px;margin-bottom:12px}.rtable td{border-bottom:none;padding:6px 0;display:flex;align-items:center;gap:10px}.rtable td:before{color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.05em;flex:0 0 96px}.rtable td input,.rtable td select{width:100%}.rtable td[colspan]{justify-content:center;padding:16px 0}.rtable td[colspan]:before{content:"";display:none}.rtable.budget td:first-child:before{content:"Item"}.rtable.budget td:nth-child(2):before{content:"Category"}.rtable.budget td:nth-child(3):before{content:"Estimated"}.rtable.budget td:nth-child(4):before{content:"Actual"}.rtable.budget td:nth-child(5):before{content:"Paid"}.rtable.budget td:nth-child(6):before{content:"";display:none}.rtable.guests td:first-child:before{content:"Name"}.rtable.guests td:nth-child(2):before{content:"Side"}.rtable.guests td:nth-child(3):before{content:"Heads"}.rtable.guests td:nth-child(4):before{content:"RSVP"}.rtable.guests td:nth-child(5):before{content:"";display:none}.rtable.vendors td:first-child:before{content:"Vendor"}.rtable.vendors td:nth-child(2):before{content:"Category"}.rtable.vendors td:nth-child(3):before{content:"Contact"}.rtable.vendors td:nth-child(4):before{content:"Cost"}.rtable.vendors td:nth-child(5):before{content:"Status"}.rtable.vendors td:nth-child(6):before{content:"";display:none}}