:root{--paper:#f6f1e7;--paper-2:#efe7d5;--paper-3:#e7dcc4;--ink:#10333e;--ink-soft:#28505c;--ink-faint:#4a6a74;--ember:#d8542a;--ember-dark:#b23f1c;--teal:#0e7c7b;--blue:#2e6fa8;--green:#3e7a4e;--plum:#7a5c9e;--amber:#f3b73f;--board-bg:#0b2530;--board-fg:#f0b23e;--line-clr:#10333e;--serif:"Iowan Old Style", "Palatino Linotype", Palatino, "Book Antiqua", Georgia, serif;--sans:system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--mono:ui-monospace, "SF Mono", "Cascadia Mono", Menlo, Consolas, monospace;--maxw:1120px;--radius:4px}*{box-sizing:border-box}html{font-family:var(--sans);color:var(--ink);background:var(--paper);scroll-behavior:smooth;-webkit-text-size-adjust:100%}body{flex-direction:column;min-height:100vh;margin:0;font-size:1rem;line-height:1.55;display:flex}main{flex:1}.wrap{max-width:var(--maxw);margin:0 auto;padding:0 clamp(1rem,4vw,2rem)}.narrow{max-width:760px}h1,h2,h3,h4{font-family:var(--serif);letter-spacing:-.01em;margin:0 0 .5em;font-weight:600;line-height:1.12}h1{font-size:clamp(2.1rem,5vw,3.4rem)}h2{margin-top:2.2em;font-size:clamp(1.5rem,3.2vw,2.1rem)}h3{margin-top:1.8em;font-size:1.25rem}h4{margin-top:1.4em;font-size:1.05rem}p{max-width:68ch;margin:0 0 1em}a{color:var(--ink);text-underline-offset:.18em;text-decoration-thickness:1.5px}a:hover{color:var(--ember-dark)}.vessan{font-family:var(--serif);color:var(--ink-soft);letter-spacing:.01em;font-size:.82em;font-style:italic}.eyebrow{font-family:var(--mono);letter-spacing:.22em;text-transform:uppercase;color:var(--ember-dark);margin-bottom:.6em;font-size:.72rem}:focus-visible{outline:3px solid var(--ember);outline-offset:2px;border-radius:2px}.skip-link{background:var(--ink);color:var(--paper);z-index:100;font-family:var(--mono);padding:.6rem 1rem;position:absolute;top:0;left:-9999px}.skip-link:focus{top:.5rem;left:.5rem}.visually-hidden{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;position:absolute!important}.utility-strip{background:var(--ink);color:var(--paper-2);font-family:var(--mono);letter-spacing:.12em;font-size:.72rem}.utility-strip .wrap{justify-content:space-between;gap:1rem;padding-top:.35rem;padding-bottom:.35rem;display:flex}.utility-strip .vessan{color:var(--paper-3);font-family:var(--mono);font-style:normal}.site-header{background:var(--paper);border-bottom:2px solid var(--ink);z-index:50;position:sticky;top:0}.site-header .wrap{flex-wrap:wrap;align-items:center;gap:1.2rem;padding-top:.7rem;padding-bottom:.7rem;display:flex}.brand{align-items:center;gap:.7rem;margin-right:auto;text-decoration:none;display:flex}.brand-mark{flex:none;width:44px;height:44px}.brand-word{line-height:1.05}.brand-word .vessan-name{font-family:var(--serif);color:var(--ink);font-size:1.18rem;font-weight:700;display:block}.brand-word .eng-name{font-family:var(--mono);letter-spacing:.18em;text-transform:uppercase;color:var(--ink-faint);font-size:.62rem;display:block}.main-nav{flex-wrap:wrap;gap:.15rem;display:flex}.main-nav a{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--ink);border-radius:var(--radius);border:2px solid #0000;padding:.45rem .65rem;font-size:.74rem;text-decoration:none}.main-nav a:hover{border-color:var(--ink);color:var(--ink)}.main-nav a[aria-current=page]{background:var(--ink);color:var(--paper);border-color:var(--ink)}.site-footer{background:var(--ink);color:var(--paper-2);border-top:6px solid var(--ember);margin-top:4rem}.site-footer .wrap{grid-template-columns:1.4fr 1fr 1fr;gap:2rem;padding-top:2.4rem;padding-bottom:2.4rem;display:grid}.site-footer a{color:var(--paper)}.site-footer .vessan{color:var(--paper-3)}.footer-brand{align-items:flex-start;gap:.8rem;display:flex}.footer-mark{flex:none;width:52px;height:52px}.footer-brand .vessan-name{font-family:var(--serif);color:var(--paper);font-size:1.3rem;font-weight:700}.footer-brand .motto{font-family:var(--serif);color:var(--paper-3);margin:.3rem 0 0;font-style:italic}.site-footer h3{font-family:var(--mono);letter-spacing:.2em;text-transform:uppercase;color:var(--amber);margin:0 0 .8rem;font-size:.7rem}.site-footer ul{margin:0;padding:0;font-size:.9rem;list-style:none}.site-footer li{margin-bottom:.45rem}.footer-fine{font-family:var(--mono);letter-spacing:.06em;color:var(--paper-3);border-top:1px solid #ffffff2a;font-size:.68rem}.footer-fine .wrap{flex-wrap:wrap;gap:.4rem 1.6rem;padding-top:.9rem;padding-bottom:.9rem;display:flex}.btn{font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--ink);background:var(--paper);border:2px solid var(--ink);border-radius:var(--radius);cursor:pointer;padding:.6rem 1.1rem;font-size:.78rem;text-decoration:none;transition:background .12s,color .12s,transform .12s;display:inline-block}.btn:hover{background:var(--ink);color:var(--paper)}.btn:active{transform:translateY(1px)}.btn--primary{background:var(--ember);border-color:var(--ember);color:#fff}.btn--primary:hover{background:var(--ember-dark);border-color:var(--ember-dark)}.btn--ghost{background:0 0}.line-badge{min-width:2.1em;height:2.1em;font-family:var(--mono);color:#fff;letter-spacing:.02em;vertical-align:-.35em;border-radius:3px;justify-content:center;align-items:center;padding:0 .35em;font-size:.85em;font-weight:700;display:inline-flex}.line-badge--ferry{border-radius:50% 50% 4px 4px}.line-badge--cablecar{border-radius:4px 4px 50% 50%}.notice{border:2px solid var(--ink);border-left:8px solid var(--ember);background:var(--paper-2);border-radius:var(--radius);padding:1rem 1.2rem}.notice .eyebrow{margin-bottom:.3rem}.notice p{margin:.4rem 0 0}.notice .published{font-family:var(--mono);color:var(--ink-faint);letter-spacing:.08em;font-size:.7rem}.cards{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:1rem;margin:1.4rem 0;display:grid}.card{border:2px solid var(--ink);border-radius:var(--radius);background:var(--paper);color:var(--ink);padding:1.1rem 1.2rem;text-decoration:none;transition:transform .12s,box-shadow .12s;display:block;position:relative}.card:hover{box-shadow:4px 4px 0 var(--ink);color:var(--ink);transform:translate(-2px,-2px)}.card h3{margin:0 0 .3rem;font-size:1.15rem}.card p{color:var(--ink-soft);margin:0;font-size:.92rem}.card .card-line{background:var(--ember);border-radius:2px;width:44px;height:5px;margin-bottom:.7rem}table.tt{border-collapse:collapse;width:100%;margin:.6rem 0 1.4rem;font-size:.92rem}.tt th,.tt td{text-align:left;vertical-align:top;border-bottom:1px solid #10333e33;padding:.42rem .6rem}.tt thead th{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;border-bottom:2px solid var(--ink);color:var(--ink-soft);font-size:.68rem}.tt td.num,.tt th.num{font-family:var(--mono);font-variant-numeric:tabular-nums}.tt tbody tr:hover td{background:#10333e0d}.tt .stop-name{font-weight:600}.tt .vessan{display:block}.field{margin-bottom:1.1rem}.field label{margin-bottom:.3rem;font-size:.9rem;font-weight:600;display:block}.field label .vessan{margin-left:.3rem;font-weight:400}.field input[type=text],.field input[type=email],.field input[type=number],.field input[type=date],.field select,.field textarea{width:100%;font:inherit;color:var(--ink);border:2px solid var(--ink);border-radius:var(--radius);background:#fff;padding:.55rem .7rem}.field textarea{resize:vertical;min-height:7rem}.field .hint{color:var(--ink-faint);margin-top:.25rem;font-size:.8rem}.field .error{color:#a3331b;margin-top:.3rem;font-size:.82rem;font-weight:600;display:none}.field[data-invalid] input,.field[data-invalid] select,.field[data-invalid] textarea{background:#fdf1ee;border-color:#a3331b}.field[data-invalid] .error{display:block}.check{align-items:flex-start;gap:.6rem;font-size:.9rem;display:flex}.check input{width:1.1rem;height:1.1rem;accent-color:var(--ember);margin-top:.2rem}.form-success{border:2px solid var(--green);border-radius:var(--radius);background:#eef5ee;padding:1.4rem 1.5rem}.form-success h3{color:var(--green);margin-top:0}.board-shell{background:var(--board-bg);border:2px solid var(--ink);border-radius:8px;overflow:hidden;box-shadow:6px 6px #10333e22}.board-toolbar{background:#0e2d3a;border-bottom:1px solid #ffffff18;flex-wrap:wrap;align-items:center;gap:.8rem;padding:.7rem 1rem;display:flex}.board-toolbar label{font-family:var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--amber);font-size:.68rem}.board-toolbar select{font-family:var(--mono);background:var(--board-bg);color:var(--paper);border:1px solid #fff4;border-radius:3px;padding:.35rem .5rem;font-size:.85rem}canvas.board{width:100%;display:block}.board-live{color:var(--ink-soft);margin-top:.5rem;font-size:.85rem}.map-shell{border:2px solid var(--ink);background:#e8e2d2;border-radius:8px;overflow:hidden}.map-shell svg{width:100%;height:auto;display:block}.sysmap .water{fill:#9fc4cd}.sysmap .land{fill:#ece5d1}.sysmap .rimland{fill:#ddd3b8}.sysmap .graticule{stroke:#fff5;stroke-width:1px}.sysmap .route{fill:none;stroke-width:7px;stroke-linecap:round;stroke-linejoin:round;cursor:pointer;transition:opacity .15s,stroke-width .15s}.sysmap .route.is-active{stroke-width:9px}.sysmap .route-hit{fill:none;stroke:#0000;stroke-width:22px;cursor:pointer}.sysmap .route-hit:focus-visible,.sysmap .station-dot:focus-visible{outline:none}.sysmap .route--ferry{stroke-dasharray:1 14;stroke-linecap:round;stroke-width:6px}.sysmap .route--cablecar{stroke-dasharray:10 7}.sysmap .station-dot{cursor:pointer}.sysmap .station-dot circle.core{fill:#fff;stroke:var(--ink);stroke-width:3px;transition:r .12s}.sysmap .station-dot:focus-visible circle.core,.sysmap .station-dot:hover circle.core{stroke:var(--ember)}.sysmap .station-dot text{font-family:var(--mono);fill:var(--ink);paint-order:stroke;stroke:#f6f1e7eb;stroke-width:3.5px;stroke-linejoin:round;pointer-events:none;font-size:15px}.sysmap .station-dot .vessan-label{font-size:15px;font-weight:600}.sysmap .station-dot .eng-label{fill:var(--ink-soft);font-size:11px}.sysmap.is-dimmed .route,.sysmap.is-dimmed .station-dot,.sysmap.is-dimmed .interchange{opacity:.16}.sysmap.is-dimmed .route.is-active,.sysmap.is-dimmed .station-dot.is-on-line,.sysmap.is-dimmed .interchange.is-on-line{opacity:1}.sysmap .station-dot.is-selected circle.core{stroke:var(--ember);fill:var(--ember)}.map-legend{flex-wrap:wrap;gap:.5rem;margin:1rem 0;display:flex}.map-legend button{font-family:var(--mono);letter-spacing:.06em;border:2px solid var(--ink);background:var(--paper);color:var(--ink);cursor:pointer;border-radius:3px;align-items:center;gap:.5rem;padding:.35rem .7rem;font-size:.75rem;display:inline-flex}.map-legend button:hover,.map-legend button[aria-pressed=true]{background:var(--ink);color:var(--paper)}.map-legend .swatch{border-radius:2px;width:1.6em;height:.5em;display:inline-block}.station-panel{border:2px solid var(--ink);border-radius:var(--radius);background:var(--paper-2);min-height:7rem;padding:1.1rem 1.2rem;scroll-margin-top:90px}.station-panel h3{margin-top:0}.station-panel .dep-row{border-bottom:1px dashed #10333e2b;align-items:baseline;gap:.7rem;padding:.3rem 0;font-size:.92rem;display:flex}.station-panel .dep-row .num{font-family:var(--mono);margin-left:auto}.receipt-slot{border:2px solid var(--ink);background:var(--ink);border-radius:6px;max-width:380px;margin-top:1.2rem;padding:10px 14px 4px;position:relative;overflow:hidden}.receipt-slot:after{content:"";background:repeating-linear-gradient(90deg, var(--ink) 0 6px, transparent 6px 12px);height:10px;position:absolute;bottom:0;left:0;right:0}.receipt{font-family:var(--mono);color:#20303a;clip-path:inset(100% 0 0);background:#fffdf6;padding:1rem 1.1rem 1.4rem;font-size:.78rem;line-height:1.5;transition:clip-path 1.4s steps(28,end)}.receipt.is-printed{clip-path:inset(0)}.receipt .r-center{text-align:center}.receipt .r-mark{width:40px;height:40px;margin:0 auto 4px}.receipt .r-dash{border-top:1px dashed #20303a66;margin:.5rem 0}.receipt .r-row{justify-content:space-between;gap:.8rem;display:flex}.receipt .r-big{font-size:1.05rem;font-weight:700}.receipt svg{display:block}.ticket-print{display:none}@media screen{.ticket-print.is-issued{border:3px solid var(--ink);background:#fff;border-radius:10px;max-width:640px;margin-top:2rem;padding:1.6rem 1.8rem;display:block}.ticket-print .tp-head{border-bottom:3px solid var(--ink);align-items:center;gap:.9rem;padding-bottom:1rem;display:flex}.ticket-print .tp-head img,.ticket-print .tp-head svg{width:52px;height:52px}.ticket-print .tp-route{font-family:var(--serif);align-items:center;gap:1rem;margin:1.2rem 0;font-size:1.5rem;font-weight:600;display:flex}.ticket-print .tp-route .arrow{font-family:var(--mono)}.ticket-print .tp-grid{grid-template-columns:repeat(3,1fr);gap:.8rem 1.4rem;font-size:.9rem;display:grid}.ticket-print .tp-grid dt{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--ink-faint);font-size:.62rem}.ticket-print .tp-grid dd{margin:.15rem 0 0;font-weight:600}.ticket-print .tp-qr{border-top:2px dashed var(--ink);align-items:center;gap:1.2rem;margin-top:1.2rem;padding-top:1rem;display:flex}.ticket-print .tp-fine{color:var(--ink-faint);margin-top:1rem;font-size:.72rem}}.grid-2{grid-template-columns:1fr 1fr;align-items:start;gap:2rem;display:grid}.grid-2--wide{grid-template-columns:1.5fr 1fr}@media (width<=760px){.grid-2,.grid-2--wide,.site-footer .wrap{grid-template-columns:1fr}.brand-mark{width:38px;height:38px}}.rule{border:none;border-top:2px solid var(--ink);margin:2.2rem 0}.small{font-size:.85rem}.fine{color:var(--ink-faint);font-size:.78rem}.mono{font-family:var(--mono)}.tag{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;border:1.5px solid var(--ink);border-radius:3px;padding:.15em .5em;font-size:.68rem;display:inline-block}.timeline{margin:1.4rem 0;padding:0;list-style:none}.timeline li{border-bottom:1px dashed #10333e30;grid-template-columns:5.5rem 1fr;gap:1.2rem;padding:.7rem 0;display:grid}.timeline .year{font-family:var(--mono);color:var(--ember-dark);font-weight:700}.hero{background:var(--ink);color:var(--paper);border-bottom:6px solid var(--ember);overflow:hidden}.hero .wrap{padding-top:clamp(2rem,6vw,4rem);padding-bottom:0}.hero h1{color:var(--paper);max-width:16ch}.hero .lede{color:var(--paper-2);max-width:52ch;font-size:1.12rem}.hero .vessan-lede{font-family:var(--serif);color:var(--amber);font-size:1rem;font-style:italic}.hero-art{margin-top:2rem}.hero-art svg{width:100%;height:auto;display:block}.offroute{text-align:center;padding:3rem 0}.offroute h1{font-size:clamp(3rem,10vw,6rem)}.offroute .vessan{font-size:1.2rem}.print-only{display:none}@media print{.site-header,.site-footer,.utility-strip,.skip-link,.no-print,.board-toolbar,canvas.board,.map-legend,.station-panel,.notice .no-print{display:none!important}html{background:#fff}body{color:#000;font-size:11pt}.wrap{max-width:none;padding:0}a{color:#000;text-decoration:none}.print-only{display:block}.tt-section{page-break-inside:avoid}body[data-print-line=M1] .tt-section:not(.tt-section--M1),body[data-print-line=M2] .tt-section:not(.tt-section--M2),body[data-print-line=C1] .tt-section:not(.tt-section--C1),body[data-print-line=F1] .tt-section:not(.tt-section--F1),body[data-print-line=F2] .tt-section:not(.tt-section--F2){display:none!important}.tt-print-head{border-bottom:3pt solid #000;align-items:center;gap:10pt;margin-bottom:10pt;padding-bottom:8pt;display:flex}.tt-print-head svg{width:34pt;height:34pt}.tt th,.tt td{padding:3pt 5pt;font-size:9.5pt}.tt thead th{color:#000;border-bottom:1.5pt solid #000}.tt td{border-bottom:.5pt solid #999}body.print-ticket main *{visibility:hidden}body.print-ticket .ticket-print,body.print-ticket .ticket-print *{visibility:visible}body.print-ticket .ticket-print{background:#fff;border:none;max-width:none;padding:24pt;position:absolute;inset:0;display:block!important}.ticket-print .tp-head{border-bottom:3pt solid #000;align-items:center;gap:12pt;padding-bottom:10pt;display:flex}.ticket-print .tp-head svg{width:44pt;height:44pt}.ticket-print h2{margin:0;font-size:20pt}.ticket-print .tp-route{font-size:22pt;font-family:var(--serif);align-items:baseline;gap:14pt;margin:18pt 0;display:flex}.ticket-print .tp-grid{grid-template-columns:repeat(3,1fr);gap:8pt 18pt;font-size:10pt;display:grid}.ticket-print .tp-grid dt{font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;color:#444;font-size:7pt}.ticket-print .tp-grid dd{margin:2pt 0 0;font-weight:600}.ticket-print .tp-qr{border-top:1.5pt dashed #000;align-items:center;gap:16pt;margin-top:16pt;padding-top:12pt;display:flex}.ticket-print .tp-fine{color:#444;margin-top:12pt;font-size:7.5pt}.ticket-print svg.tp-mark{width:40pt;height:40pt}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.receipt{clip-path:none;transition:none}}
