:root{--bg:#f5f5f8;--surface:#fff;--surface-2:#fafafb;--text:#1b1a1f;--text-soft:#6b6875;--border:#e8e7ec;--accent:#7c3aed;--accent-2:#a855f7;--accent-soft:#f2ebfe;--accent-grad:linear-gradient(135deg, #7c3aed 0%, #a855f7 100%);--danger:#dc2626;--cat-food:#f97316;--cat-shopping:#ec4899;--cat-activity:#0ea5e9;--cat-bar:#8b5cf6;--cat-hotel:#14b8a6;--cat-transport:#64748b;--radius:14px;--shadow-sm:0 1px 2px #14121e0f, 0 1px 3px #14121e0d;--shadow-md:0 4px 12px #14121e14, 0 2px 4px #14121e0d;--shadow-lg:0 12px 32px #14121e29;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;font:16px/1.5 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}body{overscroll-behavior-y:none;margin:0}#root{background:var(--bg);flex-direction:column;max-width:480px;min-height:100svh;margin:0 auto;display:flex}button{font:inherit;cursor:pointer;transition:transform .12s,background .15s,opacity .15s,border-color .15s,color .15s}button:not(:disabled):active{transform:scale(.96)}input,select,textarea{font:inherit;transition:border-color .15s,box-shadow .15s}@keyframes fadeUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes sheetUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes popIn{0%{opacity:0;transform:scale(.94)}to{opacity:1;transform:scale(1)}}.anim-fade-up{animation:.28s both fadeUp}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.001ms!important;animation-duration:.001ms!important}}.login{flex:1;justify-content:center;align-items:center;padding:24px;display:flex}.login-card{background:var(--surface);border:1px solid var(--border);text-align:center;width:100%;box-shadow:var(--shadow-lg);border-radius:20px;padding:32px 24px;animation:.35s cubic-bezier(.2,.9,.3,1) both popIn}.login-logo{background:var(--accent-grad);border-radius:20px;place-items:center;width:72px;height:72px;margin:0 auto 4px;font-size:34px;display:grid;box-shadow:0 8px 20px #7c3aed59}.login-card h1{margin:8px 0 4px;font-size:24px}.login-sub{color:var(--text-soft);margin:0 0 24px;font-size:14px}.login-card form{flex-direction:column;gap:12px;display:flex}.login-card input{border:1px solid var(--border);background:var(--bg);border-radius:10px;width:100%;padding:12px 14px}.login-card input:focus{outline:2px solid var(--accent);border-color:var(--accent)}.btn-primary,.btn-google{border:1px solid #0000;border-radius:10px;width:100%;padding:12px 14px;font-weight:600}.btn-google{color:var(--text);border-color:var(--border);background:#fff;justify-content:center;align-items:center;gap:8px;display:inline-flex}.g-mark{color:#4285f4;font-weight:700}.divider{color:var(--text-soft);align-items:center;gap:10px;margin:16px 0;font-size:13px;display:flex}.divider:before,.divider:after{content:"";background:var(--border);flex:1;height:1px}.login-error{color:var(--danger);margin:16px 0 0;font-size:14px}.modal-backdrop{z-index:100;background:#0f0c1973;justify-content:center;align-items:flex-end;animation:.2s both fadeIn;display:flex;position:fixed;inset:0}.modal{background:var(--surface);width:100%;max-width:480px;padding:20px 16px calc(20px + env(safe-area-inset-bottom));max-height:90svh;box-shadow:var(--shadow-lg);border-radius:20px 20px 0 0;animation:.3s cubic-bezier(.2,.9,.3,1) both sheetUp;overflow-y:auto}.modal:before{content:"";background:var(--border);border-radius:2px;width:40px;height:4px;margin:-6px auto 14px;display:block}.modal h2{margin:0 0 16px;font-size:18px}.modal form{flex-direction:column;gap:14px;display:flex}.modal label{color:var(--text-soft);flex-direction:column;gap:6px;font-size:13px;font-weight:600;display:flex}.modal input,.modal select,.modal textarea{border:1px solid var(--border);background:var(--bg);width:100%;color:var(--text);border-radius:10px;padding:10px 12px;font-weight:400}.modal input:focus,.modal select:focus,.modal textarea:focus{outline:2px solid var(--accent);border-color:var(--accent)}.modal .row{gap:12px;display:flex}.modal .row label{flex:1}.form-error{color:var(--danger);margin:0;font-size:14px}.fx-btn{border:1px solid var(--accent);background:var(--accent-soft);color:var(--accent);border-radius:8px;align-self:flex-start;padding:8px 12px;font-size:13px;font-weight:600}.fx-btn:disabled{opacity:.6}.fx-note{color:var(--text-soft);margin:-6px 0 0;font-size:13px}.modal-actions{gap:12px;margin-top:4px;display:flex}.modal-actions button{border:1px solid #0000;border-radius:10px;flex:1;padding:12px;font-weight:600}.btn-ghost{background:var(--bg);border-color:var(--border);color:var(--text)}.btn-primary{background:var(--accent-grad);color:#fff;box-shadow:0 2px 8px #7c3aed4d}.btn-primary:disabled{opacity:.6}.aisuggest{background:var(--bg);z-index:200;flex-direction:column;max-width:480px;margin:0 auto;animation:.3s cubic-bezier(.2,.9,.3,1) both sheetUp;display:flex;position:fixed;inset:0}.ai-bar{background:var(--surface);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:14px 16px;display:flex}.ai-body{flex-direction:column;gap:14px;padding:16px;display:flex;overflow-y:auto}.ai-body label{color:var(--text-soft);flex-direction:column;gap:6px;font-size:13px;font-weight:600;display:flex}.ai-body input,.ai-body textarea{border:1px solid var(--border);background:var(--surface);width:100%;color:var(--text);border-radius:10px;padding:11px 12px;font-family:inherit;font-weight:400}.ai-body input:focus,.ai-body textarea:focus{outline:2px solid var(--accent);border-color:var(--accent)}.ai-primary{background:var(--accent-grad);color:#fff;border:none;border-radius:11px;padding:12px;font-weight:700;box-shadow:0 2px 8px #7c3aed4d}.ai-primary:disabled{opacity:.6}.ai-divider{color:var(--text-soft);align-items:center;gap:10px;font-size:12px;display:flex}.ai-divider:before,.ai-divider:after{content:"";background:var(--border);flex:1;height:1px}.ai-upload{border:1px dashed var(--accent);background:var(--accent-soft);color:var(--accent);border-radius:10px;padding:12px;font-size:13px}.ai-upload input{color:var(--text);margin-top:8px;font-size:13px}.ai-result{color:var(--text);background:var(--accent-soft);border-radius:8px;margin:0;padding:10px 12px;font-size:14px}.library{flex-direction:column;gap:12px;display:flex}.library-toolbar{gap:8px;display:flex}.search{border:1px solid var(--border);background:var(--surface);border-radius:10px;flex:1;padding:10px 12px}.search:focus{outline:2px solid var(--accent);border-color:var(--accent)}.add-btn{background:var(--accent-grad);color:#fff;white-space:nowrap;border:none;border-radius:11px;padding:10px 14px;font-weight:700;box-shadow:0 2px 8px #7c3aed4d}.ai-chip{border:1px solid var(--accent);background:var(--accent-soft);border-radius:10px;padding:10px 12px;font-size:16px;line-height:1}.chips{gap:8px;padding-bottom:2px;display:flex;overflow-x:auto}.chip{border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:999px;flex:none;padding:6px 12px;font-size:13px;font-weight:600}.chip.active{background:var(--accent-soft);border-color:var(--accent);color:var(--accent);box-shadow:0 0 0 1px var(--accent) inset}.place-list{flex-direction:column;gap:10px;display:flex}.place-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm);flex-direction:column;gap:10px;padding:13px 14px;transition:box-shadow .18s,transform .18s;display:flex}.place-card:hover{box-shadow:var(--shadow-md)}.place-list>.place-card{animation:.3s both fadeUp}.place-head{align-items:center;gap:8px;display:flex}.cat-badge{color:#fff;border-radius:999px;padding:3px 8px;font-size:11px;font-weight:700}.place-area{color:var(--text-soft);font-size:12px}.place-name{margin:0;font-size:16px}.place-note{color:var(--text-soft);margin:0;font-size:14px}.place-cost{color:var(--text);margin:0;font-size:13px;font-weight:600}.place-actions{border-top:1px solid var(--border);gap:8px;padding-top:10px;display:flex}.card-btn{text-align:center;border:1px solid var(--border);background:var(--bg);color:var(--text);border-radius:8px;flex:1;padding:7px 0;font-size:13px;font-weight:600;text-decoration:none}.card-btn.danger{color:var(--danger)}.card-btn.primary{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.empty{text-align:center;flex-direction:column;align-items:center;gap:12px;margin-top:12svh;display:flex}.empty .btn-primary{background:var(--accent);color:#fff;border:none;border-radius:10px;padding:12px 18px;font-weight:700}.muted{color:var(--text-soft);text-align:center}.muted.small{font-size:13px}.picker-list{flex-direction:column;gap:6px;max-height:50svh;margin:12px 0;display:flex;overflow-y:auto}.picker-row{text-align:left;border:1px solid var(--border);background:var(--surface);width:100%;color:var(--text);border-radius:10px;align-items:center;gap:10px;padding:10px;display:flex}.picker-row:disabled{opacity:.5}.picker-icon{border-radius:8px;flex:none;place-items:center;width:32px;height:32px;font-size:16px;display:grid}.picker-text{font-size:14px}.trip{flex-direction:column;gap:14px;display:flex}.trip-toolbar{gap:8px;display:flex}.add-btn.ghost{background:var(--accent-soft);color:var(--accent);box-shadow:none}.load-itinerary{border:1px dashed var(--accent);background:var(--accent-soft);width:100%;color:var(--accent);border-radius:12px;padding:14px;font-size:14px;font-weight:700}.load-itinerary:disabled{opacity:.6}.trip-select{border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:10px;flex:1;padding:10px 12px;font-weight:600}.trip-meta{color:var(--text-soft);justify-content:space-between;align-items:center;font-size:13px;display:flex}.trip-meta-actions button{color:var(--accent);background:0 0;border:none;padding:0 0 0 12px;font-size:13px;font-weight:600}.trip-meta-actions .danger{color:var(--danger)}.day{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm);flex-direction:column;gap:8px;padding:12px 14px;animation:.3s both fadeUp;display:flex}.day-head{justify-content:space-between;align-items:baseline;display:flex}.day-subtotal{color:var(--accent);font-size:13px;font-weight:700}.stop{background:var(--surface);align-items:center;gap:8px;padding:4px 2px;display:flex}.stop.done .stop-body strong{color:var(--text-soft);text-decoration:line-through}.drag-handle{width:22px;color:var(--text-soft);cursor:grab;touch-action:none;background:0 0;border:none;flex:none;padding:0;font-size:16px}.drag-handle:active{cursor:grabbing}.stop-time{border:1px solid var(--border);background:var(--bg);width:78px;color:var(--text);border-radius:8px;flex:none;padding:6px;font-size:13px}.stop-icon{border-radius:8px;flex:none;place-items:center;width:28px;height:28px;font-size:14px;display:grid}.stop-body{flex-direction:column;flex:1;gap:1px;min-width:0;font-size:14px;display:flex}.stop-note{color:var(--text-soft);font-size:12px;line-height:1.3}.stop-actions{flex:none;gap:2px;display:flex}.stop-actions button{border:1px solid var(--border);background:var(--bg);width:26px;height:28px;color:var(--text);border-radius:6px;font-size:13px}.stop-actions button:disabled{opacity:.35}.stop-actions .danger{color:var(--danger)}.add-stop{border:1px dashed var(--border);color:var(--accent);background:0 0;border-radius:8px;align-self:flex-start;margin-top:2px;padding:6px 10px;font-size:13px;font-weight:600}.budget{flex-direction:column;gap:16px;display:flex}.metric-cards{gap:12px;display:flex}.metric{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm);flex-direction:column;flex:1;gap:4px;padding:15px;animation:.3s both popIn;display:flex}.metric:first-child{background:var(--accent-grad);color:#fff;border:none}.metric:first-child .metric-label,.metric:first-child .metric-sub{color:#ffffffd9}.metric:first-child .metric-value{color:#fff}.metric-label{color:var(--text-soft);font-size:12px;font-weight:600}.metric-value{color:var(--text);font-size:22px;font-weight:700}.metric-sub{color:var(--text-soft);font-size:12px}.budget-h{margin:0;font-size:15px}.cat-bars{flex-direction:column;gap:10px;display:flex}.cat-row{grid-template-columns:110px 1fr;grid-template-areas:"label track""amt amt";align-items:center;gap:4px 10px;display:grid}.cat-row-label{grid-area:label;font-size:13px;font-weight:600}.cat-track{background:var(--bg);border-radius:999px;grid-area:track;height:10px;overflow:hidden}.cat-fill{transform-origin:0;border-radius:999px;height:100%;animation:.6s cubic-bezier(.2,.9,.3,1) both barGrow}@keyframes barGrow{0%{transform:scaleX(0)}to{transform:scaleX(1)}}.cat-amt{color:var(--text);text-align:right;grid-area:amt;font-size:12px}.mapview{flex-direction:column;gap:10px;height:100%;display:flex}.map-search{border:1px solid var(--border);background:var(--surface);width:100%;color:var(--text);border-radius:12px;padding:12px 14px;font-size:15px}.map-search:focus{outline:2px solid var(--accent);border-color:var(--accent)}.map-toolbar{gap:8px;display:flex}.map-toolbar select{border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:12px;flex:1;padding:11px 12px;font-weight:600}.map-toolbar .add-btn{border-radius:12px}.map-wrap{flex:1;min-height:56svh;position:relative}.map-canvas{border:1px solid var(--border);border-radius:14px;position:absolute;inset:0;overflow:hidden;box-shadow:0 1px 3px #0000000f}.map-legend{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);border:1px solid var(--border);color:var(--text);background:#fffffff0;border-radius:10px;grid-template-columns:1fr 1fr;gap:3px 10px;padding:8px 10px;font-size:11px;display:grid;position:absolute;bottom:10px;left:10px;box-shadow:0 2px 8px #0000001a}.legend-item{align-items:center;gap:5px;display:flex}.legend-dot{border:1.5px solid #fff;border-radius:50%;width:9px;height:9px;box-shadow:0 0 0 1px #00000014}.found-card{background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-lg);border-radius:14px;padding:12px 14px;animation:.25s both fadeUp;position:absolute;bottom:10px;left:10px;right:10px}.found-card strong{padding-right:20px;font-size:15px;display:block}.found-addr{color:var(--text-soft);margin:2px 0 10px;font-size:12px}.found-row{gap:8px;display:flex}.found-row select{border:1px solid var(--border);background:var(--bg);color:var(--text);border-radius:9px;flex:1;padding:9px 10px}.found-add{background:var(--accent-grad);color:#fff;border:none;border-radius:10px;flex:none;padding:9px 14px;font-weight:700}.found-close{color:var(--text-soft);background:0 0;border:none;font-size:14px;position:absolute;top:8px;right:8px}.map-footer{flex-direction:column;align-items:stretch;gap:6px;display:flex}.locate-btn{border:1px dashed var(--accent);background:var(--accent-soft);width:100%;color:var(--accent);border-radius:12px;padding:11px;font-weight:600}.map-status{text-align:center;color:var(--text-soft);background:var(--surface);border:1px solid var(--border);border-radius:8px;margin:0;padding:8px;font-size:13px}.map-msg{text-align:center;color:var(--text-soft);margin-top:20svh}.map-msg code{background:var(--surface);border:1px solid var(--border);border-radius:4px;padding:1px 5px;font-size:13px}.gm-pop{max-width:200px;padding:2px;font-family:system-ui,sans-serif}.gm-pop-cat{color:#fff;border-radius:999px;margin-bottom:5px;padding:2px 7px;font-size:10px;font-weight:700;display:inline-block}.gm-pop strong{color:#1c1b1f;font-size:14px;display:block}.gm-pop-area{color:#6b6875;margin-top:1px;font-size:12px}.gm-pop-note{color:#45424c;margin-top:4px;font-size:12px;line-height:1.35}.addevent{background:var(--bg);z-index:200;flex-direction:column;max-width:480px;margin:0 auto;animation:.3s cubic-bezier(.2,.9,.3,1) both sheetUp;display:flex;position:fixed;inset:0}.addevent-bar{background:var(--surface);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:14px 16px;display:flex}.ae-close{width:32px;height:32px;color:var(--text);background:0 0;border:none;font-size:18px}.addevent-form{flex-direction:column;gap:16px;padding:16px;display:flex;overflow-y:auto}.addevent-form label{color:var(--text-soft);flex-direction:column;gap:6px;font-size:13px;font-weight:600;display:flex}.addevent-form select,.addevent-form input{border:1px solid var(--border);background:var(--surface);width:100%;color:var(--text);border-radius:10px;padding:11px 12px;font-weight:400}.addevent-form select:focus,.addevent-form input:focus{outline:2px solid var(--accent);border-color:var(--accent)}.addevent-form .row{gap:12px;display:flex}.addevent-form .row label{flex:1}.addevent-form .btn-primary{background:var(--accent-grad);color:#fff;border:none;border-radius:11px;margin-top:4px;padding:13px;font-weight:700;box-shadow:0 2px 8px #7c3aed4d}.addevent-form .btn-primary:disabled{opacity:.6}.ae-saved{color:var(--cat-hotel);text-align:center;margin:0;font-weight:600}.drawer-backdrop{opacity:0;pointer-events:none;z-index:300;background:#0006;transition:opacity .2s;position:fixed;inset:0}.drawer-backdrop.show{opacity:1;pointer-events:auto}.drawer{background:var(--surface);z-index:310;width:80%;max-width:300px;padding:14px 12px calc(14px + env(safe-area-inset-bottom));flex-direction:column;transition:transform .22s;display:flex;position:fixed;top:0;bottom:0;left:0;overflow-y:auto;transform:translate(-100%)}.drawer.open{transform:translate(0)}.drawer-head{justify-content:space-between;align-items:center;padding:0 4px 8px;display:flex}.drawer-user{color:var(--text-soft);word-break:break-word;margin:0 4px 12px;font-size:13px}.drawer-section{text-transform:uppercase;letter-spacing:.5px;color:var(--text-soft);margin:12px 4px 4px;font-size:11px;font-weight:700}.drawer-item{text-align:left;width:100%;color:var(--text);background:0 0;border:none;border-radius:10px;align-items:center;gap:10px;padding:12px 10px;font-size:15px;text-decoration:none;display:flex}.drawer-item:not(.static):active{background:var(--accent-soft)}.drawer-item.static{color:var(--text-soft);font-size:13px}.drawer-item.danger{color:var(--danger)}.drawer-icon{text-align:center;flex:none;width:22px;font-size:18px}.drawer-ext{color:var(--text-soft);margin-left:auto}.tasks{flex-direction:column;gap:12px;display:flex}.task-add{gap:8px;display:flex}.task-add input{border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:10px;flex:1;padding:10px 12px}.task-add input:focus{outline:2px solid var(--accent);border-color:var(--accent)}.task-list{flex-direction:column;gap:8px;display:flex}.task{background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-sm);border-radius:11px;align-items:center;gap:10px;padding:10px 12px;transition:opacity .2s;animation:.25s both fadeUp;display:flex}.task.done{opacity:.7}.task-check{border:2px solid var(--accent);background:var(--surface);color:#fff;border-radius:7px;flex:none;width:24px;height:24px;font-size:14px;font-weight:700;line-height:1;transition:background .18s,transform .18s}.task.done .task-check{background:var(--accent-grad);border-color:#0000;transform:scale(1.05)}.task-text{word-break:break-word;flex:1;font-size:15px}.task.done .task-text{color:var(--text-soft);text-decoration:line-through}.task-del{color:var(--text-soft);background:0 0;border:none;flex:none;padding:4px;font-size:15px}.shell{flex-direction:column;flex:1;min-height:100svh;display:flex}.topbar{-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--border);z-index:10;background:#ffffffd9;justify-content:space-between;align-items:center;padding:14px 16px;display:flex;position:sticky;top:0}.topbar strong{letter-spacing:-.2px;background:var(--accent-grad);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;font-size:16px}.menu-btn{width:32px;height:32px;color:var(--text);background:0 0;border:none;border-radius:8px;font-size:20px;line-height:1}.menu-btn:active{background:var(--accent-soft)}.content{flex:1;padding:16px;overflow-y:auto}.tab-view{animation:.26s both fadeUp}.placeholder{text-align:center;color:var(--text-soft);margin-top:25svh}.placeholder-icon{font-size:48px}.placeholder h2{color:var(--text);margin:8px 0 4px}.who{margin-top:16px;font-size:13px}.tabbar{-webkit-backdrop-filter:blur(12px);border-top:1px solid var(--border);padding-bottom:env(safe-area-inset-bottom);z-index:10;background:#ffffffe6;display:flex;position:sticky;bottom:0}.tab{color:var(--text-soft);background:0 0;border:none;flex-direction:column;flex:1;align-items:center;gap:3px;padding:9px 0 11px;display:flex;position:relative}.tab.active{color:var(--accent)}.tab.active:before{content:"";background:var(--accent-grad);border-radius:0 0 3px 3px;width:22px;height:3px;position:absolute;top:0}.tab-icon{font-size:20px;transition:transform .18s}.tab.active .tab-icon{transform:translateY(-1px)scale(1.12)}.tab-label{font-size:11px;font-weight:600}
