*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--navy: #2C4A6A;--blue: #C28234;--blue-dim: rgba(194, 130, 52, .12);--bg: #F4EDE0;--surface: #ffffff;--surface-2: #EDE5D3;--border: rgba(0, 0, 0, .08);--text: #1C2E3D;--text-2: #5A6E7A;--state-light: #166534;--state-light-bg: #dcfce7;--state-moderate: #92400e;--state-moderate-bg: #fef3c7;--state-full: #991b1b;--state-full-bg: #fee2e2;--radius-sm: 8px;--radius: 14px;--radius-lg: 22px;--shadow-sm: 0 1px 4px rgba(0, 0, 0, .07);--shadow: 0 4px 16px rgba(0, 0, 0, .1);--shadow-lg: 0 8px 32px rgba(0, 0, 0, .14);--tab-h: 66px}*:focus-visible{outline:2px solid var(--blue);outline-offset:3px;border-radius:4px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}html,body{height:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased}#app{display:flex;flex-direction:column;min-height:100dvh}header{background:var(--surface);color:var(--navy);padding:14px 20px;padding-top:max(14px,env(safe-area-inset-top));display:flex;align-items:center;gap:12px;border-bottom:1px solid var(--border);box-shadow:0 2px 8px #2c4a6a14}header img{flex-shrink:0}header h1{font-size:1.1rem;font-weight:700;letter-spacing:-.01em;line-height:1.2}header p{font-size:.72rem;color:var(--text-2);margin-top:1px}main{flex:1;padding:20px;padding-bottom:calc(24px + var(--tab-h) + env(safe-area-inset-bottom));max-width:480px;width:100%;margin:0 auto;overflow-y:auto}main>*{animation:fadeUp .18s ease both}@keyframes fadeUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.tab-bar{position:fixed;bottom:0;left:0;right:0;display:flex;align-items:center;background:var(--surface);border-top:1px solid var(--border);padding-bottom:env(safe-area-inset-bottom);z-index:10;box-shadow:0 -2px 14px #00000012;overflow:visible}.tab-btn{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;padding:10px 8px;background:none;border:none;color:var(--text-2);font-size:.68rem;font-weight:500;cursor:pointer;transition:color .14s;min-height:var(--tab-h);-webkit-tap-highlight-color:transparent}.tab-btn--active{color:var(--blue)}.brand-hero{display:flex;justify-content:center;padding:4px 0 24px;width:100%}.brand-hero__img{width:320px;height:320px;object-fit:contain;border-radius:48px;filter:drop-shadow(0 4px 16px rgba(44,74,106,.18))}.push-tab{display:flex;flex-direction:column;align-items:center;width:100%}.push-tab>.push-screen{min-height:40vh;width:100%}.android-install-banner{background:var(--navy);color:#fff;display:flex;align-items:center;gap:10px;padding:10px 14px 10px 16px}.android-install-banner p{flex:1;font-size:.84rem;line-height:1.4;opacity:.92}.android-install-btn{flex-shrink:0;background:#fff;color:var(--navy);border:none;border-radius:var(--radius-sm);padding:7px 15px;font-size:.84rem;font-weight:700;cursor:pointer;white-space:nowrap;transition:opacity .12s}.android-install-btn:active{opacity:.8}.android-install-dismiss{flex-shrink:0;background:none;border:none;color:#ffffff8c;cursor:pointer;padding:6px;font-size:1rem;line-height:1;transition:color .12s}.android-install-dismiss:hover{color:#ffffffe6}.install-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;background:#00000085;display:flex;align-items:flex-end;padding:16px;padding-bottom:max(16px,env(safe-area-inset-bottom));animation:fadeIn .18s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.prompt-card{background:var(--surface);border-radius:var(--radius-lg);padding:24px 20px 22px;width:100%;box-shadow:var(--shadow-lg);position:relative;animation:slideUp .22s ease}@keyframes slideUp{0%{transform:translateY(28px);opacity:0}to{transform:translateY(0);opacity:1}}.prompt-close{position:absolute;top:14px;right:14px;background:var(--surface-2);border:none;width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.78rem;color:var(--text-2);cursor:pointer}.prompt-card h2{font-size:1.1rem;font-weight:700;margin-bottom:6px;color:var(--text)}.prompt-card>p{font-size:.88rem;color:var(--text-2);margin-bottom:18px;line-height:1.5}.install-steps{list-style:none;display:flex;flex-direction:column;gap:12px}.install-steps li{display:flex;align-items:flex-start;gap:12px;font-size:.88rem;line-height:1.5;color:var(--text)}.step-num{flex-shrink:0;width:26px;height:26px;border-radius:50%;background:var(--navy);color:#fff;font-size:.75rem;font-weight:700;display:flex;align-items:center;justify-content:center;margin-top:2px}.step-icon{display:inline-block;font-size:1rem;vertical-align:middle}.register-screen{display:flex;flex-direction:column}.register-heading{font-size:1rem;font-weight:700;color:var(--text);margin-bottom:6px}.register-description{font-size:.88rem;color:var(--text-2);line-height:1.5;margin-bottom:18px}.register-error{background:#fee2e2;color:#991b1b;border-radius:var(--radius);padding:12px 14px;font-size:.88rem;margin-bottom:12px;line-height:1.4}.register-status{color:var(--text-2);font-size:.88rem;margin-bottom:10px}.date-picker-row{margin-bottom:20px}.date-picker{width:100%;padding:12px 14px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);font-size:.95rem;font-family:inherit;box-shadow:var(--shadow-sm);cursor:pointer;-moz-appearance:none;appearance:none;-webkit-appearance:none}.date-picker:focus{outline:2px solid var(--blue);outline-offset:2px;border-color:var(--blue)}.register-no-runs{text-align:center;color:var(--text-2);font-size:.9rem;padding:32px 0}.run-group{margin-bottom:20px}.run-group-label{font-size:.7rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-2);margin-bottom:8px;padding-left:2px}.run-list{list-style:none;display:flex;flex-direction:column;gap:8px}.run-item{display:flex;align-items:center;width:100%;padding:14px 16px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm);cursor:pointer;text-align:left;color:var(--text);gap:12px;transition:background .1s,transform .1s;-webkit-tap-highlight-color:transparent}.run-item:active:not(:disabled){background:var(--surface-2);transform:scale(.985)}.registered-ferry-banner{background:var(--blue-dim);border:1.5px solid var(--blue);border-radius:var(--radius);padding:14px 16px;margin-bottom:20px;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:background .1s}.registered-ferry-banner:active{background:color-mix(in srgb,var(--blue) 18%,transparent)}.registered-ferry-banner__header{display:flex;align-items:center;gap:7px;margin-bottom:8px}.registered-ferry-banner__label{font-size:.7rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--blue)}.registered-ferry-banner__body{display:flex;align-items:baseline;gap:10px;margin-bottom:4px}.registered-ferry-banner__direction{font-size:1rem;font-weight:700;color:var(--text)}.registered-ferry-banner__time{font-size:1.5rem;font-weight:800;color:var(--navy);letter-spacing:-.03em;line-height:1}.registered-ferry-banner__meta{display:flex;gap:10px;font-size:.78rem;color:var(--text-2)}.registered-ferry-banner__meta span:after{content:"·";margin-left:10px}.registered-ferry-banner__meta span:last-child:after{content:none}.run-item--registered{border-color:var(--blue);background:var(--blue-dim);opacity:.6}.run-registered-badge{font-size:.7rem;font-weight:700;color:var(--blue);margin-top:2px}.run-item:disabled{opacity:.42;cursor:default}.run-route{display:flex;align-items:center;gap:6px;flex:1;min-width:0}.run-from{font-size:.88rem;font-weight:400;color:var(--text-2);white-space:nowrap}.run-arrow{font-size:.9rem;font-weight:700;color:var(--blue);flex-shrink:0}.run-to{font-size:1rem;font-weight:700;color:var(--text);white-space:nowrap}.run-meta{display:flex;flex-direction:column;align-items:flex-end;flex-shrink:0}.run-time{font-size:1rem;font-weight:700;color:var(--navy)}.run-relative{font-size:.72rem;color:var(--text-2);margin-top:2px}.back-btn{display:inline-flex;align-items:center;gap:4px;background:none;border:none;color:var(--blue);font-size:.92rem;font-weight:600;cursor:pointer;padding:4px 0 16px;-webkit-tap-highlight-color:transparent}.back-btn:disabled{opacity:.42;cursor:default}.ferry-detail-card{background:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow);overflow:hidden;margin-bottom:20px;position:relative}.ferry-detail-card:before{content:"";position:absolute;inset:0 0 auto 0;height:4px;background:linear-gradient(90deg,var(--navy) 0%,var(--blue) 100%)}.run-detail{padding:24px 22px 20px;display:flex;flex-direction:column}.run-detail-route-pill{display:inline-block;font-size:.7rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--blue);background:var(--blue-dim);border-radius:999px;padding:3px 10px;margin-bottom:12px;align-self:flex-start}.run-detail-time{font-size:2.2rem;font-weight:800;color:var(--text);letter-spacing:-.03em;line-height:1.1}.run-detail-sub{font-size:.88rem;font-weight:500;color:var(--blue);margin-top:4px}.run-detail-counts{display:flex;flex-wrap:wrap;gap:12px;margin-top:14px;padding-top:14px;border-top:1px solid var(--border)}.run-detail-count{display:inline-flex;align-items:center;gap:5px;font-size:.82rem;font-weight:600;color:var(--text-2)}.run-detail-count--lineup{color:var(--blue)}.status-embedded{padding:16px 22px 20px;border-top:1px solid var(--border);display:flex;flex-direction:column}.status-embedded .status-state-indicator{box-shadow:0 0 0 3px color-mix(in srgb,var(--card-color) 20%,transparent)}.status-embedded .status-state-sublabel{padding-left:21px;margin-bottom:12px}.status-embedded .status-depart{color:var(--text-2)}.status-embedded .status-refreshing,.status-embedded .status-updated{margin-top:8px}.register-confirm-btn{width:100%;background:var(--blue);color:#fff;border:none;border-radius:var(--radius);padding:15px 24px;font-size:1rem;font-weight:700;cursor:pointer;transition:opacity .12s,transform .1s;-webkit-tap-highlight-color:transparent;box-shadow:0 4px 16px #c2823459}.register-confirm-btn:active:not(:disabled){transform:scale(.97);opacity:.9}.register-confirm-btn:disabled{opacity:.52;cursor:default}.cancel-btn{background:none;border:1.5px solid var(--border);border-radius:var(--radius);padding:12px 24px;font-size:.88rem;font-weight:600;color:var(--text-2);cursor:pointer;width:100%;transition:border-color .12s,color .12s}.cancel-btn:hover:not(:disabled){border-color:#f87171;color:#dc2626}.cancel-btn:disabled{opacity:.42;cursor:default}.cancel-btn--sm{width:auto;padding:5px 12px;font-size:.75rem;margin-top:10px}.status-card{border-radius:var(--radius);padding:18px 20px;background:var(--card-bg);border:1.5px solid color-mix(in srgb,var(--card-color) 28%,transparent);display:flex;flex-direction:column;gap:0}.status-state-row{display:flex;align-items:center;gap:10px;margin-bottom:5px}.status-state-indicator{width:11px;height:11px;border-radius:50%;background:var(--card-color);flex-shrink:0;box-shadow:0 0 0 3px color-mix(in srgb,var(--card-color) 20%,transparent)}.status-state-label{font-size:1.3rem;font-weight:800;color:var(--card-color);letter-spacing:-.02em;line-height:1}.status-state-sublabel{font-size:.88rem;color:var(--text);line-height:1.4;padding-left:21px;margin-bottom:14px}.status-divider{height:1px;background:color-mix(in srgb,var(--card-color) 16%,transparent);margin-bottom:12px}.status-depart{display:flex;align-items:center;gap:6px;font-size:.92rem;font-weight:700;color:var(--text);margin-bottom:4px}.status-dep-time{font-weight:400;color:var(--text-2)}.status-refreshing,.status-updated{font-size:.72rem;color:var(--text-2);margin-top:6px}.home-screen{display:flex;flex-direction:column;gap:20px}.home-hero{background:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:24px 22px 20px;display:flex;flex-direction:column;align-items:flex-start;gap:2px;position:relative;overflow:hidden}.home-hero:before{content:"";position:absolute;inset:0 0 auto 0;height:4px;background:linear-gradient(90deg,var(--navy) 0%,var(--blue) 100%);border-radius:var(--radius-lg) var(--radius-lg) 0 0;transition:background .4s ease}.home-hero--reported{background:var(--state-light-bg)}.home-hero--reported:before{background:linear-gradient(90deg,#14532d 0%,var(--state-light) 100%)}.home-route-pill{display:inline-block;font-size:.7rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--blue);background:var(--blue-dim);border-radius:999px;padding:3px 10px;margin-bottom:10px;transition:color .4s ease,background .4s ease}.home-hero--reported .home-route-pill{color:var(--state-light);background:#1665341f}.home-next-label{font-size:.78rem;font-weight:500;color:var(--text-2);text-transform:uppercase;letter-spacing:.05em}.home-next-time{font-size:2.2rem;font-weight:800;color:var(--text);letter-spacing:-.03em;line-height:1.1;margin-top:2px}.home-next-rel{font-size:.88rem;font-weight:500;color:var(--blue);margin-top:2px}.home-next-rel--reported{color:var(--state-light)}.home-lineup-count{font-size:.82rem;font-weight:600;color:var(--text-2);margin-top:6px;transition:color .4s ease}.home-lineup-count--moderate{color:var(--state-moderate)}.home-lineup-count--full{color:var(--state-full)}.home-description{margin-top:14px;padding-top:14px;border-top:1px solid var(--border);width:100%;font-size:.84rem;color:var(--text-2);line-height:1.55}.lineup-reporter{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px}.lineup-btn{display:flex;flex-direction:row;align-items:center;justify-content:center;gap:10px;width:100%;padding:18px 24px;background:var(--blue);color:#fff;border:none;border-radius:var(--radius);box-shadow:0 4px 18px #c2823459;cursor:pointer;transition:background .15s,transform .12s,box-shadow .15s,opacity .2s;will-change:transform;animation:btn-pulse 2.8s ease-in-out infinite;-webkit-tap-highlight-color:transparent}@keyframes btn-pulse{0%{box-shadow:0 6px 28px #c2823461}50%{box-shadow:0 6px 28px #c2823461,0 0 0 14px #c2823414}to{box-shadow:0 6px 28px #c2823461}}.lineup-btn--done,.lineup-btn--error,.lineup-btn:disabled{animation:none}.lineup-btn:active:not(:disabled){transform:scale(.96);box-shadow:0 2px 12px #c2823447;animation:none}.lineup-btn--done{background:#4b5563;box-shadow:0 4px 16px #0000001f;opacity:.78;cursor:default}.lineup-btn--error{background:#dc2626;box-shadow:0 4px 16px #dc26264d}.lineup-btn:disabled{cursor:default}.lineup-btn-icon{display:flex;align-items:center;justify-content:center;font-size:1.3rem;line-height:1;flex-shrink:0}.lineup-btn-label{font-size:1rem;font-weight:700;letter-spacing:-.01em}.lineup-note{font-size:.85rem;color:var(--text-2);text-align:center;line-height:1.55;max-width:260px}.lineup-note--error{color:#dc2626}.lineup-undo-btn{display:flex;align-items:center;justify-content:center;background:transparent;border:1.5px solid var(--text-2);border-radius:8px;color:var(--text-2);font-size:.85rem;font-weight:600;cursor:pointer;padding:.5rem 1.25rem;opacity:.7;transition:opacity .15s,background .15s}.lineup-undo-btn:hover{opacity:1;background:#ffffff0f}.lineup-undo-btn:active{transform:scale(.97)}.lineup-timeout{text-align:center;padding:1rem}.lineup-timeout-msg{font-size:.9rem;color:var(--text-2)}.push-screen{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;min-height:60vh;gap:14px;padding:0 8px}.push-icon{width:64px;height:64px;border-radius:50%;background:var(--blue-dim);display:flex;align-items:center;justify-content:center;margin-bottom:4px;flex-shrink:0}.push-icon--ok{background:#15a34a1f;color:#166534}.push-icon--warn{background:var(--surface-2);color:var(--text-2)}.push-heading{font-size:1.3rem;font-weight:700;color:var(--text)}.push-body{font-size:.92rem;color:var(--text-2);line-height:1.6;max-width:290px}.push-error{background:#fee2e2;color:#991b1b;border-radius:var(--radius);padding:10px 14px;font-size:.84rem;width:100%;max-width:320px;line-height:1.4}.push-btn{margin-top:4px;padding:15px 36px;background:var(--blue);color:#fff;border:none;border-radius:var(--radius);font-size:1rem;font-weight:700;cursor:pointer;box-shadow:0 4px 16px #c2823459;transition:opacity .15s,transform .1s;-webkit-tap-highlight-color:transparent}.push-btn:active:not(:disabled){transform:scale(.97)}.push-btn:disabled{opacity:.52;cursor:default}
