:root{--ink:#4a3343;--ink-soft:#8a7183;--card:#fffbf7e6;--card-solid:#fffbf7;--line:#4a33431f;--accent:#ff6f91;--accent-ink:#d9406b;--accent-soft:#ffe1ea;--shadow:0 10px 30px #4a283c2e;--radius:18px;--gap:16px;--font:"Mali", ui-rounded, system-ui, -apple-system, "Segoe UI", sans-serif}*{box-sizing:border-box}html,body{height:100%;color:var(--ink);font-family:var(--font);-webkit-font-smoothing:antialiased;background:#cfe9fb;margin:0;overflow:hidden}button{font:inherit;color:inherit;cursor:pointer}#scene{position:fixed;inset:0}#scene canvas{touch-action:none;display:block}.labels{pointer-events:none;position:absolute;inset:0}.card{background:var(--card);-webkit-backdrop-filter:blur(10px)saturate(1.2);border-radius:var(--radius);box-shadow:var(--shadow);border:1px solid #ffffffb3}.chip{border:1px solid var(--line);white-space:nowrap;background:#fff;border-radius:999px;padding:6px 12px;font-size:13px;font-weight:500;transition:background .15s,transform .15s}.chip:hover{background:var(--accent-soft)}.chip:active{transform:scale(.96)}.chip[aria-pressed=true]{background:var(--accent);border-color:var(--accent);color:#fff}.title-card{top:var(--gap);left:var(--gap);max-width:min(380px, calc(100vw - 2 * var(--gap)));padding:14px 16px;position:fixed}.title-row{align-items:center;gap:10px;display:flex}.title-heart{font-size:30px;animation:1.6s ease-in-out infinite beat}@keyframes beat{0%,to{transform:scale(1)}15%{transform:scale(1.15)}30%{transform:scale(1)}45%{transform:scale(1.1)}}h1{margin:0;font-size:20px;font-weight:700;line-height:1.2}#trip-sub{color:var(--ink-soft);margin:2px 0 0;font-size:13px}.view-buttons{flex-wrap:wrap;gap:6px;margin-top:10px;display:flex}.panel{top:var(--gap);right:var(--gap);flex-direction:column;width:370px;transition:transform .3s,opacity .3s;display:flex;position:fixed;bottom:150px;overflow:hidden}.panel.is-collapsed{transform:translateX(calc(100% + 2 * var(--gap)));opacity:0;pointer-events:none}.panel-head{justify-content:space-between;align-items:center;padding:12px 14px 6px 16px;display:flex}.panel-head h2{margin:0;font-size:17px}.icon-btn{color:var(--ink-soft);background:0 0;border:0;border-radius:10px;padding:4px 8px;font-size:14px}.icon-btn:hover{background:var(--accent-soft)}.panel-open{top:var(--gap);right:var(--gap);border:0;padding:10px 14px;font-weight:600;position:fixed}.itinerary{scrollbar-width:thin;flex:1;padding:4px 10px 10px;overflow-y:auto}.panel-foot{color:var(--ink-soft);border-top:1px solid var(--line);margin:0;padding:10px 16px 12px;font-size:12px}.day{border:1px solid var(--line);background:#fff;border-radius:14px;margin-bottom:12px;overflow:hidden}.day-head{background:color-mix(in srgb, var(--c) 14%, #fff);border-bottom:1px solid color-mix(in srgb, var(--c) 25%, #fff);align-items:center;gap:10px;padding:10px 12px;display:flex}.day-badge{background:var(--c);color:#fff;border-radius:999px;flex:none;padding:3px 9px;font-size:12px;font-weight:700}.day-head h3{margin:0;font-size:14px;line-height:1.25}.day-head p{color:var(--ink-soft);margin:1px 0 0;font-size:12px}.events{margin:0;padding:4px 0;list-style:none}.ev{border-left:3px solid #0000;align-items:flex-start;gap:4px;padding-right:8px;transition:background .2s;display:flex}.ev.is-now{background:color-mix(in srgb, var(--c) 10%, #fff);border-left-color:var(--c)}.ev-main{text-align:left;background:0 0;border:0;flex:1;grid-template-columns:46px 24px 1fr;align-items:start;gap:2px;min-width:0;padding:7px 0 7px 8px;display:grid}.ev-main:hover .ev-title{color:var(--accent-ink)}.ev-time{color:var(--ink-soft);font-variant-numeric:tabular-nums;padding-top:2px;font-size:12px;font-weight:600}.ev-icon{font-size:15px}.ev-body{flex-direction:column;min-width:0;display:flex}.ev-title{font-size:13.5px;font-weight:600;line-height:1.3}.ev-sub,.ev-note{color:var(--ink-soft);font-size:12px;line-height:1.35}.ev-note{font-style:italic}.ev--drive .ev-title,.ev--walk .ev-title,.ev--sleep .ev-title{font-weight:500}.ev.is-empty .ev-title{color:var(--ink-soft)}.ev-actions{flex:none;gap:4px;padding-top:6px;display:flex}.ev-btn{border:1px solid var(--line);min-width:28px;height:26px;color:var(--ink);background:#fff;border-radius:9px;place-items:center;padding:0 6px;font-size:12px;text-decoration:none;display:inline-grid}.ev-btn:hover{background:var(--accent-soft)}.ev-btn--add{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}.ev-btn--add:hover{background:var(--accent-ink)}.timeline{left:var(--gap);right:var(--gap);bottom:var(--gap);padding:10px 14px 12px;position:fixed}.tl-top{align-items:center;gap:10px;min-width:0;margin-bottom:8px;display:flex}.play{background:var(--accent);color:#fff;border:0;border-radius:50%;flex:none;width:42px;height:42px;font-size:15px;transition:transform .15s;box-shadow:0 4px 12px #ff6f9173}.play:hover{transform:scale(1.06)}.play.is-playing{background:var(--ink);box-shadow:none}.speed{flex:none;min-width:46px}.tl-clock{flex-direction:column;flex:none;min-width:82px;line-height:1.1;display:flex}.tl-clock span{color:var(--ink-soft);font-size:12px}.tl-clock b{font-variant-numeric:tabular-nums;font-size:20px}.tl-status{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;font-size:15px;font-weight:600;overflow:hidden}.tl-hint{color:var(--ink-soft);flex:none;font-size:11px}.tl-track{cursor:pointer;-webkit-user-select:none;user-select:none;touch-action:none;gap:4px;height:46px;display:flex;position:relative}.tl-day{border-top:3px solid var(--c);background:linear-gradient(90deg,#ffd9b8 0%,#fff4e3 7% 64%,#ffc2a6 70%,#8c84c4 78%,#3b3f78 100%);border-radius:10px;flex:1;position:relative;overflow:hidden}.tl-day-label{color:var(--ink-soft);font-size:11px;font-weight:600;position:absolute;top:2px;left:6px}.tl-layer{pointer-events:none;position:absolute;inset:0}.tl-drive{background:var(--c);opacity:.85;border-radius:4px;height:8px;position:absolute;bottom:8px}.tl-walk{background:radial-gradient(circle, var(--c) 1.5px, transparent 2px) 0 50% / 4px 4px repeat-x;opacity:1;min-width:8px}.tl-tick{pointer-events:auto;font-size:13px;line-height:1;position:absolute;bottom:17px;transform:translate(-50%)}.tl-tick.is-empty{opacity:.5;filter:grayscale(.6)}.tl-playhead{background:var(--accent-ink);pointer-events:none;width:2px;margin-left:-1px;position:absolute;top:-4px;bottom:-4px}.tl-playhead span{color:var(--accent);text-shadow:0 1px 2px #0003;font-size:18px;line-height:1;position:absolute;top:-12px;left:50%;transform:translate(-50%)}.pin{pointer-events:auto;box-shadow:0 4px 14px #3c1e3238, inset 0 0 0 2px var(--c);white-space:nowrap;background:#fff;border:0;border-radius:999px;align-items:center;gap:6px;padding:4px 10px 4px 6px;font-size:12px;transition:transform .15s;display:inline-flex}.pin:hover{transform:translateY(-2px)scale(1.04)}.pin-emoji{font-size:18px;line-height:1}.pin-text{flex-direction:column;align-items:flex-start;line-height:1.15;display:flex}.pin-text b{font-size:13px}.pin-text small{color:var(--ink-soft);font-size:11px}.pin--left{translate:-45%}.pin--right{translate:45%}.pin--meal{padding:3px 9px 3px 5px;font-size:12px}.pin--meal .pin-emoji{font-size:14px}.town{color:#5c4655;text-shadow:0 0 3px #fff,0 0 6px #fff;white-space:nowrap;font-size:11px;font-weight:600;transition:opacity .3s}body.is-night .town{color:#fff;text-shadow:0 0 4px #1d2350,0 0 8px #1d2350}.labels.is-far .town{opacity:0}.labels.is-far .pin-text small{display:none}.labels.is-far .pin--meal{opacity:0;pointer-events:none}.editor{width:min(440px,100vw - 32px);color:var(--ink);background:var(--card-solid);padding:0}.editor::backdrop{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#28142859}.editor-form{flex-direction:column;gap:12px;padding:18px 20px 16px;display:flex}.editor-form header h3{margin:0;font-size:18px}.editor-form header p{color:var(--ink-soft);margin:4px 0 0;font-size:13px}.editor-form label{flex-direction:column;gap:4px;font-size:13px;font-weight:600;display:flex}.editor-form input,.editor-form textarea{font:inherit;color:var(--ink);border:1px solid var(--line);background:#fff;border-radius:10px;width:100%;padding:8px 10px;font-size:14px;font-weight:400}.editor-form input:focus,.editor-form textarea:focus{outline:2px solid var(--accent);outline-offset:1px}.where-row{gap:6px;display:flex}.travel{border:0;gap:6px;margin:0;padding:0;display:flex}.travel legend{margin-bottom:4px;padding:0;font-size:13px;font-weight:600}.travel label{flex:1}.travel input{opacity:0;pointer-events:none;position:absolute}.travel span{text-align:center;border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:10px;padding:7px 10px;font-weight:500;display:block}.travel input:checked+span{background:var(--accent);border-color:var(--accent);color:#fff}.travel input:focus-visible+span{outline:2px solid var(--accent);outline-offset:1px}.where-status{color:var(--ink-soft);margin:-6px 0 0;font-size:12px}.where-status.is-error{color:#c62828}.editor-form footer{align-items:center;gap:8px;margin-top:4px;display:flex}.spacer{flex:1}.btn-ghost,.btn-primary{border-radius:10px;padding:8px 14px;font-size:14px;font-weight:600}.btn-ghost{border:1px solid var(--line);background:#fff}.btn-ghost:hover{background:var(--accent-soft)}.btn-primary{background:var(--accent);color:#fff;border:0}.btn-primary:hover{background:var(--accent-ink)}.toast{opacity:0;background:var(--ink);color:#fff;box-shadow:var(--shadow);pointer-events:none;border-radius:999px;padding:10px 16px;font-size:14px;font-weight:600;transition:opacity .3s,transform .3s;position:fixed;bottom:150px;left:50%;transform:translate(-50%,10px)}.toast.is-shown{opacity:1;transform:translate(-50%)}.loading{z-index:10;background:linear-gradient(#bfe6ff,#ffe6f0);place-items:center;transition:opacity .6s;display:grid;position:fixed;inset:0}.loading.is-done{opacity:0;pointer-events:none}.loading-card{border-radius:var(--radius);box-shadow:var(--shadow);background:#fff;max-width:calc(100vw - 32px);padding:18px 26px;font-size:20px;font-weight:600}@media (width<=900px){.panel{left:var(--gap);width:auto;max-height:45vh;top:auto;bottom:160px}.tl-hint{display:none}}@media (width<=600px){:root{--gap:10px}.title-card{padding:10px 12px}.title-heart{font-size:24px}.view-buttons{flex-wrap:nowrap;gap:4px;margin-top:8px}.view-buttons .chip{padding:5px 8px;font-size:12px}h1{font-size:17px}.tl-status{font-size:13px}.tl-top{flex-wrap:wrap}.tl-status{flex-basis:100%;order:5}.panel-open{top:auto;bottom:170px}}
