:root{color-scheme:light;--ink:#12343b;--muted:#5d7478;--sea:#087e8b;--sea-dark:#073b4c;--foam:#f4fbfa;--coral:#ff6b5f;--line:rgba(7, 59, 76, .13);--shadow:0 18px 50px rgba(7, 59, 76, .14)}*{box-sizing:border-box}body,html{height:100%;margin:0}body{overflow:hidden;color:var(--ink);background:var(--foam);font-family:system-ui,-apple-system,"Noto Sans TC","Microsoft JhengHei",sans-serif}header{position:fixed;z-index:1000;top:16px;left:16px;width:min(470px,calc(100vw - 32px));padding:12px 14px 12px 18px;border:1px solid rgba(255,255,255,.7);border-radius:20px;background:rgba(255,255,255,.9);box-shadow:var(--shadow);backdrop-filter:blur(14px)}.brand{min-width:0}.fleet-panel,.fleet-panel #fleet,.panel,.panel .list{scrollbar-width:none;-ms-overflow-style:none}.fleet-panel #fleet::-webkit-scrollbar,.fleet-panel::-webkit-scrollbar,.panel .list::-webkit-scrollbar,.panel::-webkit-scrollbar{display:none;width:0;height:0}.site-subtitle-row{display:flex;align-items:baseline;gap:10px}.site-subtitle-row .subtitle{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.site-guide-link{flex-shrink:0;color:var(--sea-dark);font-size:11px;text-underline-offset:3px}.changelog-link{flex-shrink:0;padding:2px 7px;border:1px solid rgba(8,126,139,.2);border-radius:99px;background:#edfafa;color:var(--sea-dark);font:inherit;font-size:10px;font-weight:700;cursor:pointer}.changelog-link:hover{border-color:var(--sea);background:#dff5f4}.changelog-link:focus-visible{outline:2px solid var(--sea);outline-offset:2px}h1{margin:0;font-size:clamp(18px, 2vw, 24px);letter-spacing:.04em}.subtitle{margin-top:2px;color:var(--muted);font-size:12px}.status{display:flex;align-items:center;gap:9px;color:var(--muted);white-space:nowrap;font-size:12px}.update-status{position:fixed;z-index:950;top:16px;left:50%;display:flex;align-items:center;gap:8px;min-height:34px;padding:7px 13px;border:1px solid rgba(255,255,255,.82);border-radius:99px;background:rgba(255,255,255,.93);box-shadow:0 7px 20px rgba(7,59,76,.16);backdrop-filter:blur(12px);transform:translateX(-50%)}.update-countdown{padding-left:8px;border-left:1px solid var(--line);color:var(--sea-dark);font-weight:800;font-variant-numeric:tabular-nums}.update-status{max-width:calc(100vw - 32px);flex-wrap:wrap}#statusText{white-space:normal;overflow-wrap:anywhere}.pulse{flex-shrink:0}.force-refresh{padding:5px 9px;border:1px solid var(--line);border-radius:99px;background:#edfafa;color:var(--sea-dark);font:inherit;font-weight:750;cursor:pointer}.force-refresh:hover{background:#d7f3f2}.force-refresh:focus-visible{outline:2px solid var(--sea);outline-offset:2px}.force-refresh:disabled{opacity:.6;cursor:wait}.legend,.port-shortcuts{display:flex;flex-wrap:wrap;gap:5px;margin-top:9px}.port-shortcuts button{padding:5px 8px;border:1px solid var(--line);border-radius:7px;background:#fff;color:var(--sea-dark);font:inherit;font-size:11px;font-weight:750;cursor:pointer}.port-shortcuts button:hover{border-color:var(--sea);background:#edfafa}.port-shortcuts button.active{border-color:var(--sea);background:var(--sea);color:#fff;box-shadow:0 3px 8px rgba(8,126,139,.22)}.port-shortcuts button.development-region{border-color:#d4dde0;background:#eef2f3;color:#829196}.port-shortcuts button.development-region:hover{border-color:#c1cdd1;background:#e5ebed;color:#66787d}.development-backdrop{position:fixed;z-index:1300;inset:0;display:grid;place-items:center;padding:20px;background:rgba(3,25,34,.42);opacity:0;visibility:hidden;pointer-events:none;transition:opacity .2s ease,visibility .2s ease}.development-backdrop.open{opacity:1;visibility:visible;pointer-events:auto}.development-card{position:relative;width:min(330px,100%);padding:28px 24px 24px;border:1px solid rgba(255,255,255,.9);border-radius:25px;background:#f8fbfc;box-shadow:0 24px 80px rgba(0,24,36,.32);text-align:center;transform:translateY(12px) scale(.97);transition:transform .22s ease}.development-backdrop.open .development-card{transform:translateY(0) scale(1)}.development-icon{display:grid;place-items:center;width:48px;height:48px;margin:0 auto 12px;border-radius:16px;background:#e8edef;color:#6c7c81;font-size:21px}.development-card h2{margin:0;color:var(--sea-dark);font-size:20px}.development-card p{margin:9px 0 18px;color:var(--muted);font-size:14px}.development-close{position:absolute;top:10px;right:12px;width:30px;height:30px;border:0;border-radius:50%;background:0 0;color:var(--muted);font-size:22px;cursor:pointer}.development-threads{display:flex;align-items:center;justify-content:center;gap:8px;min-height:43px;border-radius:13px;background:var(--sea);color:#fff;font-size:14px;font-weight:800;text-decoration:none}.feedback-toggle{display:none}.feedback-backdrop{position:fixed;z-index:1450;inset:0;display:grid;place-items:center;padding:20px;background:rgba(3,25,34,.45);opacity:0;visibility:hidden;pointer-events:none;transition:opacity .22s ease,visibility .22s ease}.feedback-backdrop.open{opacity:1;visibility:visible;pointer-events:auto}.feedback-card{width:min(430px,100%);max-height:min(720px,90svh);overflow:auto;padding:22px;border:1px solid rgba(255,255,255,.9);border-radius:26px;background:#f8fbfc;box-shadow:0 28px 90px rgba(0,24,36,.34);transform:translateY(16px) scale(.97);transition:transform .25s cubic-bezier(.2,.8,.2,1)}.feedback-backdrop.open .feedback-card{transform:translateY(0) scale(1)}.feedback-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:18px}.feedback-head h2{margin:0;color:var(--sea-dark);font-size:20px}.feedback-head p{margin:5px 0 0;color:var(--muted);font-size:12px}.feedback-close{flex:0 0 34px;width:34px;height:34px;border:0;border-radius:50%;background:rgba(7,59,76,.08);color:var(--sea-dark);font-size:21px;cursor:pointer}.feedback-types{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:0 0 15px;padding:0;border:0}.feedback-types legend{grid-column:1/-1;margin-bottom:7px;color:var(--sea-dark);font-size:12px;font-weight:800}.feedback-types label{position:relative;cursor:pointer}.feedback-types input{position:absolute;opacity:0;pointer-events:none}.feedback-types span{display:grid;place-items:center;min-height:42px;border:1px solid var(--line);border-radius:11px;background:#fff;color:var(--muted);font-size:13px;font-weight:800}.feedback-types input:checked+span{border-color:var(--sea);background:#e7f7f6;color:var(--sea-dark);box-shadow:inset 0 0 0 1px var(--sea)}.feedback-types input:focus-visible+span{outline:2px solid var(--sea);outline-offset:2px}.feedback-field{display:grid;gap:7px;margin-top:13px;color:var(--sea-dark);font-size:12px;font-weight:800}.feedback-field-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}.feedback-field small{color:var(--muted);font-weight:600}.feedback-field input,.feedback-field textarea{width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:12px;background:#fff;color:var(--ink);font:inherit;font-size:14px;font-weight:500}.feedback-field textarea{min-height:125px;padding:12px;resize:vertical;line-height:1.5}.feedback-field input{min-height:42px;padding:9px 11px}.feedback-field input:focus,.feedback-field textarea:focus{outline:2px solid rgba(8,126,139,.24);border-color:var(--sea)}.feedback-trap{position:absolute!important;left:-10000px!important;width:1px!important;height:1px!important;opacity:0!important}.feedback-status{min-height:19px;margin:11px 0 6px;color:var(--muted);font-size:12px}.feedback-status.error{color:#b42318}.feedback-status.success{color:#087e65}.feedback-submit{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;min-height:44px;border:0;border-radius:12px;background:var(--sea);color:#fff;font:inherit;font-size:14px;font-weight:850;cursor:pointer}.feedback-submit:disabled{opacity:.6;cursor:wait}@media (max-width:480px){.feedback-field-row{grid-template-columns:1fr;gap:0}}.tutorial-backdrop{position:fixed;z-index:1500;inset:0;display:grid;place-items:center;padding:18px;background:rgba(3,25,34,.5);opacity:0;visibility:hidden;pointer-events:none;transition:opacity .22s ease,visibility .22s ease}.tutorial-backdrop.open{opacity:1;visibility:visible;pointer-events:auto}.tutorial-card{width:min(450px,100%);max-height:min(760px,92svh);overflow:auto;padding:22px;border:1px solid rgba(255,255,255,.9);border-radius:26px;background:#f8fbfc;box-shadow:0 28px 90px rgba(0,24,36,.36);transform:translateY(18px) scale(.97);transition:transform .25s cubic-bezier(.2,.8,.2,1)}.tutorial-backdrop.open .tutorial-card{transform:translateY(0) scale(1)}.tutorial-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:16px}.tutorial-head span{color:var(--sea);font-size:11px;font-weight:900}.tutorial-head h2{margin:4px 0 0;color:var(--sea-dark);font-size:21px}.tutorial-close{flex:0 0 34px;width:34px;height:34px;border:0;border-radius:50%;background:rgba(7,59,76,.08);color:var(--sea-dark);font-size:21px;cursor:pointer}.tutorial-pages{min-height:290px}.tutorial-page>p{margin:0 0 14px;color:var(--muted);font-size:13px;line-height:1.6}.tutorial-tool-list{display:grid;grid-template-columns:1fr 1fr;gap:9px}.tutorial-tool-list>div{display:flex;align-items:center;gap:10px;min-height:68px;padding:10px;border:1px solid rgba(7,59,76,.1);border-radius:12px;background:#fff}.tutorial-tool-list>div>i{display:grid;flex:0 0 38px;place-items:center;width:38px;height:38px;border-radius:12px;background:#e7f7f6;color:var(--sea-dark);font-size:16px}.tutorial-tool-list small,.tutorial-tool-list strong{display:block}.tutorial-tool-list strong{color:var(--sea-dark);font-size:13px}.tutorial-tool-list small{margin-top:3px;color:var(--muted);font-size:10px;line-height:1.35}.tutorial-tab-list{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;padding:8px;border:1px solid rgba(7,59,76,.1);border-radius:15px;background:#fff}.tutorial-tab-list div{display:grid;place-items:center;gap:5px;min-width:0;padding:9px 2px;color:var(--sea-dark);font-size:10px;font-weight:800}.tutorial-tab-list i{font-size:17px}.tutorial-note{margin-top:18px!important;padding:13px;border-left:3px solid var(--sea);background:#edfafa;color:var(--sea-dark)!important}.tutorial-sponsor-page{text-align:center}.tutorial-sponsor-icon{display:grid;place-items:center;width:58px;height:58px;margin:8px auto 13px;border-radius:18px;background:#feecef;color:#e11d48;font-size:23px}.tutorial-sponsor-page h3{margin:0 0 8px;color:var(--sea-dark);font-size:21px}.tutorial-sponsor-page p{max-width:360px;margin:0 auto 19px}.tutorial-sponsor-page button{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:43px;padding:8px 16px;border:0;border-radius:12px;background:#e11d48;color:#fff;font:inherit;font-size:13px;font-weight:850;cursor:pointer}.tutorial-dismiss{display:flex!important;align-items:center;justify-content:flex-start!important;width:100%;box-sizing:border-box;gap:9px;margin:3px 0 15px;padding:9px 10px;border:1px solid rgba(7,59,76,.1);border-radius:11px;background:#fff;color:var(--sea-dark);font-size:12px;font-weight:750;cursor:pointer}.tutorial-dismiss input{flex:0 0 18px;width:18px;height:18px;margin:0;accent-color:var(--sea)}.tutorial-dismiss span{flex:0 0 auto;margin:0}.tutorial-actions{display:grid;grid-template-columns:105px 1fr 105px;align-items:center;gap:10px}.tutorial-actions>button{display:flex;align-items:center;justify-content:center;gap:7px;min-height:41px;padding:7px 10px;border:1px solid var(--line);border-radius:11px;background:#fff;color:var(--sea-dark);font:inherit;font-size:12px;font-weight:800;cursor:pointer}.tutorial-actions>button.primary{border-color:var(--sea);background:var(--sea);color:#fff}.tutorial-actions>button:disabled{opacity:.35;cursor:default}.tutorial-dots{display:flex;justify-content:center;gap:6px}.tutorial-dots i{width:6px;height:6px;border-radius:50%;background:#c7d3d6}.tutorial-dots i.active{width:17px;border-radius:99px;background:var(--sea)}@media (max-width:480px){.tutorial-card{padding:19px}.tutorial-pages{min-height:290px}.tutorial-tool-list{grid-template-columns:1fr;gap:7px}.tutorial-tool-list>div{min-height:54px}.tutorial-actions{grid-template-columns:94px 1fr 94px}}.changelog-backdrop{position:fixed;z-index:1400;inset:0;display:grid;place-items:center;padding:20px;background:rgba(3,25,34,.42);opacity:0;visibility:hidden;pointer-events:none;transition:opacity .22s ease,visibility .22s ease}.changelog-backdrop.open{opacity:1;visibility:visible;pointer-events:auto}.changelog-card{width:min(520px,100%);max-height:min(680px,88svh);overflow:auto;padding:22px;border:1px solid rgba(255,255,255,.9);border-radius:26px;background:rgba(248,252,252,.98);box-shadow:0 28px 90px rgba(0,24,36,.34);scrollbar-width:none;transform:translateY(16px) scale(.97);transition:transform .25s cubic-bezier(.2,.8,.2,1)}.changelog-card::-webkit-scrollbar{display:none}.changelog-backdrop.open .changelog-card{transform:translateY(0) scale(1)}.changelog-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:18px}.changelog-head h2{margin:0;color:var(--sea-dark);font-size:23px}.changelog-close{flex:0 0 34px;width:34px;height:34px;border:0;border-radius:50%;background:rgba(7,59,76,.08);color:var(--sea-dark);font-size:21px;cursor:pointer}.changelog-list{position:relative;display:grid;gap:12px}.changelog-entry{display:grid;grid-template-columns:82px 1fr;gap:13px;padding:15px;border:1px solid rgba(7,59,76,.1);border-radius:18px;background:#fff}.changelog-entry.latest{border-color:rgba(8,126,139,.3);background:linear-gradient(135deg,#f0fbfa,#fff)}.changelog-entry time{color:var(--sea);font-size:11px;font-weight:850}.changelog-entry h3{margin:0 0 7px;color:var(--sea-dark);font-size:14px}.changelog-entry ul{margin:0;padding-left:17px;color:var(--muted);font-size:12px;line-height:1.65}.admin-toggle{margin-top:8px;padding:5px 8px;border:1px solid #b9cbd0;border-radius:7px;background:#fff;color:var(--sea-dark);font:inherit;font-size:11px;font-weight:750;cursor:pointer}.admin-toggle.active{border-color:#7c3aed;background:#f3e8ff;color:#6d28d9}.fleet-close,.mobile-fleet-toggle,.mobile-region-toggle,.mobile-sheet-handle{display:none}.sponsor-toggle{display:none!important}.sponsor-toggle:hover{transform:translateY(-2px);background:#fff}.more-links-toggle{display:none!important}.sponsor-backdrop{position:fixed;inset:0;z-index:1200;display:grid;place-items:center;padding:20px;background:rgba(3,25,34,.38);opacity:0;visibility:hidden;pointer-events:none;transition:opacity .24s ease,visibility .24s ease}.sponsor-backdrop.open{opacity:1;visibility:visible;pointer-events:auto}.sponsor-card{width:min(420px,100%);max-height:min(680px,90svh);overflow:auto;padding:22px;border:1px solid rgba(255,255,255,.82);border-radius:28px;background:rgba(248,251,252,.96);box-shadow:0 28px 90px rgba(0,24,36,.32);scrollbar-width:none;-ms-overflow-style:none;transform:translateY(18px) scale(.96);transition:transform .32s cubic-bezier(.2,.8,.2,1)}.sponsor-card::-webkit-scrollbar{display:none;width:0;height:0}.sponsor-backdrop.open .sponsor-card{transform:translateY(0) scale(1)}.sponsor-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}.sponsor-head h2{margin:0;color:var(--sea-dark);font-size:20px}.sponsor-close{width:34px;height:34px;border:0;border-radius:50%;background:rgba(7,59,76,.08);color:var(--sea-dark);font-size:20px;cursor:pointer}.sponsor-intro{margin:-2px 0 16px;padding:14px 15px;border:1px solid rgba(8,126,139,.16);border-radius:17px;background:linear-gradient(135deg,#effafa,#f8fcfc);color:var(--ink);font-size:13px;line-height:1.55}.sponsor-intro strong{display:block;margin-bottom:6px;color:var(--sea-dark);font-size:16px}.sponsor-intro p{margin:5px 0}.sponsor-intro b{display:block;margin-top:8px;color:var(--sea);font-size:14px}.sponsor-list{display:grid;gap:10px}.sponsor-item{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 15px;border:1px solid rgba(7,59,76,.1);border-radius:18px;background:#fff;color:var(--ink);text-decoration:none;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}.sponsor-item:hover{transform:translateY(-2px);border-color:rgba(8,126,139,.45);box-shadow:0 8px 20px rgba(7,59,76,.1)}.sponsor-item strong{display:block;font-size:14px}.sponsor-item small{display:block;margin-top:3px;color:var(--muted);font-size:12px}.sponsor-price{color:var(--sea);font-size:16px;font-weight:900;white-space:nowrap}.mobile-tabbar{display:none}.location-toggle,.traffic-toggle{display:none}.mobile-tabbar i,.service-rail i{margin-right:3px;font-size:14px}.service-rail{display:none!important}.service-rail a,.service-rail button{min-height:34px;padding:7px 12px;border:0;border-radius:12px;background:rgba(255,255,255,.72);color:var(--sea-dark);font:inherit;font-size:12px;font-weight:800;text-decoration:none;cursor:pointer}.service-rail .active,.service-rail a:hover,.service-rail button:hover{background:var(--sea);color:#fff}.related-links{position:fixed;z-index:1200;top:50%;left:50%;display:grid;width:min(340px,calc(100vw - 40px));gap:9px;padding:18px;border:1px solid rgba(255,255,255,.88);border-radius:24px;background:rgba(248,251,252,.98);box-shadow:0 24px 70px rgba(0,24,36,.3);opacity:0;visibility:hidden;pointer-events:none;transform:translate(-50%,-46%) scale(.97);transition:opacity .22s ease,transform .22s ease,visibility .22s ease}.related-links.links-open{opacity:1;visibility:visible;pointer-events:auto;transform:translate(-50%,-50%) scale(1)}.related-links-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:2px}.related-links-head h2{margin:0;color:var(--sea-dark);font-size:18px}.related-links-head button{width:30px;height:30px;border:0;border-radius:50%;background:rgba(7,59,76,.07);color:var(--muted);font-size:22px;cursor:pointer}.related-link-card{display:grid;grid-template-columns:52px 1fr auto;align-items:center;gap:12px;min-height:70px;padding:9px 11px;border:1px solid rgba(7,59,76,.1);border-radius:16px;background:#fff;color:var(--sea-dark);text-decoration:none;transition:transform .2s ease,border-color .2s ease}.related-link-card:hover{transform:translateY(-2px);border-color:rgba(8,126,139,.45)}.related-link-icon{display:grid;place-items:center;width:52px;height:52px;overflow:hidden;border:2px solid #159ab1;border-radius:15px;color:#fff;font-size:20px}.related-link-icon img{width:100%;height:100%;border-radius:inherit;object-fit:cover}.related-link-main .related-link-icon{background:#087e8b}.related-link-sea .related-link-icon{background:#2563eb}.related-link-ferry .related-link-icon{background:#e11d48}.related-link-card small,.related-link-card strong{display:block}.related-link-card strong{font-size:14px}.related-link-card small{margin-top:2px;color:var(--muted);font-size:11px}.related-link-card>i{color:#91a4a8;font-size:12px}.legend{gap:8px;color:var(--muted);font-size:10px}.legend span{display:inline-flex;align-items:center;gap:4px}.legend i{width:7px;height:7px;border-radius:50%;background:var(--legend-color)}.pulse{width:10px;height:10px;border-radius:50%;background:#27ae60;box-shadow:0 0 0 5px rgba(39,174,96,.14)}.pulse.loading{background:#f2a900;box-shadow:0 0 0 5px rgba(242,169,0,.14)}.pulse.error{background:var(--coral);box-shadow:0 0 0 5px rgba(255,107,95,.14)}#map{height:100%;width:100%;background:#d9eef0}.follow-view{position:fixed;z-index:1500;inset:0;visibility:hidden;pointer-events:none;background:#173f50;opacity:0}.follow-view.open{visibility:visible;pointer-events:auto;opacity:1}.follow-map{position:absolute;inset:0}.follow-toolbar{position:absolute;z-index:1000;top:max(14px,env(safe-area-inset-top));left:14px;display:flex;align-items:center;gap:12px;width:min(420px,calc(100% - 28px));padding:12px;border:1px solid #d9e9ed;border-radius:18px;background:#f4fafc;box-shadow:0 8px 28px #00192330}.follow-toolbar button{flex:0 0 38px;height:38px;border:0;border-radius:12px;background:var(--sea);color:#fff;cursor:pointer}.follow-heading{min-width:0}.follow-heading strong{display:block;font-size:16px;color:var(--sea-dark)}.follow-heading span{display:block;margin-top:3px;font-size:12px}.follow-heading small{display:block;margin-top:4px;font-size:10px;color:var(--muted);line-height:1.5}.follow-notice{position:absolute;z-index:1001;top:50%;left:50%;width:min(350px,calc(100% - 32px));transform:translate(-50%,-50%);padding:24px;border:1px solid #d9e9ed;border-radius:20px;background:#f4fafc;box-shadow:0 12px 40px #00192350;text-align:center}.follow-actions button[hidden],.follow-notice[hidden]{display:none}.follow-notice p{margin:0;font-size:14px;line-height:1.7}.follow-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:8px}.follow-actions button{margin-top:16px;padding:10px 12px;border:1px solid var(--sea);border-radius:10px;background:#fff;color:var(--sea-dark);font:inherit;cursor:pointer}#followRetry{background:var(--sea);color:#fff}.follow-recenter{position:absolute;z-index:1000;left:50%;bottom:max(64px,calc(env(safe-area-inset-bottom) + 54px));transform:translateX(-50%);padding:11px 20px;border:1px solid #c8e2e7;border-radius:99px;background:#f4fafc;color:var(--sea-dark);font:700 13px system-ui;cursor:pointer;box-shadow:0 4px 18px #00192330}.follow-caption{position:absolute;z-index:1000;left:12px;right:12px;bottom:max(25px,calc(env(safe-area-inset-bottom) + 20px));margin:0;color:#fff;font-size:10px;text-align:center;text-shadow:0 1px 4px #001923;pointer-events:none}.follow-ship-label{padding:6px 10px;border:1px solid #fff;border-radius:10px;background:#f8fcfcf5;box-shadow:0 4px 16px #00192345;color:var(--sea-dark);text-align:center;pointer-events:none}.follow-ship-label strong{display:block;font-size:13px}.follow-ship-label span{display:block;margin-top:2px;font-size:11px}.follow-flat-ship{display:grid;place-items:center;border:2px solid #fff;border-radius:50%;background:var(--sea);color:#fff}.follow-flat-ship span{transform:rotate(var(--course,0deg))}.follow-view button:focus-visible{outline:3px solid #38bdf8;outline-offset:3px}#followMap .leaflet-bottom.leaflet-right{bottom:0}.follow-view[data-mode="2d"] .follow-caption{display:none}.popup-follow{width:100%;margin-top:7px;padding:7px 9px;border:0;border-radius:8px;background:#2563eb;color:#fff;font:inherit;font-size:12px;font-weight:750;cursor:pointer}.panel{position:fixed;z-index:900;left:16px;bottom:16px;width:min(390px,calc(100vw - 32px));max-height:min(58vh,570px);display:flex;flex-direction:column;overflow:hidden;border:1px solid rgba(255,255,255,.8);border-radius:22px;background:rgba(255,255,255,.96);box-shadow:var(--shadow)}.summary{display:grid;grid-template-columns:repeat(3,1fr);border-bottom:1px solid var(--line)}.metric{padding:14px;text-align:center}.metric+.metric{border-left:1px solid var(--line)}.metric strong{display:block;color:var(--sea-dark);font-size:23px}.metric span{color:var(--muted);font-size:11px}.controls{display:flex;gap:8px;padding:12px;border-bottom:1px solid var(--line)}.liuqiu-only{flex:0 0 auto;border:1px solid var(--sea);border-radius:11px;background:#fff;color:var(--sea-dark);font:inherit;font-size:12px;font-weight:800;cursor:pointer}.liuqiu-only.active{background:var(--sea);color:#fff}.speed-rank{padding:10px 12px 11px;border-bottom:1px solid var(--line);background:linear-gradient(135deg,rgba(255,250,235,.92),rgba(241,250,251,.84))}.rank-head{display:flex;align-items:center;justify-content:space-between;margin:0 1px 8px;color:var(--sea-dark);font-size:12px;font-weight:850;letter-spacing:.01em}.rank-head small{color:var(--muted);font-size:10px;font-weight:650}.rank-list{display:grid;grid-template-columns:repeat(3,1fr);gap:7px}.rank-item{display:grid;grid-template-columns:25px minmax(0,1fr);grid-template-rows:auto auto;column-gap:6px;min-width:0;padding:8px;border:1px solid rgba(7,59,76,.07);border-radius:13px;background:rgba(255,255,255,.82);box-shadow:0 3px 10px rgba(7,59,76,.05)}.rank-medal{grid-row:span 2;display:grid;place-items:center;width:25px;height:25px;border-radius:9px;background:var(--rank-color);color:#fff;font-size:11px;font-weight:900;box-shadow:0 3px 7px color-mix(in srgb,var(--rank-color) 32%,transparent)}.rank-name{overflow:hidden;color:var(--ink);font-size:11px;font-weight:820;text-overflow:ellipsis;white-space:nowrap}.rank-speed{margin-top:2px;color:var(--sea-dark);font-size:13px;font-weight:900;font-variant-numeric:tabular-nums}.rank-speed small{margin-left:2px;color:var(--muted);font-size:9px;font-weight:750}.rank-item{animation:none}.replay{padding:10px 13px;border-bottom:1px solid var(--line);background:rgba(8,126,139,.04)}.replay-head{display:flex;justify-content:space-between;margin-bottom:7px;color:var(--muted);font-size:11px}.replay input{width:100%;padding:0;accent-color:var(--sea)}input,select{min-width:0;padding:9px 10px;border:1px solid var(--line);border-radius:11px;outline:0;background:#fff;color:var(--ink)}input{flex:1}input:focus,select:focus{border-color:var(--sea);box-shadow:0 0 0 3px rgba(8,126,139,.12)}.list{overflow:auto;overscroll-behavior:contain}.vessel{width:100%;display:grid;grid-template-columns:42px 1fr auto;align-items:center;gap:10px;padding:11px 13px;border:0;border-bottom:1px solid var(--line);background:0 0;color:inherit;text-align:left;cursor:pointer}.vessel:hover{background:rgba(8,126,139,.06)}.vessel{animation:none}.boat{display:grid;place-items:center;width:38px;height:38px;border-radius:50%;color:#fff;background:var(--sea);font-size:19px}.vessel-name{overflow:hidden;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.vessel-meta{margin-top:3px;color:var(--muted);font-size:11px}.speed{color:var(--sea-dark);font-weight:700;font-variant-numeric:tabular-nums}.badge{display:inline-block;margin-top:4px;padding:2px 6px;border-radius:99px;font-size:10px;font-weight:800}.badge-sailing{color:#075985;background:#e0f2fe}.badge-docked{color:#166534;background:#dcfce7}.badge-waiting{color:#854d0e;background:#fef3c7}.badge-alert{color:#b91c1c;background:#fee2e2}.empty{padding:24px;color:var(--muted);text-align:center}.ship-wrap{position:relative;width:170px;height:48px;pointer-events:none}.ship-marker{position:absolute;top:6px;left:0;width:30px;height:30px;display:grid;place-items:center;border:2px solid #fff;border-radius:50% 50% 50% 8px;background:var(--ship-color,var(--sea));box-shadow:0 5px 14px rgba(7,59,76,.32);color:#fff;transform:rotate(var(--course))}.ship-marker span{display:block;transform:rotate(-90deg);font-size:15px}.ship-label{position:absolute;top:4px;left:36px;max-width:126px;overflow:hidden;padding:3px 6px 4px;border:1px solid rgba(255,255,255,.9);border-radius:6px;background:rgba(255,255,255,.9);box-shadow:0 2px 9px rgba(7,59,76,.2);color:#173d45;font-size:11px;font-weight:800;line-height:1.2}.ship-label b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ship-label small{display:block;margin-top:2px;color:var(--muted);font-size:9px;font-weight:700;white-space:nowrap}.ship-track{stroke-linecap:round;stroke-linejoin:round}.reference-route{stroke-linecap:round;stroke-linejoin:round}.route-label{padding:2px 6px;border:0;border-radius:5px;background:rgba(23,61,69,.9);box-shadow:none;color:#fff3a3;font-size:10px;font-weight:800}.route-label::before{display:none}.track-time-label{min-width:42px;padding:3px 5px;border:2px solid var(--track-color,rgba(255,255,255,.94));border-radius:6px;background:rgba(8,42,54,.88);box-shadow:0 2px 7px rgba(0,0,0,.24);color:#fff;font-size:10px;font-weight:800;line-height:1;text-align:center;white-space:nowrap}.company-taifu{--ship-color:#facc15}.company-lanbai{--ship-color:#2563eb}.company-liuxing{--ship-color:#7c3aed}.company-dafu{--ship-color:#16a34a}.company-dongliu{--ship-color:#e11d48}.company-ambulance{--ship-color:#dc2626}.company-coastguard{--ship-color:#0f3d91}.company-tracked{--ship-color:#b45309}.company-liuqiu-test{--ship-color:#0f766e}.company-yabo{--ship-color:#0891b2}.company-an-her-shuenn{--ship-color:#f97316}.company-test{--ship-color:#64748b}.leaflet-popup-content-wrapper{border-radius:16px}.popup-title{margin-bottom:7px;font-size:16px;font-weight:800}.popup-grid{display:grid;grid-template-columns:auto auto;gap:4px 14px;color:var(--muted)}.popup-grid b{color:var(--ink);text-align:right}.popup-track{width:100%;margin-top:11px;padding:7px 9px;border:0;border-radius:8px;background:var(--sea-dark);color:#fff;font:inherit;font-size:12px;font-weight:750;cursor:pointer}.popup-track.cancel{background:#64748b}.popup-favorite{width:100%;margin-top:11px;padding:7px 9px;border:1px solid #f1c5ca;border-radius:8px;background:#fff;color:#be123c;font:inherit;font-size:12px;font-weight:750;cursor:pointer}.popup-favorite.saved{border-color:#e11d48;background:#fff1f2}.port-panel{position:fixed;z-index:900;right:16px;bottom:16px;width:210px;overflow:hidden;border:1px solid rgba(255,255,255,.8);border-radius:18px;background:rgba(255,255,255,.96);box-shadow:var(--shadow)}.port-panel h2{margin:0;padding:11px 13px 8px;font-size:14px}.port{display:flex;align-items:center;justify-content:space-between;padding:8px 13px;border-top:1px solid var(--line);font-size:12px}.port small{color:var(--muted)}.fleet-panel{position:fixed;z-index:900;top:16px;right:16px;width:300px;max-height:min(620px,calc(100vh - 270px));overflow:auto;border:1px solid rgba(255,255,255,.8);border-radius:18px;background:rgba(255,255,255,.97);box-shadow:var(--shadow)}.favorite-panel{position:fixed;z-index:900;top:16px;right:16px;width:300px;max-height:min(620px,calc(100vh - 270px));overflow:auto;border:1px solid rgba(255,255,255,.8);border-radius:18px;background:rgba(255,255,255,.97);box-shadow:var(--shadow)}.favorite-intro{margin:0;padding:0 14px 10px;color:var(--muted);font-size:12px;line-height:1.55}.favorite-list{padding:0 10px 12px}.favorite-row{display:flex;align-items:stretch;gap:6px;border-top:1px solid var(--line)}.favorite-open{min-width:0;flex:1;display:grid;grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:8px;padding:10px 3px;border:0;background:0 0;color:var(--ink);text-align:left;font:inherit;cursor:pointer}.favorite-open:disabled{opacity:.56;cursor:default}.favorite-open small,.favorite-open strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.favorite-open small{margin-top:3px;color:var(--muted);font-size:11px}.favorite-open>span:last-child{color:var(--sea-dark);font-size:11px;font-weight:800;white-space:nowrap}.favorite-remove{align-self:center;width:34px;height:34px;border:0;border-radius:50%;background:#fff1f2;color:#e11d48;font-size:16px;cursor:pointer}.fleet-panel h2{margin:0;padding:15px 16px 10px;font-size:19px}.fleet-ais-help{display:block;margin:0 14px 10px;padding:10px 12px;border:1px solid var(--line);border-radius:12px;background:#f4fbfa;color:var(--sea-dark);font-size:13px;text-underline-offset:3px}.guide-dialog{width:min(660px,calc(100vw - 64px));max-height:calc(100dvh - 80px);padding:0;border:1px solid rgba(255,255,255,.9);border-radius:24px;background:#f8fcfc;color:var(--ink);box-shadow:0 24px 80px rgba(0,24,36,.3);overflow:hidden}.guide-dialog[open]{display:flex;flex-direction:column}.guide-dialog::backdrop{background:rgba(3,25,34,.38)}.guide-heading{display:flex;align-items:center;justify-content:space-between;flex-shrink:0;gap:20px;padding:18px 24px;border-bottom:1px solid var(--line)}.guide-heading h2{margin:0;font-size:20px;color:var(--sea-dark)}.guide-heading button{width:36px;height:36px;flex-shrink:0;border:0;border-radius:50%;background:#e7f0f2;color:var(--sea-dark);font-size:24px;cursor:pointer}.guide-content{min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:8px 26px 24px;font-size:15px;line-height:1.85}.guide-content h2,.guide-content h3,.guide-content h4{margin:24px 0 10px;color:var(--sea-dark);line-height:1.5;scroll-margin-top:16px}.guide-content h2{font-size:19px}.guide-content h3{font-size:17px}.guide-content h4{font-size:15px}.guide-content p{margin:14px 0}.guide-content ul{padding-left:24px}.guide-content li+li{margin-top:8px}.guide-content a{color:var(--sea);text-underline-offset:3px;overflow-wrap:anywhere}.guide-content .notice{padding:14px 16px;border-radius:14px;background:#eaf5f5}.guide-content footer{margin-top:24px;padding-top:16px;border-top:1px solid var(--line);color:var(--muted);font-size:12px}.guide-content button{padding:9px 16px;border:1px solid var(--sea);border-radius:12px;background:var(--sea);color:#fff;font:inherit;cursor:pointer}.guide-dialog :focus-visible{outline:3px solid #38bdf8;outline-offset:3px}.fleet-ais-help:hover{background:#e4f3f2}.fleet-ais-help:focus-visible{outline:3px solid #38bdf8;outline-offset:2px}.fleet-filters{display:flex;gap:6px;padding:0 10px 10px;border-bottom:1px solid var(--line)}.fleet-filters select{width:50%;padding:8px 9px;border-radius:8px;font-size:12px}.fleet-company{border-top:1px solid var(--line);border-left:4px solid var(--fleet-color)}.fleet-company{animation:none}.fleet-company-title{padding:11px 14px 6px;color:var(--fleet-color);font-size:15px;font-weight:850}.fleet-overview{display:none}.fleet-ship{width:100%;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 14px;border:0;background:0 0;color:var(--ink);font:inherit;font-size:15px;text-align:left;cursor:pointer}.fleet-ship:hover:not(:disabled){background:rgba(8,126,139,.06)}.fleet-ship:disabled{cursor:default}.fleet-state{flex:0 0 auto;padding:3px 6px;border-radius:99px;font-size:11px;font-weight:800}.fleet-live{color:#166534;background:#dcfce7}.fleet-offline{color:#64748b;background:#eef2f7}#fleet{min-height:0}.pulse{animation:status-breathe 2.2s ease-in-out infinite}.pulse.loading{animation:status-loading .9s ease-in-out infinite}.favorite-panel,.fleet-panel,.panel,.port-panel,header{animation:surface-in .5s cubic-bezier(.2,.8,.2,1) both}.update-status{animation:status-in .5s cubic-bezier(.2,.8,.2,1) both}.ship-marker{animation:none}@keyframes card-rise{from{opacity:0;transform:translateY(7px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes row-in{from{opacity:0;transform:translateX(-8px)}to{opacity:1;transform:translateX(0)}}@keyframes vessel-float{0%,100%{transform:rotate(var(--course)) translateY(0)}50%{transform:rotate(var(--course)) translateY(-2px)}}@keyframes status-breathe{0%,100%{box-shadow:0 0 0 4px rgba(39,174,96,.12)}50%{box-shadow:0 0 0 7px rgba(39,174,96,.04)}}@keyframes status-loading{0%,100%{opacity:.55;transform:scale(.82)}50%{opacity:1;transform:scale(1.12)}}@keyframes surface-in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes status-in{from{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%,0)}}@media (prefers-reduced-motion:reduce){*,::after,::before{animation-duration:NaNs!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:NaNs!important}}.map-settings{display:contents}.desktop-control-label,.desktop-map-navigation,.desktop-settings-label{display:none}.desktop-dock,.desktop-map-logo,.desktop-panel-close,.desktop-panel-heading{display:none}@media (min-width:621px){body{--desktop-top:124px;--desktop-panel-width:360px;background:#e7f1f2}header{top:20px;left:24px;right:auto;width:min(480px,calc(100vw - 460px));height:84px;padding:17px 22px;border-radius:24px;overflow:visible;background:#f8fcfc;backdrop-filter:none;animation:none}header .brand>h1,header .site-subtitle-row{max-width:100%}header .brand>.legend{display:none}h1{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.desktop-dock{display:grid;grid-template-columns:repeat(8,1fr);position:fixed;left:50%;bottom:22px;transform:translateX(-50%);width:min(650px,calc(100vw - 48px));z-index:1001;gap:5px;padding:7px;background:rgba(248,252,252,.97);border:1px solid rgba(255,255,255,.9);border-radius:24px;box-shadow:var(--shadow);backdrop-filter:blur(18px)}.desktop-map-logo{display:block;position:fixed;z-index:850;top:auto;left:50%;right:auto;bottom:118px;transform:translateX(-50%);width:78px;height:auto;filter:drop-shadow(0 3px 7px rgba(0,22,32,.78));pointer-events:none;user-select:none}.desktop-dock button{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;min-width:0;min-height:57px;white-space:nowrap;border:0;border-radius:18px;padding:8px;background:0 0;color:var(--muted);cursor:pointer;font:inherit;font-size:12px;font-weight:750}.desktop-dock button i{width:18px;text-align:center;font-size:17px}.desktop-dock button:hover{background:#e7f3f3;color:var(--sea-dark)}.desktop-dock button.is-active{background:var(--sea);color:#fff}.desktop-dock button:focus-visible,[data-desktop-close]:focus-visible{outline:3px solid #38bdf8;outline-offset:2px}.desktop-panel-heading{display:flex;position:sticky;top:0;z-index:2;background:#f5fafb;align-items:center;justify-content:space-between;padding:12px 14px;border-bottom:1px solid var(--line)}[data-desktop-close]{border:0;background:#e7f0f2;color:var(--sea-dark);border-radius:50%;width:32px;height:32px;cursor:pointer;font-size:23px;flex-shrink:0}.desktop-panel-close{display:block;position:absolute;top:9px;right:12px}h1{font-size:20px}.subtitle{font-size:11px}.legend,.port-shortcuts{margin-top:10px}.port-shortcuts{gap:6px}.port-shortcuts button{min-height:29px;padding:5px 8px}.update-status{z-index:1001;top:38px;right:24px;left:auto;width:380px;max-width:380px;min-height:46px;transform:none;animation:none;padding:7px 12px;gap:6px;flex-wrap:nowrap;background:#f8fcfc;border-color:rgba(255,255,255,.9);box-shadow:var(--shadow);font-size:11px}#statusText{flex:1;min-width:0;line-height:1.45;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.force-refresh,.update-countdown{flex-shrink:0}.mobile-map-controls{position:fixed;top:var(--desktop-top);left:24px;display:grid;gap:10px;z-index:1002}.mobile-map-controls button{position:relative;display:grid;place-items:center;width:48px;height:48px;padding:0;border:1px solid rgba(255,255,255,.95);border-radius:16px;background:#f8fcfc;color:var(--sea-dark);box-shadow:0 5px 20px rgba(7,59,76,.15);cursor:pointer;font-size:18px}.mobile-map-controls button:hover{background:#e5f4f4}.desktop-map-navigation button:focus-visible,.mobile-map-controls button:focus-visible{outline:3px solid #38bdf8;outline-offset:3px}.mobile-map-controls button[aria-busy=true],.mobile-map-controls button[aria-expanded=true],.mobile-map-controls button[aria-pressed=true]{background:var(--sea);color:#fff}.desktop-control-label{display:block;position:absolute;left:58px;top:50%;transform:translateY(-50%);padding:8px 12px;border-radius:10px;background:var(--sea-dark);color:#fff;font-size:12px;font-weight:700;white-space:nowrap;pointer-events:none;opacity:0}.mobile-map-controls button:focus-visible .desktop-control-label,.mobile-map-controls button:hover .desktop-control-label{opacity:1}.traffic-toggle .desktop-control-label{opacity:1;background:#f8fcfc;color:var(--sea-dark);box-shadow:0 4px 15px rgba(7,59,76,.12)}body:not([data-desktop-panel=map]) .traffic-toggle:not(:hover):not(:focus-visible) .desktop-control-label{opacity:0}.traffic-toggle[aria-pressed=true] .desktop-control-label::after{content:" · 已開啟";color:var(--sea)}.traffic-toggle[aria-pressed=false] .desktop-control-label::after{content:" · 已關閉";color:var(--muted)}.favorite-panel,.fleet-panel,.map-settings,.panel,.port-panel{position:fixed;top:var(--desktop-top);left:88px;right:auto;bottom:110px;width:var(--desktop-panel-width);max-height:none;border:1px solid rgba(255,255,255,.9);border-radius:24px;overflow:auto;overscroll-behavior:contain;background:#f8fcfc;box-shadow:var(--shadow)}.fleet-panel,.panel{scrollbar-width:thin;scrollbar-color:#b8d3d7 transparent}.fleet-panel::-webkit-scrollbar,.panel::-webkit-scrollbar{display:block;width:5px}.fleet-panel::-webkit-scrollbar-thumb,.panel::-webkit-scrollbar-thumb{background:#b8d3d7;border-radius:9px}#map{position:absolute;inset:0;width:100%}.panel>*{flex-shrink:0}.panel .list{overflow:visible;flex:none}.vessel{grid-template-columns:38px minmax(0,1fr) auto;gap:10px;padding:14px}.vessel>span:nth-child(2){min-width:0}.vessel-meta,.vessel-name{display:block}.vessel-name{font-size:14px}.vessel-meta{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vessel .speed{font-size:13px;white-space:nowrap}body:not([data-desktop-panel=favorites]) .favorite-panel,body:not([data-desktop-panel=fleet]) .fleet-panel,body:not([data-desktop-panel=ports]) .port-panel,body:not([data-desktop-panel=settings]) .map-settings,body:not([data-desktop-panel=vessels]) .panel{display:none}.service-rail{display:none}.summary{flex:0 0 auto}.metric{padding:13px 8px}.metric strong{font-size:22px}.controls{display:grid;grid-template-columns:1fr 1fr;gap:9px;padding:14px}.controls input{grid-column:1/-1;width:100%}.controls select{width:100%;min-width:0}.controls input,.controls select{min-height:42px;padding:9px 10px;border-radius:12px}.liuqiu-only{min-height:40px;padding:0 9px}.controls #ferryOnly{grid-column:1/-1;display:flex;align-items:center;justify-content:space-between;text-align:left;padding:11px 13px}.controls #ferryOnly::after{content:"關閉";font-size:11px}.controls #ferryOnly.active::after{content:"開啟 ✓"}.controls #liuqiuOnly{grid-column:1/-1}.speed-rank{padding:9px 10px}.replay{padding:9px 11px}.fleet-panel h2{padding:15px 16px 11px;font-size:17px}.fleet-company-title{padding:10px 13px 5px;font-size:14px}.fleet-ship{padding:8px 13px;font-size:14px}.port-panel h2{padding:12px 14px 9px;font-size:14px}.port{padding:8px 14px}.map-settings{display:block;bottom:auto;height:auto;max-height:calc(100dvh - var(--desktop-top) - 110px);padding:0 16px 18px}.map-settings .desktop-panel-heading{margin:0 -16px 18px}.desktop-settings-label{display:block;margin:18px 0 9px;color:var(--muted);font-size:12px;font-weight:750}.map-settings .port-shortcuts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:0}.map-settings .port-shortcuts button{min-height:44px;border-radius:13px;font-size:13px}.map-settings .admin-toggle{min-height:36px;margin-top:18px}.desktop-map-navigation{display:grid;position:fixed;z-index:900;top:var(--desktop-top);right:24px;gap:8px}.desktop-map-navigation button{width:44px;height:44px;border:1px solid #fff;border-radius:14px;background:#f8fcfc;color:var(--sea-dark);cursor:pointer;font:700 23px system-ui;box-shadow:0 5px 20px rgba(7,59,76,.15)}.desktop-map-navigation button:last-child{margin-top:4px;font-size:17px}.desktop-map-navigation button:hover{background:#e5f4f4}.desktop-panel-heading{padding:16px;background:#f8fcfc}.fleet-panel h2,.port-panel h2{padding:20px 50px 15px 18px}.desktop-panel-close{top:14px}.favorite-intro{padding:0 16px;font-size:13px;line-height:1.7;color:var(--muted)}.favorite-list{padding:0 12px 16px}}@media (min-width:621px) and (max-width:1100px){body{--desktop-panel-width:320px}.desktop-map-logo{width:62px}}@media (min-width:621px) and (max-width:900px){body{--desktop-top:180px}header{width:min(480px,calc(100vw - 48px))}.update-status{top:116px;max-width:calc(100vw - 48px)}}@media (min-width:621px) and (max-width:740px){body{--desktop-panel-width:290px}.desktop-dock{gap:2px}.site-subtitle-row{gap:7px}}@media (max-width:620px){body{overscroll-behavior:none}#map{touch-action:pan-x pan-y}header{top:8px;left:8px;right:auto;width:calc(100vw - 16px);min-height:64px;padding:11px 166px 10px 14px;border-radius:18px;box-sizing:border-box;background:rgba(255,255,255,.96)}h1{font-size:18px;line-height:1.2;letter-spacing:.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.subtitle{display:block;margin-top:4px;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.admin-toggle,.brand .port-shortcuts:not(.region-shortcuts),.legend{display:none}header .region-shortcuts{position:fixed;top:80px;left:8px;right:8px;display:none;flex-wrap:nowrap;gap:6px;margin:0;padding:5px;overflow-x:auto;border:1px solid rgba(255,255,255,.85);border-radius:13px;background:rgba(255,255,255,.97);box-shadow:0 6px 18px rgba(3,36,48,.13);scrollbar-width:none}body.region-menu-open header .region-shortcuts{display:flex}header .region-shortcuts::-webkit-scrollbar{display:none}header .region-shortcuts button{flex:0 0 auto;min-height:31px;padding:5px 10px;border-radius:9px;font-size:12px}header .region-shortcuts button.active{border-color:var(--sea);background:var(--sea);color:#fff}.mobile-region-toggle{position:absolute;top:13px;right:88px;display:grid;place-items:center;width:37px;height:37px;padding:0;border:1px solid #cbd5e1;border-radius:11px;background:#fff;color:var(--sea-dark);font:800 19px/1 system-ui;cursor:pointer}.mobile-fleet-toggle{position:absolute;top:13px;right:12px;display:block;margin:0;min-height:37px;padding:8px 10px;border:0;border-radius:11px;background:var(--sea);color:#fff;font:inherit;font-size:12px;font-weight:850;cursor:pointer;box-shadow:0 5px 12px rgba(8,126,139,.24)}.update-status{top:80px;max-width:calc(100vw - 16px);padding:7px 11px;border-radius:999px;font-size:11px;box-shadow:0 5px 16px rgba(3,36,48,.13)}.update-countdown{padding-left:6px}.status span:last-child{max-width:110px;overflow:hidden;text-overflow:ellipsis}.fleet-panel,.panel{display:none;flex-direction:column;left:10px;right:10px;bottom:max(10px,env(safe-area-inset-bottom));width:auto;height:min(56dvh,540px);max-height:min(56dvh,540px);overflow:hidden;border:1px solid rgba(255,255,255,.78);border-radius:28px;background:rgba(248,251,252,.82);box-shadow:0 18px 48px rgba(0,24,36,.28),inset 0 1px 0 rgba(255,255,255,.8);backdrop-filter:blur(28px) saturate(160%);transition:height .28s cubic-bezier(.2,.8,.2,1),background .2s ease;touch-action:pan-y}.fleet-panel{top:auto}body.show-all-vessels .panel,body:not(.show-all-vessels) .fleet-panel{display:flex}body.sheet-collapsed .fleet-panel,body.sheet-collapsed .panel{height:76px;max-height:76px}.mobile-sheet-handle{position:relative;flex:0 0 auto;display:grid;grid-template-columns:1fr 28px;align-items:end;width:100%;min-height:58px;padding:24px 18px 8px;border:0;border-bottom:1px solid rgba(7,59,76,.07);background:0 0;color:var(--sea-dark);font:inherit;font-size:15px;font-weight:820;letter-spacing:-.02em;text-align:left;cursor:pointer;touch-action:manipulation}.mobile-sheet-handle::before{content:"";position:absolute;top:8px;left:50%;width:38px;height:5px;border-radius:99px;background:rgba(43,70,78,.25);transform:translateX(-50%)}.mobile-sheet-handle i{display:none}.mobile-sheet-handle b{display:grid;place-items:center;width:27px;height:27px;border-radius:50%;background:rgba(7,59,76,.07);color:var(--sea-dark);font-size:17px;font-weight:700;text-align:center;transition:transform .25s ease}body.sheet-collapsed .mobile-sheet-handle b{transform:rotate(180deg)}.metric{padding:10px 6px 11px}.metric strong{font-size:21px;letter-spacing:-.04em}.summary{flex:0 0 auto}.controls{display:grid;grid-template-columns:1fr 1fr;gap:7px;padding:10px 12px}.controls input{grid-column:1/-1;width:100%}.controls input,.controls select{min-height:38px;border-color:rgba(7,59,76,.12);border-radius:12px;background:rgba(255,255,255,.88);font-size:12px}.liuqiu-only{grid-column:1/-1;min-height:34px}.replay,.speed-rank{flex:0 0 auto}.speed-rank{padding:9px 12px 10px;background:linear-gradient(135deg,rgba(255,250,235,.78),rgba(241,250,251,.58))}.rank-head{margin-bottom:7px;font-size:11px}.rank-list{gap:6px}.rank-item{grid-template-columns:22px minmax(0,1fr);column-gap:5px;padding:7px 6px;border-radius:12px}.rank-medal{width:22px;height:22px;border-radius:8px;font-size:10px}.rank-name{font-size:10px}.rank-speed{font-size:12px}.replay{margin:0 12px 8px;padding:8px 0;border-bottom:0;background:0 0}.list{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;touch-action:pan-y}.vessel{width:calc(100% - 20px);grid-template-columns:38px minmax(0,1fr) auto;gap:9px;margin:0 10px;padding:11px 6px;border-radius:14px}.vessel>span:nth-child(2){min-width:0}.speed{white-space:nowrap}.vessel+.vessel{border-top:1px solid rgba(7,59,76,.08)}.boat{width:34px;height:34px;font-size:16px;box-shadow:0 4px 10px rgba(8,126,139,.18)}.port-panel{display:none}.fleet-panel h2{display:none}.fleet-overview{display:block;padding:14px 14px 10px;color:var(--sea-dark)}.fleet-overview>strong{display:block;font-size:16px}.fleet-overview>small{display:block;margin-top:3px;color:var(--muted);font-size:10px}.fleet-overview>div{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:11px}.fleet-overview>div>span{display:flex;flex-direction:column;align-items:center;padding:9px 5px;border:1px solid rgba(7,59,76,.08);border-radius:14px;background:rgba(255,255,255,.7)}.fleet-overview b{font-size:22px;line-height:1}.fleet-overview span small{margin-top:5px;color:var(--muted);font-size:10px}.fleet-close{display:none!important}.fleet-filters{flex:0 0 auto;position:relative;top:auto;z-index:1;gap:8px;padding:10px 12px 9px;border-bottom:1px solid rgba(7,59,76,.08);background:0 0}.fleet-filters select{min-height:40px;border-color:rgba(7,59,76,.12);border-radius:12px;background:rgba(255,255,255,.82);font-size:12px}#fleet{flex:1 1 auto;min-height:0;padding:0 8px 14px;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;touch-action:pan-y}.fleet-company{margin-top:8px;border:1px solid rgba(7,59,76,.08);border-left:4px solid var(--fleet-color);border-radius:15px;background:rgba(255,255,255,.56);overflow:hidden}.fleet-company-title{padding:11px 12px 6px;font-size:14px}.fleet-ship{min-height:47px;padding:11px 12px;font-size:15px}.fleet-company-title{padding:10px 14px 5px;font-size:14px}.fleet-ship{min-height:43px;padding:10px 14px;font-size:14px}.route-label{display:none}.update-status,header{backdrop-filter:none}.ship-label{box-shadow:none}.ship-track,.ship-track-halo{animation:none;filter:none}}@media (max-width:620px){body,html{min-height:100svh}#map{min-height:100svh}header{top:max(8px,env(safe-area-inset-top));left:10px;width:calc(100vw - 20px);padding:13px 16px 12px;border-radius:24px}h1{font-size:clamp(17px, 4.8vw, 21px)}header .brand{padding-right:0}.mobile-map-controls{position:fixed;z-index:1002;top:calc(max(8px,env(safe-area-inset-top)) + 69px);left:10px;display:grid;gap:8px}.feedback-toggle,.location-toggle,.mobile-region-toggle,.traffic-toggle{position:static;display:grid!important;place-items:center;width:42px;height:42px;padding:0;border:1px solid rgba(255,255,255,.86);border-radius:14px;box-shadow:0 8px 20px rgba(0,24,36,.16);font-size:17px;cursor:pointer}.feedback-toggle,.location-toggle,.mobile-region-toggle{background:rgba(248,251,252,.94);color:var(--sea-dark)}.mobile-fleet-toggle{display:none!important}header .region-shortcuts{position:fixed;top:calc(max(8px,env(safe-area-inset-top)) + 82px);left:10px;right:auto;width:42px;display:none!important;flex-direction:column;flex-wrap:nowrap;gap:7px;padding:0;border-radius:14px;overflow-y:auto;overflow-x:hidden;max-height:calc(100svh - 180px)}body.region-menu-open header .region-shortcuts{display:flex!important}body.region-menu-open header .region-shortcuts{top:calc(max(8px,env(safe-area-inset-top)) + 269px);max-height:calc(100svh - 285px)}header .region-shortcuts button{width:100%;min-height:42px;margin:0;padding:4px 2px;border-radius:14px;font-size:11px;line-height:1.15;white-space:normal;overflow-wrap:anywhere;word-break:break-all}header .region-shortcuts button:is([data-region=qijin],[data-region=east-islands],[data-region=all]) span{display:block}.update-status{top:calc(max(8px,env(safe-area-inset-top)) + 74px);right:16px;left:auto;transform:none;animation:none;min-height:32px;padding:7px 10px;border-radius:999px;font-size:10px}body.region-menu-open .update-status{top:calc(max(8px,env(safe-area-inset-top)) + 74px)!important}.fleet-panel,.panel{display:flex!important;opacity:0;visibility:hidden;pointer-events:none;transform:translateY(24px) scale(.985);transform-origin:50% 100%;bottom:max(10px,env(safe-area-inset-bottom));height:min(58svh,560px);max-height:min(58svh,560px);border-radius:30px;contain:layout paint;will-change:transform,opacity,height;transition:opacity .24s ease,transform .32s cubic-bezier(.2,.8,.2,1),visibility .24s ease,height .32s cubic-bezier(.2,.8,.2,1)}body.show-all-vessels .panel,body:not(.show-all-vessels) .fleet-panel{opacity:1;visibility:visible;pointer-events:auto;transform:translateY(0) scale(1)}body.sheet-collapsed .fleet-panel,body.sheet-collapsed .panel{height:78px;max-height:78px}.mobile-sheet-handle{min-height:60px;padding-top:27px;font-size:15px;letter-spacing:-.025em}.mobile-sheet-handle b{width:29px;height:29px}.summary{border-bottom-color:rgba(7,59,76,.1)}.metric{padding-block:11px 12px}.controls{padding:11px 13px}.speed-rank{padding-inline:13px}#fleet,.list{padding-bottom:max(18px,env(safe-area-inset-bottom))}.fleet-panel #fleet{padding-inline:9px}.port-panel{display:none}.leaflet-control-attribution{font-size:9px}.sponsor-toggle{position:fixed;z-index:1001;top:calc(max(8px,env(safe-area-inset-top)) + 78px);left:16px;display:flex;width:150px;justify-content:center;margin:0;padding:7px 10px;font-size:11px}.more-links-toggle{position:fixed;z-index:1001;top:calc(max(8px,env(safe-area-inset-top)) + 78px);left:172px;margin:0;padding:7px 10px;font-size:11px}.sponsor-card{padding:18px;border-radius:25px}.service-rail{top:calc(max(8px,env(safe-area-inset-top)) + 86px);left:14px;right:14px;gap:6px;padding:6px;overflow-x:auto;border-radius:20px;scrollbar-width:none}.service-rail::-webkit-scrollbar{display:none}.service-rail a,.service-rail button{flex:1 0 auto;min-width:72px;min-height:38px;padding:8px 11px;border-radius:13px;font-size:11px;white-space:nowrap}.more-links-toggle,.sponsor-toggle{display:none!important}.mobile-tabbar{position:fixed;z-index:1100;left:10px;right:10px;bottom:max(10px,env(safe-area-inset-bottom));display:grid;grid-template-columns:repeat(7,1fr);gap:0;padding:4px;border:1px solid rgba(255,255,255,.86);border-radius:22px;background:rgba(248,251,252,.97);box-shadow:0 14px 38px rgba(0,24,36,.24);backdrop-filter:blur(20px) saturate(150%)}.mobile-tabbar button{min-width:0;min-height:48px;border:0;border-radius:16px;background:0 0;color:var(--muted);font:inherit;font-size:12px;font-weight:800;cursor:pointer;transition:background .2s ease,color .2s ease,transform .2s ease}.mobile-tabbar button{display:flex;align-items:center;justify-content:center;gap:5px;flex-direction:column;line-height:1}.mobile-tabbar button i{margin:0;font-size:15px}.traffic-toggle{background:var(--sea);color:#fff}.traffic-toggle[aria-pressed=false]{color:var(--muted);background:rgba(255,255,255,.92)}.location-toggle[aria-busy=true],.location-toggle[aria-pressed=true]{color:#fff;background:var(--sea)}.mobile-tabbar button.active,.mobile-tabbar button:active{background:var(--sea);color:#fff;transform:scale(.97)}body.map-only .fleet-panel,body.map-only .panel{opacity:0;visibility:hidden;pointer-events:none}body:not(.map-only):not(.show-all-vessels) .panel{opacity:0;visibility:hidden;pointer-events:none}body.show-all-vessels .fleet-panel{opacity:0;visibility:hidden;pointer-events:none}body.show-all-vessels .panel,body:not(.show-all-vessels) .fleet-panel{opacity:1;visibility:visible;pointer-events:auto}body.map-only .fleet-panel,body.map-only .panel{opacity:0!important;visibility:hidden!important;pointer-events:none!important;transform:translateY(24px) scale(.985)}.related-links{top:50%;left:50%;right:auto;bottom:auto;width:min(340px,calc(100vw - 32px));padding:16px;border-radius:24px}body.sheet-collapsed .fleet-panel,body.sheet-collapsed .panel{bottom:calc(max(10px,env(safe-area-inset-bottom)) + 55px);border-bottom-left-radius:0;border-bottom-right-radius:0}.mobile-tabbar{box-shadow:0 14px 38px rgba(0,24,36,.24)}body:not(.map-only) .mobile-tabbar{border-top-left-radius:0;border-top-right-radius:0}.leaflet-bottom.leaflet-right{bottom:calc(max(10px,env(safe-area-inset-bottom)) + 60px)}.leaflet-control-attribution{padding:1px 3px;background:rgba(255,255,255,.72);font-size:7px;opacity:.72}.fleet-panel,.panel{overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain;-webkit-overflow-scrolling:touch;padding-bottom:64px;scrollbar-width:none}.fleet-panel::-webkit-scrollbar,.panel::-webkit-scrollbar{display:none;width:0;height:0}.fleet-panel>*,.panel>*{flex:0 0 auto}.fleet-panel #fleet,.panel .list{flex:0 0 auto;height:auto;max-height:none;overflow:visible;overscroll-behavior:auto}body.sheet-collapsed .fleet-panel,body.sheet-collapsed .panel{overflow:hidden;padding-bottom:0}body.sheet-collapsed .fleet-panel>:not(.mobile-sheet-handle),body.sheet-collapsed .panel>:not(.mobile-sheet-handle){display:none}.favorite-panel{display:flex!important;flex-direction:column;position:fixed;z-index:900;top:auto;left:10px;right:10px;bottom:max(10px,env(safe-area-inset-bottom));width:auto;height:min(58svh,560px);max-height:min(58svh,560px);overflow:hidden;border:1px solid rgba(255,255,255,.78);border-radius:30px;background:rgba(248,251,252,.82);box-shadow:0 18px 48px rgba(0,24,36,.28);backdrop-filter:blur(28px) saturate(160%);opacity:0;visibility:hidden;pointer-events:none;transform:translateY(24px) scale(.985);transition:opacity .24s ease,transform .32s cubic-bezier(.2,.8,.2,1),visibility .24s ease}.favorite-panel .desktop-panel-heading{display:none}.favorite-intro{flex:0 0 auto;margin:0;padding:12px 16px 8px;color:var(--muted);font-size:12px;line-height:1.55}.favorite-list{flex:1 1 auto;min-height:0;overflow-y:auto;padding:0 10px 14px}body.show-favorites .favorite-panel{height:min(58svh,560px);max-height:min(58svh,560px);bottom:max(10px,env(safe-area-inset-bottom));opacity:1;visibility:visible;pointer-events:auto;transform:translateY(0) scale(1)}body.show-favorites .favorite-panel .desktop-panel-heading{display:none!important}body.show-favorites .favorite-panel .favorite-intro{display:block!important}body.show-favorites .favorite-panel .favorite-list{display:block!important}body.show-favorites .fleet-panel,body.show-favorites .panel{opacity:0!important;visibility:hidden!important;pointer-events:none!important}body.map-only .favorite-panel{opacity:0!important;visibility:hidden!important;pointer-events:none!important}body.sheet-collapsed .favorite-panel{height:78px;max-height:78px;bottom:calc(max(10px,env(safe-area-inset-bottom)) + 55px);overflow:hidden}body.sheet-collapsed .favorite-panel>:not(.mobile-sheet-handle){display:none}}.harbor-area-label{color:#fee2e2;font-size:12px;font-weight:800;line-height:24px;text-align:center;white-space:nowrap;text-shadow:0 1px 3px #450a0a,0 0 5px #450a0a;pointer-events:none}.leaflet-tooltip.harbor-point-label{background:rgba(69,10,10,.88);color:#fee2e2;border:1px solid #ef4444;border-radius:4px;box-shadow:none;font-size:11px;padding:1px 4px}.leaflet-tooltip-top.harbor-point-label::before{border-top-color:#ef4444}.harbor-area-popup{font-size:12px;line-height:1.6}.harbor-area-popup strong{font-size:15px;color:#b91c1c}.harbor-area-popup table{border-collapse:collapse;margin:8px 0;width:100%;white-space:nowrap;font-variant-numeric:tabular-nums}.harbor-area-popup caption{text-align:left;color:#52636b}.harbor-area-popup td,.harbor-area-popup th{padding:4px 6px;border-bottom:1px solid #f0dcdc;text-align:left}.harbor-area-popup small{color:#52636b}.map-preferences{position:fixed;z-index:1200;bottom:108px;left:50%;transform:translateX(-50%);width:min(400px,calc(100vw - 28px));padding:24px;border:1px solid #dce9ec;border-radius:12px;background:#fff;color:#163b47;box-shadow:0 6px 24px #00243024;max-height:calc(100dvh - 140px);overflow:auto;box-sizing:border-box;text-align:left}.map-preferences[hidden]{display:none}.preferences-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:24px}.preferences-heading h2{font-size:19px;line-height:1.4;font-weight:600;margin:0}.preferences-heading p{margin:6px 0 0;font-size:12px;color:#6d858c;line-height:1.5}.preferences-heading button{display:grid;place-items:center;flex:0 0 34px;width:34px;height:34px;margin:0;padding:0;border:0;background:#f0f5f6;color:#42606a;border-radius:50%;cursor:pointer;font-size:22px}.preferences-heading button:hover{background:#e3eff1}.map-style-options{display:grid;grid-template-columns:1fr;gap:0;border:0;padding:0;margin:0 0 24px;min-width:0}.map-style-options legend,.preferences-section-title{padding:0;font-size:12px;font-weight:600;color:#607b84;margin-bottom:8px}.map-style-card{position:relative;display:flex;align-items:center;min-width:0;padding:14px 0;margin:0;border:0;border-bottom:1px solid #e1e8eb;border-radius:0;background:0 0;cursor:pointer}.map-style-card:hover{background:#f7f9fa}.map-style-card:has(input:checked) strong{color:#078694}.map-preferences .map-style-card input[type=radio]{position:absolute;opacity:0;width:1px;height:1px;min-width:0;min-height:0;padding:0;margin:0;border:0}.map-style-card:has(input:focus-visible){outline:2px solid #078694;outline-offset:3px}.map-style-copy{display:block;flex:1;padding:0 12px 0 0}.map-preferences strong{display:block;font-size:14px;font-weight:600;line-height:1.5}.map-preferences small{display:block;color:#6b838b;font-size:11px;margin-top:3px;line-height:1.7}.map-style-check{display:grid;place-items:center;flex:0 0 18px;width:18px;height:18px;margin-right:2px;border:1px solid #a5b7bd;border-radius:50%;background:0 0}.map-style-card:has(input:checked) .map-style-check{border-color:#078694}.map-style-card:has(input:checked) .map-style-check::after{content:'';width:8px;height:8px;border-radius:50%;background:#078694}.speed-setting{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:14px 0;background:0 0;border:0;border-bottom:1px solid #e1e8eb;border-radius:0;cursor:pointer}.map-preferences #showKmh{appearance:none;-webkit-appearance:none;position:relative;display:block;flex:0 0 44px;width:44px;height:26px;min-width:44px;min-height:26px;margin:0;padding:0;border:0;outline:0;border-radius:20px;background:#b6c7cc;cursor:pointer;transition:background .15s}.map-preferences #showKmh::before{content:'';position:absolute;top:3px;left:3px;width:20px;height:20px;background:#fff;border-radius:50%;box-shadow:0 1px 4px #183e4933;transition:transform .15s}.map-preferences #showKmh:checked{background:#078694}.map-preferences #showKmh:checked::before{transform:translateX(18px)}.map-preferences #showKmh:focus-visible,.preferences-heading button:focus-visible{outline:3px solid #63b9c3;outline-offset:3px}.preferences-note{color:#80949b;font-size:10px;line-height:1.7;margin:18px 0 0}@media(max-width:620px){.map-preferences{bottom:calc(86px + env(safe-area-inset-bottom));padding:20px;border-radius:12px}.mobile-tabbar .preferences-toggle{padding-left:2px;padding-right:2px}}@media(prefers-reduced-motion:reduce){.map-preferences #showKmh,.map-preferences #showKmh::before,.map-style-card{transition:none}}