@import "https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,400;0,9..40,500;0,9..40,600;0,9..40,700;1,9..40,400&family=Instrument+Serif:ital@0;1&family=Noto+Sans+TC:wght@400;500;600;700&display=swap";.app-shell{min-height:100vh;display:flex}.sidebar{width:var(--sidebar-w);background:var(--bg-elevated);border-right:1px solid var(--border);z-index:10;flex-direction:column;padding:1.5rem 1rem;display:flex;position:fixed;top:0;bottom:0;left:0}.brand{border-bottom:1px solid var(--border);align-items:center;gap:.75rem;margin-bottom:1rem;padding:0 .5rem 1.5rem;display:flex}.brand-icon{font-size:1.75rem}.brand-title{font-family:Instrument Serif,Georgia,serif;font-size:1.25rem;font-weight:400}.brand-sub{color:var(--text-muted);font-size:.75rem}.nav{flex-direction:column;flex:1;gap:.25rem;display:flex}.nav-item{color:var(--text-muted);text-align:left;border-radius:8px;align-items:center;gap:.6rem;padding:.65rem .75rem;transition:all .15s;display:flex}.nav-item:hover{background:var(--bg-card);color:var(--text)}.nav-item.active{background:var(--accent-soft);color:var(--accent);font-weight:600}.nav-icon{text-align:center;width:1.25rem}.sidebar-footer{border-top:1px solid var(--border);flex-direction:column;gap:.5rem;padding-top:1rem;display:flex}.btn-ghost{color:var(--text-muted);text-align:left;border-radius:8px;padding:.5rem .75rem;font-size:.85rem}.btn-ghost:hover{background:var(--bg-card);color:var(--text)}.btn-ghost.danger:hover{color:#e86f4a}.main{margin-left:var(--sidebar-w);flex:1;max-width:960px;padding:2rem 2.5rem 3rem}.page-header{margin-bottom:2rem}.page-header.hero h1{font-family:Instrument Serif,Georgia,serif;font-size:2.75rem;font-weight:400;line-height:1.15}.page-header h1{font-family:Instrument Serif,Georgia,serif;font-size:2rem;font-weight:400}.eyebrow{text-transform:uppercase;letter-spacing:.12em;color:var(--accent);margin-bottom:.5rem;font-size:.7rem;font-weight:600}.subtitle{color:var(--text-muted);margin-top:.35rem}.muted{color:var(--text-muted)}.small{font-size:.85rem}.card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:1.25rem;padding:1.25rem 1.5rem}.card h2{margin-bottom:1rem;font-size:1rem;font-weight:600}.section-title{text-transform:capitalize}.stat-grid{grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:1rem;margin-bottom:1.5rem;display:grid}.stat-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);text-align:center;padding:1.25rem}.stat-value{color:var(--accent);font-family:Instrument Serif,Georgia,serif;font-size:2rem}.stat-label{color:var(--text-muted);margin-top:.25rem;font-size:.8rem}.traveler-row{flex-wrap:wrap;gap:1rem;display:flex}.traveler-chip{background:var(--bg);border-radius:10px;flex:1;align-items:center;gap:.75rem;min-width:160px;padding:.75rem 1rem;display:flex}.avatar{background:var(--accent-soft);width:2.5rem;height:2.5rem;color:var(--accent);border-radius:50%;justify-content:center;align-items:center;font-size:1.1rem;font-weight:700;display:flex}.traveler-chip strong{display:block}.traveler-chip .muted{text-transform:capitalize;font-size:.8rem}.flight-grid{gap:1.25rem;display:grid}.flight-card h2{margin-bottom:.25rem;font-family:Instrument Serif,Georgia,serif;font-size:1.75rem;font-weight:400}.flight-card-top{gap:.5rem;margin-bottom:.75rem;display:flex}.flight-route{grid-template-columns:1fr auto 1fr;align-items:center;gap:1rem;margin:1.5rem 0 1rem;display:grid}.leg .airport{letter-spacing:.05em;font-size:1.5rem;font-weight:700}.leg .time{margin-top:.25rem;font-size:.9rem}.route-line{text-align:center;color:var(--text-muted)}.route-line .duration{margin-top:.25rem;font-size:.75rem;display:block}.flight-notes{color:var(--text-muted);border-top:1px solid var(--border);margin-top:.5rem;padding-top:1rem;font-size:.9rem}.flight-row.compact{border-bottom:1px solid var(--border);align-items:center;gap:1rem;padding:.5rem 0;display:flex}.flight-row.compact:last-child{border-bottom:none}.badge{text-transform:uppercase;letter-spacing:.05em;background:var(--bg);color:var(--text-muted);border-radius:999px;padding:.2rem .6rem;font-size:.7rem;font-weight:600;display:inline-block}.badge.outbound{background:var(--accent-soft);color:var(--accent)}.badge.return{color:var(--teal);background:#3db8a926}.badge.status{margin-left:auto}.timeline{flex-direction:column;gap:0;display:flex}.day-card{gap:1.25rem;display:flex;position:relative}.day-marker{flex-shrink:0}.day-num{background:var(--accent-soft);width:2.25rem;height:2.25rem;color:var(--accent);border-radius:50%;justify-content:center;align-items:center;font-size:.9rem;font-weight:700;display:flex}.day-content{flex:1}.day-header{justify-content:space-between;align-items:baseline;margin-bottom:.5rem;display:flex}.day-header h2{margin-bottom:0;font-size:1.1rem}.theme-tag{color:var(--teal);margin-bottom:.75rem;font-size:.85rem;display:inline-block}.activity-list{list-style:none}.activity-item{border-top:1px solid var(--border);gap:.75rem;padding:.6rem 0;display:flex}.activity-body{flex:1;min-width:0}.activity-location{flex-wrap:wrap;align-items:center;gap:.35rem .5rem;margin-top:.35rem;font-size:.85rem;display:flex}.location-pin{line-height:1}.location-label{color:var(--text-muted)}.map-link{color:var(--teal);font-size:.8rem;font-weight:600;text-decoration:none}.map-link:hover{text-decoration:underline}.activity-notes{color:var(--text-muted);margin:.35rem 0 0;font-size:.82rem;line-height:1.45}.status-dot{border-radius:50%;flex-shrink:0;width:8px;height:8px;margin-top:.45rem}.status-dot.gray{background:var(--text-muted)}.status-dot.blue{background:var(--blue)}.status-dot.green{background:var(--green)}.status-dot.teal{background:var(--teal)}.status-dot.red{background:#d9534f}.tags{flex-wrap:wrap;gap:.35rem;margin-top:.35rem;display:flex}.tag{background:var(--bg);color:var(--text-muted);text-transform:capitalize;border-radius:999px;padding:.15rem .5rem;font-size:.7rem}.tag.person{background:var(--accent-soft);color:var(--accent)}.day-notes{color:var(--text-muted);margin-top:.75rem;font-size:.85rem;font-style:italic}.empty{font-style:italic}.place-grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:.75rem;display:grid}.place-card{background:var(--bg);border-radius:10px;padding:1rem}.place-top{justify-content:space-between;align-items:flex-start;gap:.5rem;margin-bottom:.5rem;display:flex}.status-select{width:auto;padding:.25rem .4rem;font-size:.75rem}.add-form{flex-direction:column;gap:.75rem;display:flex}.form-row{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.form-row input,.form-row select{flex:1;min-width:120px}.btn-primary{background:var(--accent);color:#fff;white-space:nowrap;border-radius:8px;padding:.6rem 1.25rem;font-weight:600;transition:opacity .15s}.btn-primary:hover{opacity:.9}.memory-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1rem;display:grid}.memory-card h2{font-family:Instrument Serif,Georgia,serif;font-size:1.25rem;font-weight:400}.memory-top{justify-content:space-between;margin-bottom:.5rem;display:flex}.mood-badge{font-size:1.25rem}.expense-table{border-collapse:collapse;width:100%;font-size:.9rem}.expense-table th{text-align:left;color:var(--text-muted);border-bottom:1px solid var(--border);padding:.5rem .75rem;font-weight:500}.expense-table td{border-bottom:1px solid var(--border);padding:.65rem .75rem}.progress-bar{background:var(--bg-card);border-radius:999px;height:6px;margin-bottom:1.5rem;overflow:hidden}.progress-fill{background:linear-gradient(90deg, var(--accent), var(--teal));border-radius:999px;height:100%;transition:width .3s}.checklist{list-style:none}.check-item{border-bottom:1px solid var(--border);padding:.85rem 0}.check-item:last-child{border-bottom:none}.check-item.done .check-title{color:var(--text-muted);text-decoration:line-through}.check-item label{cursor:pointer;align-items:center;gap:.75rem;display:flex}.check-item input[type=checkbox]{width:1.1rem;height:1.1rem;accent-color:var(--accent)}.check-meta{align-items:center;gap:.5rem;margin-top:.35rem;padding-left:1.85rem;display:flex}.loading-screen{min-height:100vh;color:var(--text-muted);flex-direction:column;justify-content:center;align-items:center;gap:1rem;display:flex}.spinner{border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:2rem;height:2rem;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.empty-state{text-align:center;color:var(--text-muted);padding:2rem}.note-card p{color:var(--text-muted);line-height:1.6}.section-heading{margin:1.5rem 0 .75rem;font-size:1rem;font-weight:600}.locked-heading{color:var(--teal)}.muted-heading{color:var(--text-muted)}.mustdo-card.locked{border-color:var(--teal);box-shadow:0 0 0 1px #3db8a933}.mustdo-top{justify-content:space-between;gap:1rem;margin-bottom:.5rem;display:flex}.mustdo-top h2{margin-bottom:.35rem;font-size:1.1rem}.mustdo-cost{color:var(--accent);white-space:nowrap;font-weight:600}.mustdo-notes{color:var(--text-muted);margin:.5rem 0 1rem;font-size:.9rem;line-height:1.5}.locked-tag{color:var(--teal)!important;background:#3db8a926!important}.vote-grid{border-top:1px solid var(--border);flex-direction:column;gap:.75rem;padding-top:1rem;display:flex}.vote-person{flex-wrap:wrap;align-items:center;gap:1rem;display:flex}.vote-name{min-width:4rem;font-size:.9rem;font-weight:600}.vote-buttons{flex-wrap:wrap;gap:.35rem;display:flex}.vote-btn{border:1px solid var(--border);color:var(--text-muted);border-radius:999px;padding:.35rem .75rem;font-size:.8rem;transition:all .15s}.vote-btn.yes.active{border-color:var(--teal);color:var(--teal);background:#3db8a933;font-weight:600}.vote-btn.maybe.active{border-color:var(--blue);color:var(--blue);background:#5b9fd426}.vote-btn.no.active{color:#d9534f;background:#d9534f26;border-color:#d9534f}.mustdo-sync{background:#5b9fd414;border-color:#5b9fd440;margin-bottom:1rem}.mustdo-sync-text{color:var(--text-muted);margin-bottom:.75rem;font-size:.9rem;line-height:1.55}.mustdo-sync-actions{flex-wrap:wrap;gap:.5rem;display:flex}.import-msg{color:var(--teal);margin-top:.65rem;font-size:.85rem}.sync-badge{border-radius:999px;margin-bottom:.65rem;padding:.25rem .65rem;font-size:.8rem;font-weight:600;display:inline-block}.sync-badge.sync-synced{color:var(--teal);background:#3db8a933}.sync-badge.sync-syncing{color:var(--blue);background:#5b9fd433}.sync-badge.sync-error{color:#d9534f;background:#d9534f26}.sync-badge.sync-offline{color:var(--text-muted);background:#ffffff0f}.mustdo-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;margin-bottom:1rem;display:flex}.voter-switch{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.voter-switch .sync-badge{margin-left:auto}.voter-switch-label{color:var(--text-muted);font-size:.85rem;font-weight:600}.voter-tab{border:1px solid var(--border);color:var(--text-muted);border-radius:999px;padding:.45rem 1rem;font-size:.9rem;transition:all .15s}.voter-tab.active{border-color:var(--accent);color:var(--accent);background:#e8a87c33;font-weight:700}.mustdo-progress{flex:1;min-width:160px;max-width:280px}.mustdo-progress-label{color:var(--text-muted);margin-bottom:.35rem;font-size:.8rem}.mustdo-progress-bar{background:var(--border);border-radius:999px;height:8px;overflow:hidden}.mustdo-progress-fill{background:linear-gradient(90deg, var(--teal), #5b9fd4);border-radius:999px;height:100%;transition:width .25s}.pending-heading{color:var(--accent)}.mustdo-card.needs-vote{border-color:#e8a87c73}.pending-tag{color:var(--accent)!important;background:#e8a87c26!important}.partner-vote-row{flex-wrap:wrap;align-items:center;gap:.5rem;margin:.75rem 0 .5rem;display:flex}.vote-pill{border:1px solid var(--border);color:var(--text-muted);border-radius:999px;padding:.2rem .65rem;font-size:.8rem}.vote-pill.yes{border-color:var(--teal);color:var(--teal)}.vote-pill.maybe{border-color:var(--blue);color:var(--blue)}.vote-pill.no{color:#d9534f;border-color:#d9534f}.vote-pill.none{opacity:.7}.my-vote-block{border-top:1px solid var(--border);margin-top:.5rem;padding-top:.85rem}.vote-block-label{color:var(--text-muted);margin-bottom:.5rem;font-size:.8rem;font-weight:600;display:block}.vote-buttons-lg .vote-btn{padding:.55rem 1.1rem;font-size:.9rem}.section-toggle{text-align:left;width:100%;color:var(--text-muted);cursor:pointer;background:0 0;border:none;margin:1.5rem 0 .75rem;font-size:1rem;font-weight:600;display:block}.currency-card .rate-row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;margin-bottom:1rem;display:flex}.rate-value{color:var(--accent);margin:0 .5rem;font-family:Instrument Serif,Georgia,serif;font-size:1.5rem}.rate-badge{background:var(--bg);color:var(--text-muted);border-radius:999px;padding:.15rem .5rem;font-size:.7rem}.rate-badge.live{color:var(--teal);background:#3db8a926}.rate-edit{flex-direction:column;gap:.35rem;max-width:200px;margin-bottom:.5rem;display:flex}.currency-converter{grid-template-columns:1fr auto 1fr;align-items:end;gap:1rem;display:grid}.currency-field label{color:var(--text-muted);margin-bottom:.35rem;font-size:.85rem;display:block}.currency-field input{padding:.75rem 1rem;font-size:1.5rem;font-weight:600}.swap-btn{background:var(--bg);border:1px solid var(--border);width:2.5rem;height:2.5rem;color:var(--text-muted);border-radius:50%;margin-bottom:.25rem;font-size:1.25rem}.swap-btn:hover{border-color:var(--accent);color:var(--accent)}.quick-grid{grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:.5rem;display:grid}.quick-btn{background:var(--bg);border:1px solid var(--border);text-align:left;border-radius:10px;flex-direction:column;align-items:flex-start;gap:.15rem;padding:.75rem 1rem;display:flex}.quick-btn:hover{border-color:var(--accent)}@media (width<=768px){.sidebar{flex-flow:wrap;width:100%;padding:1rem;position:relative}.nav{flex-flow:wrap;width:100%}.sidebar-footer{flex-direction:row;width:100%}.main{margin-left:0;padding:1.25rem}.currency-converter{grid-template-columns:1fr}.swap-btn{justify-self:center;margin:0}}*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--bg:#0f1419;--bg-elevated:#1a222d;--bg-card:#1e2836;--border:#2d3a4d;--text:#f0ebe3;--text-muted:#8b9cb3;--accent:#e86f4a;--accent-soft:#e86f4a26;--teal:#3db8a9;--green:#5cb85c;--blue:#5b9fd4;--radius:12px;--sidebar-w:240px;color:var(--text);background:var(--bg);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;font-family:Noto Sans TC,DM Sans,system-ui,sans-serif;line-height:1.5}body,#root{min-height:100vh}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer;background:0 0;border:none}input,select,textarea{background:var(--bg);border:1px solid var(--border);border-radius:8px;width:100%;padding:.6rem .8rem}textarea{resize:vertical}select{cursor:pointer}
