@font-face{font-family:Noto Sans HK;src:url(/fonts/noto-sans-hk-400.woff2) format("woff2");font-weight:400;font-display:block;unicode-range:U+0000-2E7F,U+3000-9FFF,U+FF00-FFFF}@font-face{font-family:Noto Sans HK;src:url(/fonts/noto-sans-hk-700.woff2) format("woff2");font-weight:700;font-display:block;unicode-range:U+0000-2E7F,U+3000-9FFF,U+FF00-FFFF}:root{--cream: #fff8e1;--cream-deep: #f6ecc9;--screen-bg: #fffbe8;--navy: #102a54;--navy-soft: #2c4a7c;--magenta: #d6006e;--magenta-soft: #f4c4dc;--ink: #1c2230;--ink-soft: #4a5265;--muted-ink: #646b7d;--line: #d9d2bf;--correct: #1f8a4c;--wrong: #b3261e;--focus: #0b63ce;--panel: #ffffff;--radius: 14px;--radius-sm: 9px;--shadow: 0 1px 2px RGB(16 42 84 / .08), 0 6px 20px RGB(16 42 84 / .08);--font-zh: "Noto Sans HK", "PingFang HK", "Hiragino Sans GB", "Microsoft JhengHei", sans-serif;--font-en: "Helvetica Neue", Helvetica, Arial, "Noto Sans HK", sans-serif;--font-ui: system-ui, -apple-system, "Segoe UI", "Noto Sans HK", "PingFang HK", "Microsoft JhengHei", sans-serif;--font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;color-scheme:light}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;min-height:100dvh;background:var(--cream);color:var(--ink);font-family:var(--font-ui);line-height:1.45;-webkit-font-smoothing:antialiased}button,input{font:inherit;color:inherit}button{cursor:pointer;touch-action:manipulation}:focus-visible{outline:3px solid var(--focus);outline-offset:2px}.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.muted{color:var(--muted-ink)}.app{display:flex;flex-direction:column;min-height:100dvh;max-width:1200px;margin:0 auto;padding:0 clamp(10px,3vw,24px)}.topbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 16px;padding:12px 0 8px;border-bottom:1px solid var(--line)}.topbar__title h1{margin:0;font-family:var(--font-zh);font-size:clamp(1.05rem,1.1vw + .8rem,1.4rem);color:var(--navy);letter-spacing:.01em}.topbar__tagline{margin:0;font-size:.8rem;color:var(--ink-soft)}.topbar__actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.modes{display:inline-flex;background:var(--cream-deep);border:1px solid var(--line);border-radius:999px;padding:3px}.modes__btn{border:0;background:transparent;border-radius:999px;padding:6px 14px;font-size:.9rem;font-weight:600;color:var(--ink-soft)}.modes__btn.is-active{background:var(--navy);color:#fff}.link-btn{background:none;border:0;padding:6px 8px;color:var(--navy-soft);font-weight:600;text-decoration:underline;text-underline-offset:3px}.link-btn--lang{font-family:var(--font-zh)}.main{flex:1 0 auto;padding:12px 0 0}.notice{margin:16px auto;max-width:36rem;text-align:center;color:var(--ink-soft)}.notice--error{color:var(--wrong)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:1px solid var(--line);background:var(--panel);color:var(--ink);border-radius:999px;padding:9px 18px;font-weight:600}.btn--primary{background:var(--magenta);border-color:var(--magenta);color:#fff}.btn--primary:hover{filter:brightness(.95)}.btn--ghost{background:transparent}.btn--lg{padding:12px 28px;font-size:1.05rem}.btn:disabled{opacity:.55;cursor:default}.pill{display:inline-block;background:var(--navy);color:#fff;border-radius:999px;padding:3px 11px;font-size:.82rem;font-weight:600}.bus{container-type:inline-size;position:relative;background:var(--screen-bg);border:1px solid #e4dbbd;border-radius:var(--radius);box-shadow:var(--shadow),inset 0 0 0 6px #fdf3cf;padding:clamp(14px,3vw,26px) clamp(14px,3.2vw,30px);overflow:hidden}.bus__now{padding-bottom:clamp(10px,1.6vw,16px)}.bus__nowline{display:flex;align-items:baseline;gap:.45em;flex-wrap:wrap}.bus__nowlabel{color:var(--navy);font-family:var(--font-zh);font-weight:700;font-size:clamp(1rem,1.1vw + .6rem,1.5rem);white-space:nowrap}.bus__zh{display:block;color:var(--navy);font-family:var(--font-zh);font-weight:700;line-height:1.18;letter-spacing:.01em;overflow-wrap:anywhere;text-wrap:balance;hyphens:auto}.bus__zh--now{font-size:clamp(1.5rem,5.4vw,3.4rem);flex:1 1 auto;min-width:0}.bus__en{display:block;color:var(--navy-soft);font-family:var(--font-en);font-weight:500;line-height:1.25;overflow-wrap:break-word;text-wrap:balance}.bus__en--now{font-size:clamp(.78rem,1.6vw,1.05rem);margin-top:.3em}.bus__divider{height:4px;border-radius:2px;background:linear-gradient(90deg,var(--magenta),#a30058);margin:clamp(4px,1vw,10px) 0 clamp(10px,1.8vw,18px)}.bus__list{list-style:none;margin:0;padding:0;display:grid;gap:clamp(8px,1.6vw,14px)}.bus__row{position:relative;display:grid;grid-template-columns:clamp(22px,4vw,30px) 1fr;gap:clamp(10px,1.8vw,16px);align-items:stretch}.bus__marker{position:relative;display:block;border-radius:3px;background:linear-gradient(180deg,var(--magenta),#a30058)}.bus__marker:after{content:"";position:absolute;top:50%;left:50%;width:clamp(12px,2vw,16px);aspect-ratio:1;transform:translate(-50%,-50%);border-radius:50%;background:#fff;box-shadow:0 0 0 2px #fff}.bus__names{min-width:0;display:grid;align-content:center;gap:.15em;padding:4px 0}.bus__row .bus__zh{font-size:clamp(1.05rem,2.4vw + .5rem,2rem)}.bus__row .bus__en{font-size:clamp(.8rem,.5vw + .68rem,.95rem)}.bus--compact{padding:clamp(10px,2vw,16px) clamp(12px,2.4vw,20px)}.bus--compact .bus__zh--now{font-size:clamp(1.2rem,3.6vw,2.1rem)}.bus--compact .bus__row .bus__zh{font-size:clamp(.95rem,1.6vw + .5rem,1.35rem)}.statusbar{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:44px;padding:4px 0 8px}.statusbar__left,.statusbar__right{display:flex;align-items:center;gap:10px;min-width:0}.stars{color:#a87300;letter-spacing:2px;font-size:1.05rem;white-space:nowrap}.tries{font-weight:700;color:var(--navy);white-space:nowrap}.tries--warn{color:var(--wrong)}.keypad{--key-gap: clamp(5px, 1.6vw, 8px);display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2.1fr);gap:var(--key-gap);width:100%;max-width:520px;margin:0 auto}.keypad__digits,.keypad__side{display:grid;gap:var(--key-gap, 8px);min-width:0}.keypad__letters{display:grid;gap:8px}.keypad__row{display:flex;gap:var(--key-gap, 8px);min-width:0}.key{flex:1 1 0;min-width:30px;padding:0 2px;height:52px;border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff;color:var(--ink);font-size:1.35rem;font-weight:600;box-shadow:0 1px #0000001f;font-variant-numeric:tabular-nums}.key:active:not(.is-disabled){transform:translateY(1px);background:var(--cream-deep)}.key.is-disabled{color:#b9b6ac;background:#f0ece1;box-shadow:none;border-color:#e6e0d2;cursor:default}.key--letter{font-size:1.2rem;letter-spacing:.02em}.keypad__row--actions{grid-column:1 / -1}.key--action{font-size:1rem}.key--clear{color:var(--magenta)}.key.is-empty{color:#a9a595}.keypad__spacer{flex:1 1 0;min-width:30px}.keypad-display{max-width:520px;margin:0 auto 6px;min-height:40px;display:flex;align-items:center;justify-content:center;gap:2px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-sm);font-family:var(--font-mono);font-size:1.35rem;font-weight:700;letter-spacing:.08em;color:var(--navy)}.keypad-display__placeholder{color:#8a8579}.keypad-display__caret{width:2px;height:1.2em;background:var(--magenta);animation:blink 1.1s steps(1) infinite}@keyframes blink{50%{opacity:0}}@media (prefers-reduced-motion: reduce){.keypad-display__caret{animation:none}}.dirrows{list-style:none;margin:0;padding:0;display:grid;gap:8px}.dirrow{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;align-items:center;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-sm);padding:6px 8px 6px 12px}.dirrow__route{font-family:var(--font-mono);font-weight:700;font-size:1.15rem;color:var(--navy);min-width:3.2ch}.dirrow__dirs{display:grid;gap:6px}.dirbtn{display:flex;align-items:center;gap:8px;width:100%;text-align:start;border:1px solid transparent;background:var(--cream);border-radius:7px;padding:8px 10px;min-height:40px;overflow-wrap:anywhere}.dirbtn__dir{flex:1 1 auto;min-width:0}.dirbtn:hover,.dirbtn.is-active,.dirbtn:focus-visible{background:#ffe8f2;border-color:var(--magenta-soft)}.dirbtn__tag{flex:0 0 auto;font-size:.78rem;font-weight:700;color:var(--magenta);border:1px solid var(--magenta-soft);border-radius:999px;padding:1px 7px}.history{display:grid;gap:14px;min-width:0}.panel-title{margin:0 0 6px;font-size:.8rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted-ink);font-family:var(--font-ui);font-weight:700}.guesses,.hints,.answers{list-style:none;margin:0;padding:0;display:grid;gap:6px}.guess{display:grid;grid-template-columns:1.4rem auto minmax(0,1fr) 1.2rem;align-items:center;gap:8px;background:var(--panel);border:1px solid var(--line);border-left:5px solid var(--wrong);border-radius:var(--radius-sm);padding:7px 10px;min-width:0}.guess.is-correct{border-left-color:var(--correct);background:#f0faf3}.guess__n{color:var(--muted-ink);font-size:.85rem;font-variant-numeric:tabular-nums}.guess__route{font-family:var(--font-mono);font-weight:700;color:var(--navy)}.guess__dir{min-width:0;overflow-wrap:anywhere;color:var(--ink-soft)}.guess__mark{font-weight:700;text-align:center}.guess.is-wrong .guess__mark{color:var(--wrong)}.guess.is-correct .guess__mark{color:var(--correct)}.feedback{margin:0;padding:8px 12px;border-radius:var(--radius-sm);background:#fff1d6;border:1px solid #f0d9a6;color:#7a4d00;font-weight:600}.hint{display:grid;grid-template-columns:1.5rem minmax(0,1fr);gap:8px;align-items:start;padding:7px 10px;border-radius:var(--radius-sm);background:#eef3fb;border:1px solid #d5e0f1}.hint__n{font-weight:700;color:var(--navy-soft);font-variant-numeric:tabular-nums}.hint__text{overflow-wrap:anywhere}.result{margin-top:6px;padding:14px;border-radius:var(--radius);border:1px solid var(--line);background:var(--panel);display:grid;gap:10px}.result--win{border-color:#bfe3cc;box-shadow:inset 0 0 0 1px #bfe3cc}.result__title{margin:0;font-family:var(--font-zh);color:var(--navy);font-size:1.3rem}.result--win .result__title{color:var(--correct)}.result--loss .result__title{color:var(--wrong)}.result__line{margin:0;color:var(--ink-soft)}.answer{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;padding:6px 10px;border-radius:var(--radius-sm);background:var(--cream);border:1px solid var(--line)}.answer__route{font-family:var(--font-mono);font-weight:700;color:var(--navy)}.answer__dir{min-width:0;overflow-wrap:anywhere}.result__actions{display:flex;gap:8px}.result__countdown{margin:0;color:var(--ink-soft)}.stats{border-top:1px dashed var(--line);padding-top:10px}.stats__numbers{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:0 0 10px}.stat{text-align:center;background:var(--cream);border-radius:var(--radius-sm);padding:8px 4px}.stat dt{font-size:.72rem;color:var(--muted-ink)}.stat dd{margin:2px 0 0;font-size:1.35rem;font-weight:700;color:var(--navy);font-variant-numeric:tabular-nums}.stats__subtitle{margin:0 0 6px;font-size:.85rem;color:var(--muted-ink)}.dist{list-style:none;margin:0;padding:0;display:grid;gap:4px}.dist__row{display:grid;grid-template-columns:1.4rem minmax(0,1fr);align-items:center;gap:6px}.dist__tries{font-variant-numeric:tabular-nums;color:var(--ink-soft)}.dist__bar{min-width:1.8ch;padding:1px 6px;border-radius:4px;background:#c9d3e6;color:var(--navy);font-size:.8rem;font-weight:700;font-variant-numeric:tabular-nums}.dist__bar.is-today{background:var(--magenta);color:#fff}.daily-fallback{max-width:34rem;margin:8vh auto 0;text-align:center;display:grid;gap:10px;justify-items:center;justify-content:center;padding:0 8px}.daily-fallback__emoji{margin:0;font-size:2.6rem;line-height:1}.daily-fallback__title{margin:0;font-family:var(--font-zh);color:var(--navy);font-size:1.5rem}.daily-fallback__hint{margin:0;color:var(--ink-soft)}.single-intro,.single-end{max-width:34rem;margin:8vh auto 0;text-align:center;display:grid;gap:12px;justify-items:center;padding:0 8px}.single-intro__title,.single-end__title{margin:0;font-family:var(--font-zh);color:var(--navy);font-size:1.7rem}.single-end__score{margin:0;display:grid;justify-items:center}.single-end__n{font-size:clamp(3rem,14vw,5rem);font-weight:800;line-height:1;color:var(--magenta);font-variant-numeric:tabular-nums}.single-end__label{font-size:.85rem;text-transform:uppercase;letter-spacing:.1em;color:var(--muted-ink)}.single-end__best.is-new{color:var(--correct);font-weight:700}.single-end__actions{display:flex;gap:10px;flex-wrap:wrap;justify-content:center}.timer{position:relative;display:inline-flex;align-items:center;padding:5px 12px;border-radius:999px;background:var(--cream-deep);overflow:hidden;min-width:8.5rem}.timer__bar{position:absolute;inset:0;transform-origin:right center;background:var(--magenta-soft);transition:transform .1s linear}.timer__text{position:relative;font-weight:700;color:var(--navy);font-size:.9rem}.score-big{font-weight:600;color:var(--ink-soft);white-space:nowrap}.score-big strong{font-size:1.3rem;color:var(--navy);font-variant-numeric:tabular-nums}.single-puzzle-stars{margin:0;color:#a87300;letter-spacing:2px}.flash{display:grid;gap:10px;padding:14px;border-radius:var(--radius);border:1px solid var(--line);background:var(--panel);animation:flash-in .18s ease-out}@keyframes flash-in{0%{opacity:0;transform:translateY(4px)}}@media (prefers-reduced-motion: reduce){.flash{animation:none}}.flash__title{margin:0;display:flex;align-items:center;gap:8px;font-family:var(--font-zh);font-size:1.25rem;font-weight:700}.flash--correct{border-color:#bfe3cc;background:#eaf7ef;box-shadow:inset 0 0 0 1px #bfe3cc}.flash--correct .flash__title{color:var(--correct)}.flash__mark{display:inline-grid;place-items:center;width:1.6em;height:1.6em;border-radius:50%;background:var(--correct);color:#fff;font-size:.85em}.flash__points{margin-inline-start:auto;font-family:var(--font-ui);font-size:1rem;color:var(--correct)}.flash__route{margin:0;font-size:1.05rem;overflow-wrap:anywhere}.flash__route-n{color:var(--navy);font-weight:700}.flash__route-dir{color:var(--ink-soft)}.flash--skip .flash__title{color:var(--navy)}.flash .answers{max-height:42vh;overflow-y:auto}.flash--skip .answer{background:#fff}.flash__next{justify-self:start}.modal{border:0;padding:0;background:transparent;max-width:min(560px,100vw - 24px);width:100%;max-height:100dvh;color:var(--ink)}.modal::backdrop{background:#102a5473}.modal__body{background:var(--panel);border-radius:var(--radius);box-shadow:0 20px 60px #00000047;padding:18px 20px 20px;display:grid;gap:12px}.modal__head{display:flex;align-items:center;justify-content:space-between;gap:10px}.modal__head h2{margin:0;font-family:var(--font-zh);color:var(--navy)}.modal__close{border:0;background:var(--cream-deep);border-radius:50%;width:36px;height:36px;font-size:1rem}.modal__close:hover{background:#ece0bd}.how{margin:0;padding-inline-start:1.3rem;display:grid;gap:10px}.how h3{margin:0 0 2px;font-size:1rem;color:var(--navy);font-family:var(--font-zh)}.how p{margin:0 0 4px;color:var(--ink-soft)}.modal__note{margin:0;font-size:.85rem;color:var(--muted-ink)}.modal__done{justify-self:end}.footer{flex-shrink:0;margin-top:16px;padding:14px 0 18px;border-top:1px solid var(--line);font-size:.8rem;color:var(--muted-ink)}.footer__disclaimer{margin:0 0 6px}.footer__row{display:flex;flex-wrap:wrap;align-items:center;gap:4px 16px}.footer__date{font-variant-numeric:tabular-nums}.footer__credits{margin:8px 0 0;padding-inline-start:1.1rem;display:grid;gap:3px}.layout--desktop{display:none}.layout--mobile{display:flex;flex-direction:column}.layout--mobile .statusbar{flex-shrink:0}.layout--mobile>.bus{flex-shrink:0}@media (max-width: 899px) and (max-height: 760px){.layout--mobile.layout--mobile>.bus{display:flex;flex-direction:column;flex:0 1 auto;min-height:0}.layout--mobile .bus>.bus__now,.layout--mobile .bus>.bus__divider{flex-shrink:0}.layout--mobile .bus__list{flex-shrink:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;height:calc(100% - 86px)}}.layout--mobile .middle{min-height:60px;padding:10px 2px 12px}.layout--mobile .dock{position:sticky;bottom:0;z-index:5;margin:0 -10px;padding:8px 10px calc(8px + env(safe-area-inset-bottom));background:var(--cream);border-top:1px solid var(--line);box-shadow:0 -6px 14px #102a540f}@media (max-width: 899px){.layout--mobile{height:calc(100dvh - 132px);min-height:430px}.layout--mobile .bus{flex:0 0 auto;padding:10px 12px}.layout--mobile .bus__now{padding-bottom:6px}.layout--mobile .bus__divider{margin:2px 0 8px}.layout--mobile .bus__list{gap:4px}.layout--mobile .bus__row{height:40px;padding:0}.layout--mobile .bus__row{grid-template-columns:clamp(18px,4vw,26px) minmax(0,1fr);grid-auto-rows:40px}.layout--mobile .bus__row .bus__names{align-content:center;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:none}.layout--mobile .bus__nowline{display:block}.bus__nowlabel{font-size:.78rem}.layout--mobile .bus__zh--now{font-size:1.35rem;line-height:1.6}.layout--mobile .bus__en--now{font-size:.78rem;margin-top:.15em}.bus__row .bus__zh{font-size:1.05rem;line-height:1.2}.bus__row .bus__en{font-size:.75rem;line-height:1.1}.footer{font-size:.76rem}.link-btn{font-size:.8rem}.layout--mobile .middle{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.layout--mobile .bus__zh--now{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}.layout--mobile .dirrow{padding:4px 6px 4px 8px;gap:6px}.layout--mobile .dirrow__dirs{gap:4px}.layout--mobile .dirbtn{display:block;min-height:36px;padding:5px 8px;line-height:1.3;font-size:.85rem}.layout--mobile .dirbtn__dir{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.layout--mobile .dirbtn__en{max-width:min(9em,40%);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.72em;color:var(--muted-ink)}.layout--mobile .dirbtn__tag{display:none}.footer{font-size:.72rem;padding:10px 0 14px}}.dirrows__more{padding:6px 4px;color:var(--muted-ink);font-size:.85rem}.desktop-input{display:none}@media (min-width: 900px){.layout--mobile{display:none}.layout--desktop{display:flex;flex-direction:column;gap:14px}.statusbar--wide{background:var(--navy);border-radius:var(--radius);color:#fff;padding:8px 18px;min-height:52px}.statusbar--wide .pill{background:#fff;color:var(--navy)}.statusbar--wide .tries,.statusbar--wide .score-big,.statusbar--wide .score-big strong,.statusbar--wide .timer__text{color:#fff}.statusbar--wide .timer{background:#26406b}.statusbar--wide .timer__bar{background:#3d5c8f}.statusbar--wide .btn--ghost{color:#fff;border-color:#fff6}.desktop-grid{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(300px,.9fr);gap:20px;align-items:start}.desktop-main .bus{padding:28px 36px 32px}.desktop-main .bus__zh--now{font-size:clamp(2.2rem,3.6vw,3.6rem)}.desktop-main .bus__row .bus__zh{font-size:clamp(1.35rem,2vw,2rem)}.desktop-side{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;max-height:min(64vh,720px);overflow-y:auto}.desktop-input{display:grid;gap:8px;align-content:start;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px}.desktop-input__label{font-weight:700;color:var(--navy)}.desktop-input__row{display:flex;gap:8px}.desktop-input__field{flex:1 1 auto;min-width:0;font-family:var(--font-mono);font-size:1.5rem;font-weight:700;letter-spacing:.06em;color:var(--navy);background:var(--cream);border:2px solid var(--line);border-radius:var(--radius-sm);padding:8px 12px}.desktop-input__field:focus{outline:none;border-color:var(--magenta)}.desktop-input__help{margin:0;font-size:.85rem;color:var(--muted-ink);min-height:1.3em}}@media (max-width: 420px){.topbar__tagline{display:none}.footer,.footer__disclaimer,.footer__date,.footer .link-btn{font-size:.75rem;line-height:1.45}.topbar{display:block;padding:8px 0 6px}.topbar__actions{margin-top:4px;gap:4px}.link-btn{padding:6px 4px}.key{height:44px}.keypad-display{min-height:36px;font-size:1.2rem}.key,.keypad__spacer{min-width:22px;padding:0 1px}.key--letter{font-size:.95rem}.single-end__n{font-size:3rem}.single-end__actions .btn{padding:9px 16px}.modal__body{padding:16px 14px 18px}.modes__btn{padding:6px 11px}}
