@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700;800&family=Outfit:wght@400;500;600;700;800&display=swap');
:root{--bg:#f8f8fc;--paper:#fff;--ink:#241d36;--muted:#8c879c;--soft:#f2effb;--violet:#7754c6;--violet-deep:#6441b2;--violet-light:#e9e0ff;--border:#ebe9f2;--green:#2d9f76;--red:#db6e73;--shadow:0 14px 45px rgba(67,47,109,.06)}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);font-family:'DM Sans',system-ui,sans-serif;color:var(--ink);font-size:14px}button,input,select{font:inherit}button{cursor:pointer}button:focus-visible,input:focus-visible,select:focus-visible,a:focus-visible{outline:3px solid #c5b5ee;outline-offset:2px}a{color:var(--violet-deep)}.shell{display:grid;grid-template-columns:252px minmax(0,1fr);min-height:100vh;max-width:1660px;margin:auto}.sidebar{position:sticky;top:0;height:100vh;padding:34px 22px 26px;background:var(--paper);border-right:1px solid var(--border);display:flex;flex-direction:column}.brand{display:flex;gap:12px;align-items:center;padding-left:8px}.brand-mark{display:grid;place-items:center;width:43px;height:43px;color:#fff;background:var(--violet);font-size:28px;border-radius:15px;box-shadow:0 7px 17px #8056c73b}.brand strong{font-family:'Outfit',sans-serif;font-size:19px;letter-spacing:-.8px}.brand strong span{color:var(--violet)}.brand small{color:var(--muted);font-size:11px;display:block;margin-top:2px}.sidebar-label{font-size:10px;letter-spacing:1.7px;color:#a4a0b3;font-weight:800;margin:51px 18px 15px}.side-nav{display:grid;gap:6px}.nav-btn{border:0;background:transparent;color:#756c89;font-weight:700;text-align:left;display:flex;align-items:center;gap:13px;padding:14px 16px;border-radius:13px}.nav-btn:hover{background:#f9f7fc}.nav-btn.active{background:var(--soft);color:var(--violet-deep)}.nav-icon{font-size:23px;font-weight:400;display:inline-grid;place-items:center;width:23px}.sidebar-spacer{flex:1}.sidebar-foot{padding:18px 13px;border-radius:16px;background:linear-gradient(130deg,#f1eafd,#fbf8ff);display:flex;align-items:center;gap:10px;margin-bottom:22px}.sidebar-foot .small-spark{color:var(--violet);font-size:22px}.sidebar-foot b{font-size:11px;display:block}.sidebar-foot small{font-size:10px;color:var(--muted);line-height:1.5;display:block;margin-top:5px}.version{font-size:10px;color:#b0abbc;letter-spacing:.6px;text-align:center}.main-content{min-width:0;padding:38px min(5vw,65px) 28px}.topbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:33px;gap:12px}.eyebrow{font-size:10px;font-weight:800;letter-spacing:2px;color:var(--violet)}h1,h2,h3,h4,p{margin:0}h1,h2,h3,h4{font-family:'Outfit',system-ui,sans-serif}h1{margin-top:7px;font-size:30px;line-height:1.2;letter-spacing:-1px;font-weight:700}.waving{color:#f0b76e}.top-actions{display:flex;align-items:center;gap:15px}.privacy-indicator{font-size:11px;color:var(--muted);font-weight:600;white-space:nowrap}.dot{display:inline-block;width:7px;height:7px;border-radius:100%;background:#999;vertical-align:middle;margin-right:7px}.dot.green{background:var(--green)}.dot.yellow{background:#e9a63c}.icon-button{border:1px solid var(--border);background:#fff;border-radius:13px;padding:9px 13px;font-size:18px;color:#736b84}.content-area{max-width:1120px}.app-footer{font-size:11px;color:#aaa5b8;margin-top:48px}.app-footer span{color:var(--violet);padding:0 7px}.grid-two{display:grid;grid-template-columns:1.35fr 1fr;gap:22px}.grid-three{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.card{background:var(--paper);border:1px solid var(--border);border-radius:21px;box-shadow:var(--shadow);padding:24px}.card.shadowless{box-shadow:none}.featured{background:linear-gradient(120deg,#7855c6,#9874e5);border:0;color:#fff;position:relative;overflow:hidden;min-height:276px}.featured:after{content:'';position:absolute;width:230px;height:230px;right:4px;top:-30px;pointer-events:none;background:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20240%20240%22%3E%3Cg%20stroke%3D%22white%22%20stroke-width%3D%2212%22%20stroke-linecap%3D%22square%22%20opacity%3D%22.13%22%3E%3Cpath%20d%3D%22M120%2023V83%22%20transform%3D%22rotate%280%20120%20120%29%22%2F%3E%3Cpath%20d%3D%22M120%2023V83%22%20transform%3D%22rotate%2845%20120%20120%29%22%2F%3E%3Cpath%20d%3D%22M120%2023V83%22%20transform%3D%22rotate%2890%20120%20120%29%22%2F%3E%3Cpath%20d%3D%22M120%2023V83%22%20transform%3D%22rotate%28135%20120%20120%29%22%2F%3E%3Cpath%20d%3D%22M120%2023V83%22%20transform%3D%22rotate%28180%20120%20120%29%22%2F%3E%3Cpath%20d%3D%22M120%2023V83%22%20transform%3D%22rotate%28225%20120%20120%29%22%2F%3E%3Cpath%20d%3D%22M120%2023V83%22%20transform%3D%22rotate%28270%20120%20120%29%22%2F%3E%3Cpath%20d%3D%22M120%2023V83%22%20transform%3D%22rotate%28315%20120%20120%29%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E") center/contain no-repeat;opacity:1}.featured>*{position:relative;z-index:1}.mini-label{font-size:10px;font-weight:800;letter-spacing:1.4px;text-transform:uppercase;color:var(--muted)}.featured .mini-label{color:#e3d6ff}.feature-date{font-family:'Outfit',sans-serif;font-size:29px;font-weight:700;letter-spacing:-.4px;margin:18px 0 8px}.feature-hours{font-family:'Outfit',sans-serif;font-size:42px;font-weight:700;line-height:1.15;letter-spacing:-1px}.feature-hours span{font-size:25px;font-weight:400;opacity:.75;margin:0 4px}.feature-room{margin-top:16px;color:#eee6ff;display:flex;gap:8px;align-items:center;font-size:12px}.pill{display:inline-flex;gap:5px;align-items:center;border-radius:100px;padding:6px 10px;font-size:11px;font-weight:800}.pill.white{background:#ffffff2d;color:#fff}.pill.green{color:#1c8a63;background:#ddf7eb}.pill.amber{color:#a46f21;background:#fff4de}.pill.muted{color:#756d87;background:#f0eff5}.pill.violet{color:#704cbb;background:#ede4ff}.pill.red{color:#b44b58;background:#ffe6e7}.feature-top{display:flex;justify-content:space-between;align-items:center}.card-top{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:19px}.card h2{font-size:19px;line-height:1.25;letter-spacing:-.3px}.muted{color:var(--muted)}.subtext{font-size:12px;color:var(--muted);line-height:1.65}.lead{font-size:13px;line-height:1.75;color:var(--muted)}.section-title{font-size:18px;margin:27px 0 14px;display:flex;align-items:center;justify-content:space-between;gap:8px}.section-title .tiny{font-size:11px;color:var(--violet);font-family:'DM Sans',sans-serif;font-weight:700;cursor:pointer;border:0;background:none}.action-card{display:flex;align-items:center;gap:15px;text-align:left;width:100%;transition:transform .18s,box-shadow .18s}.action-card:hover{transform:translateY(-2px);box-shadow:0 16px 27px rgba(63,42,93,.09)}.action-ico{width:45px;height:45px;border-radius:13px;background:#f0eafd;color:#6f4dc2;display:grid;place-items:center;font-size:24px;flex:none}.action-ico.peach{background:#fff0e6;color:#cc8157}.action-card h3{font-family:'DM Sans',sans-serif;font-size:13px;margin-bottom:5px}.action-card .arrow{margin-left:auto;color:var(--violet);font-size:20px}.spaced{margin-top:20px}.date-list{display:grid;gap:10px}.date-row{border:1px solid var(--border);border-radius:14px;padding:13px 15px;display:flex;align-items:center;gap:14px;cursor:pointer;text-align:left;background:#fff;color:inherit;width:100%}.date-row:hover,.date-row.active{border-color:#c9b8f4;background:#faf7ff}.date-icon{background:#f3effb;color:var(--violet);display:grid;place-items:center;border-radius:11px;width:43px;height:43px;flex:none;font-size:16px;font-weight:800}.date-row .row-meta{flex:1;min-width:0}.date-row strong{display:block;font-size:12px}.date-row small{display:block;color:var(--muted);margin-top:4px;font-size:11px}.date-row .date-time{font-family:'Outfit',sans-serif;font-weight:700;font-size:14px;white-space:nowrap}.info-banner{background:#f1effc;border:1px solid #e9e3fa;color:#564683;border-radius:15px;padding:14px 16px;display:flex;align-items:flex-start;gap:12px;font-size:12px;line-height:1.6}.info-banner.warn{background:#fffaed;color:#97712a;border-color:#f4e7bf}.info-banner strong{color:inherit}.banner-icon{font-size:19px;line-height:1}.primary-btn,.secondary-btn,.ghost-btn{font-weight:800;font-size:12px;border-radius:12px;padding:12px 16px;display:inline-flex;align-items:center;gap:8px;justify-content:center;border:0}.primary-btn{background:var(--violet);color:#fff}.primary-btn:hover{background:var(--violet-deep)}.secondary-btn{background:#f0eafa;color:var(--violet-deep)}.secondary-btn:hover{background:#e4d9f8}.ghost-btn{background:#fff;border:1px solid var(--border);color:#695b80}.ghost-btn:hover{border-color:#baa9e2}.btn-row{display:flex;gap:10px;flex-wrap:wrap}.card-heading{font-size:22px;letter-spacing:-.5px}.overview-train{display:grid;place-items:center;text-align:center;padding:18px 10px}.overview-train .illustration{font-size:42px;margin:6px 0 12px;color:var(--violet)}.overview-train p{max-width:280px}.feature-controls{display:flex;gap:10px;flex-wrap:wrap;margin-top:24px}.feature-controls button{background:#ffffff1e;color:#fff;border:1px solid #ffffff56}.feature-controls button:hover{background:#ffffff37}.kicker{font-size:11px;font-weight:800;letter-spacing:1.3px;color:var(--violet);margin-bottom:10px;text-transform:uppercase}.page-lead{color:var(--muted);line-height:1.7;font-size:13px;max-width:680px;margin-bottom:22px}.status-card{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 18px;background:var(--paper);border:1px solid var(--border);border-radius:14px;margin-bottom:17px}.status-card small{display:block;color:var(--muted);margin-top:4px}.details-row{display:flex;justify-content:space-between;gap:20px;margin:12px 0;font-size:13px}.details-row strong{text-align:right}.lesson-list{margin-top:18px;display:grid;gap:8px}.lesson{border:1px solid var(--border);padding:12px 13px;border-radius:12px;display:grid;grid-template-columns:86px minmax(0,1fr) auto;gap:12px;align-items:center}.lesson .times{font-weight:800;color:#594a73;font-size:11px;white-space:nowrap}.lesson .subject{font-size:12px;font-weight:700}.lesson .small{display:block;color:#9d96a9;font-size:10px;margin-top:3px}.lesson.ignored{background:#f9f9fc;color:#a8a3b2}.lesson.ignored .subject,.lesson.ignored .times{color:#aaa5b4}.stack{display:grid;gap:17px}.two-cols{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:15px}.field{display:flex;flex-direction:column;gap:8px;font-weight:700;font-size:12px;color:#675b77}.field input,.field select{width:100%;border:1px solid #e5e1ee;background:#fff;border-radius:12px;padding:11px 13px;min-height:44px;color:var(--ink)}.field input::placeholder{color:#c1b9cf}.divider{height:1px;background:var(--border);margin:19px 0}.toggle-row{display:flex;justify-content:space-between;align-items:center;gap:15px;padding:13px 0;border-bottom:1px solid var(--border)}.toggle-row:last-child{border-bottom:0}.toggle-row strong{display:block;font-size:13px}.toggle-row small{display:block;margin-top:4px;color:var(--muted);font-size:11px}.switch{width:40px;height:24px;appearance:none;border-radius:15px;background:#ddd7e8;position:relative;flex:none;cursor:pointer;transition:background .2s}.switch:checked{background:var(--violet)}.switch:before{content:"";position:absolute;width:18px;height:18px;left:3px;top:3px;border-radius:50%;background:white;transition:transform .2s}.switch:checked:before{transform:translateX(16px)}.train-route{display:flex;align-items:center;gap:8px;justify-content:space-between;margin:18px 0 11px}.train-route>div{min-width:0;flex:1}.train-route>div:last-child{text-align:right}.train-route strong{font-family:'Outfit';font-size:27px;display:block}.train-route small{color:var(--muted);font-size:11px}.train-route .track{color:var(--violet);font-size:24px;display:flex;align-items:center;gap:5px}.train-route .track:before,.train-route .track:after{content:"";height:1px;width:22px;background:#dcccf2}.train-entry{padding:17px;border-radius:16px;border:1px solid var(--border);margin-top:11px;background:white}.train-entry.chosen{border:2px solid var(--violet);padding:16px;background:#fbf8ff}.train-entry-top{display:flex;justify-content:space-between;align-items:center;gap:8px}.train-entry-bottom{margin-top:12px;display:flex;justify-content:space-between;gap:9px;align-items:center}.train-entry-bottom small{color:var(--muted);font-size:11px}.small-btn{font-size:11px;padding:8px 11px;border-radius:9px;border:1px solid #e7dcf9;background:#eee7fb;color:#6e4ab7;font-weight:800}.small-btn.chosen{background:#dff6e9;border-color:#bce8d2;color:#20845d}.direction-pills{display:flex;gap:7px;margin-bottom:14px}.direction-pills button{border:1px solid var(--border);background:#fff;border-radius:11px;padding:10px 14px;color:var(--muted);font-size:11px;font-weight:800}.direction-pills button.active{background:var(--soft);border-color:#cabbef;color:var(--violet-deep)}.empty-state{display:grid;place-items:center;text-align:center;padding:26px 12px;gap:9px;background:#faf9fd;border:1px dashed #ddd3f2;border-radius:15px}.empty-state .big{font-size:34px}.empty-state h3{font-size:17px}.empty-state p{font-size:12px;color:var(--muted);max-width:360px;line-height:1.6}.mini-caption{color:var(--muted);font-size:10px;line-height:1.6;margin-top:9px}.link{color:var(--violet);border:0;background:none;padding:0;font-size:12px;font-weight:800;text-decoration:none;cursor:pointer}.link:hover{text-decoration:underline}.mini-list{display:grid;gap:12px}.mini-item{display:flex;justify-content:space-between;gap:12px;padding-bottom:11px;border-bottom:1px solid var(--border);font-size:12px}.mini-item:last-child{border-bottom:none}.mini-item strong{font-size:12px}.mini-item span{color:var(--muted);font-size:11px}.settings-callout{font-size:12px;line-height:1.6;background:#faf8ff;padding:16px;border-radius:12px;color:#6c5c82}.stats-row{display:flex;gap:16px;align-items:center;flex-wrap:wrap;margin-bottom:18px}.stats-row .stat{font-size:12px;color:var(--muted)}.stats-row .stat b{color:var(--ink);font-family:'Outfit';font-size:18px;margin-right:4px}.toast{position:fixed;bottom:27px;left:50%;transform:translate(-50%,30px);border-radius:14px;background:#272035;color:#fff;box-shadow:0 20px 45px #35224733;padding:12px 20px;font-size:12px;z-index:1000;opacity:0;pointer-events:none;transition:opacity .23s,transform .23s;max-width:calc(100vw - 32px);text-align:center}.toast.show{opacity:1;transform:translate(-50%,0)}.bottom-nav{display:none}.red-text{color:#bf6671}.note{font-size:11px;color:#a19cab;line-height:1.6}.callout-note{border-left:3px solid #ae93dd;padding:7px 13px;font-size:12px;color:#81758c;background:#fbfaff;border-radius:0 8px 8px 0}.hidden{display:none!important}
@media(max-width:1080px){.sidebar{padding-left:13px;padding-right:13px}.shell{grid-template-columns:218px minmax(0,1fr)}.main-content{padding-left:30px;padding-right:30px}.grid-two{grid-template-columns:1fr 1fr}.featured .feature-hours{font-size:36px}}
@media(max-width:840px){.shell{display:block}.sidebar{display:none}.main-content{padding:24px 18px 105px}.topbar{margin-bottom:23px}.bottom-nav{display:flex;position:fixed;z-index:100;bottom:0;left:0;right:0;padding:9px 10px calc(10px + env(safe-area-inset-bottom));background:#ffffffed;backdrop-filter:blur(15px);border-top:1px solid var(--border);justify-content:space-around}.bottom-link{border:0;background:none;border-radius:11px;color:#a096b1;display:grid;justify-items:center;gap:3px;font-size:10px;font-weight:800;min-width:64px;padding:5px 9px}.bottom-link span{font-size:24px;line-height:1.1;font-weight:400}.bottom-link.active{color:var(--violet-deep);background:#f2edfc}.app-footer{text-align:center;margin:38px 0 12px}}
@media(max-width:620px){h1{font-size:25px}.grid-two,.grid-three,.two-cols{grid-template-columns:1fr}.card{padding:19px}.featured{min-height:265px}.top-actions .privacy-indicator{display:none}.feature-hours{font-size:35px}.lesson{grid-template-columns:75px minmax(0,1fr);gap:9px}.lesson .pill{grid-column:2;justify-self:start}.status-card{flex-wrap:wrap}.btn-row>button{flex:1}.date-row{gap:10px;padding:11px}.feature-date{font-size:26px}.train-route strong{font-size:24px}.train-route .track:before,.train-route .track:after{width:11px}}
/* PDF updates: a persistent button and a review-before-replace dialog */
.top-import{white-space:nowrap;padding:11px 15px;box-shadow:0 5px 18px #7650bd24}
.empty-import{display:flex;align-items:flex-start;flex-direction:column;gap:18px;max-width:700px;padding:32px}
.empty-import .action-ico{font-size:27px}.empty-import h2{font-size:25px}
.empty-import p{color:var(--muted);line-height:1.8;max-width:500px}
.import-overlay[hidden]{display:none}
.import-overlay{position:fixed;inset:0;background:#1f1438aa;z-index:500;display:grid;place-items:center;padding:16px;overflow:auto;backdrop-filter:blur(5px)}
.dialog-open{overflow:hidden}
.import-dialog{background:#fff;border-radius:24px;width:min(620px,100%);max-height:min(90vh,850px);overflow-y:auto;padding:25px;box-shadow:0 28px 100px #180e3970}
.import-heading{display:flex;align-items:start;justify-content:space-between;gap:12px;margin-bottom:20px}
.import-heading h2{font-size:25px;margin-top:5px}
.import-file{display:flex;align-items:center;gap:12px;padding:15px;background:#f7f4ff;border-radius:15px}
.import-file-icon{font-size:28px;background:#e9e1ff;color:#6945b0;width:46px;height:46px;flex:none;display:grid;place-items:center;border-radius:12px}
.import-file span:last-child{min-width:0}.import-file strong{display:block;overflow-wrap:anywhere}.import-file small{display:block;color:var(--muted);margin-top:4px;font-size:12px}
.import-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px;margin:18px 0}
.import-stats>div{background:#f8f7fb;border:1px solid var(--border);border-radius:13px;text-align:center;padding:12px 6px}
.import-stats strong{display:block;font-family:Outfit,sans-serif;font-size:25px;color:#6749ad}
.import-stats small{font-size:10px;line-height:1.4;color:var(--muted);display:block;margin-top:3px}
.import-changes{font-size:12px;color:#645775;line-height:1.6;background:#f6f2ff;padding:12px 14px;border-radius:12px}
.import-section{margin:20px 0 10px}
.import-date-list{border:1px solid var(--border);border-radius:13px;overflow:hidden;max-height:200px;overflow-y:auto}
.import-date{padding:11px 14px;display:flex;justify-content:space-between;gap:10px;font-size:12px;border-bottom:1px solid var(--border)}
.import-date:last-child{border:0}.import-date strong{white-space:nowrap;color:#5a437e}
.import-warning{background:#fff9e8;border:1px solid #f3e3b8;padding:12px 14px;border-radius:12px;color:#81612e;font-size:12px;line-height:1.7;margin-top:17px}
.import-buttons{display:flex;gap:10px;justify-content:flex-end;margin-top:20px;flex-wrap:wrap}
@media(max-width:620px){.top-actions{gap:7px}.top-import{font-size:11px;padding:9px 11px}.top-actions .icon-button{padding:9px}.import-dialog{padding:18px;border-radius:19px}.import-stats{gap:5px}.import-stats strong{font-size:22px}.import-date{font-size:11px}.import-buttons{display:grid;grid-template-columns:1fr 1fr}.import-buttons button{padding:12px 8px}}
@media(max-width:380px){.top-import span{display:none}.top-import{font-size:18px}}

/* 0.1.5: render the decorative burst the same way on iOS, Android and desktop. */
@media(max-width:620px){.featured:after{width:180px;height:180px;right:-20px;top:-2px;opacity:.85}.featured .feature-date,.featured .feature-hours,.featured .feature-room,.featured .feature-controls{position:relative;z-index:1}}
/* Nearest manually saved journey countdown */
.next-trip-card{border:1px solid #ded3f5;background:linear-gradient(150deg,#ffffff,#f9f6ff);display:flex;flex-direction:column;gap:13px}
.next-trip-card .card-top{margin-bottom:0}
.next-trip-card .card-top h2{font-family:Outfit,sans-serif;font-size:26px;line-height:1.3;letter-spacing:-.7px}
.next-trip-date{font-size:14px;font-weight:600;color:#9584b6}
.next-trip-line{margin:0;color:#746783;font-size:12px;line-height:1.6}
.next-trip-counts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.next-trip-counts>div{background:#f0eafa;border-radius:15px;padding:15px;min-width:0}
.next-trip-counts small{display:block;color:#7659a2;font-size:11px;font-weight:700;margin-bottom:7px}
.next-trip-counts strong{display:block;color:#563a97;font-family:Outfit,sans-serif;font-size:23px;line-height:1.2;overflow-wrap:anywhere}
.next-trip-help{margin:0;color:#645674;font-size:12px;line-height:1.6}
.next-trip-card>.secondary-btn{align-self:flex-start}
.next-trip-card>.mini-caption{margin:0}
.next-trip-compact{margin-bottom:18px;gap:10px}
.next-trip-compact .next-trip-counts{max-width:490px}
@media(max-width:620px){.next-trip-card .card-top{align-items:start;gap:10px;flex-wrap:wrap}.next-trip-card .card-top h2{font-size:23px}.next-trip-counts strong{font-size:21px}.next-trip-counts>div{padding:12px}.next-trip-card{gap:13px}}
