:root{--paper: #fbfcfe;--paper-2: #eef3f8;--ink: #0d1b2a;--ink-soft: #51637a;--line: #dce4ec;--accent: #3b82f6;--accent-ink: #ffffff;--accent-strong: color-mix(in srgb, var(--accent) 60%, var(--ink));--wrong: #d8453f;--footer-bg: #0d1b2a;--footer-ink: #eaf1f8;--footer-soft: #7689a0;--maxw: 1080px;--maxw-read: 720px;--radius: 14px;--font: "Inter", "Noto Sans TC", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "PingFang TC", "Microsoft JhengHei", sans-serif;--display: "Montserrat", "Noto Sans TC", "PingFang TC", "Microsoft JhengHei", system-ui, sans-serif;--mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace}*{box-sizing:border-box}html{font-family:var(--font);color:var(--ink);background:var(--paper);line-height:1.65;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}body{margin:0}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3{font-family:var(--display);line-height:1.15;letter-spacing:-.01em}img{max-width:100%;height:auto}.wrap{max-width:var(--maxw);margin-inline:auto;padding-inline:24px}.wrap.reading,.wrap.prose{max-width:var(--maxw-read)}.mark-dark{display:none}.eyebrow{font:600 12px/1 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--ink-soft)}.site-header{border-bottom:1px solid var(--line);background:color-mix(in srgb,var(--paper) 85%,transparent);backdrop-filter:saturate(140%) blur(8px);position:sticky;top:0;z-index:10}.site-header .wrap{display:flex;align-items:center;justify-content:space-between;height:66px}.brand{display:inline-flex;align-items:center;gap:11px;color:var(--ink)}.brand:hover{text-decoration:none}.brand img{display:block;height:26px;width:auto}.brand .wordmark{font:800 17px/1 var(--display);letter-spacing:.1em}.nav{display:flex;gap:26px;font:500 .95rem/1 var(--font)}.nav a{color:var(--ink-soft)}.nav a:hover{color:var(--ink);text-decoration:none}.site-footer{margin-top:96px;background:var(--footer-bg);color:var(--footer-soft)}.site-footer .wrap{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;padding-block:22px}.site-footer .brand{color:var(--footer-ink);gap:10px}.site-footer .brand img{height:18px}.site-footer .brand .wordmark{font:700 13px/1 var(--display);letter-spacing:.1em}.site-footer .copy{font-size:.8rem}.hero{position:relative;padding-block:84px 56px;overflow:hidden}.hero .ghost{position:absolute;right:-36px;top:-24px;width:min(360px,42vw);height:auto;pointer-events:none;opacity:.07}.hero .ghost.mark-dark{opacity:.12}.hero .eyebrow{color:var(--accent);display:block;margin-bottom:20px}.hero h1{margin:0;font:800 clamp(2.5rem,6.4vw,3.9rem)/1.05 var(--display);letter-spacing:-.02em;max-width:18ch;position:relative}.hero .tagline{margin:22px 0 0;font:400 clamp(1.05rem,2.4vw,1.2rem)/1.55 var(--font);color:var(--ink-soft);max-width:48ch;position:relative}.hero .cta{display:flex;gap:14px;margin-top:32px;flex-wrap:wrap}.btn{display:inline-block;background:var(--accent);color:var(--accent-ink);padding:14px 24px;border-radius:11px;font:600 .95rem/1 var(--font)}.btn:hover{text-decoration:none;filter:brightness(1.05)}.btn-ghost{background:transparent;color:var(--ink);border:1px solid var(--line)}.section{padding-block:32px}.section>h2,.duo h2{font:600 11px/1 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--ink-soft);margin:0 0 18px}.project{display:grid;grid-template-columns:1.05fr 1fr;border:1px solid var(--line);border-radius:16px;overflow:hidden;background:var(--paper)}.project .shot{aspect-ratio:1024 / 500;background:#e2ddd3;border-right:1px solid var(--line);overflow:hidden}.project .shot img{width:100%;height:100%;object-fit:contain;display:block}.project .body{padding:32px;display:flex;flex-direction:column;justify-content:center}.project .titlerow{display:flex;align-items:center;gap:10px;margin-bottom:14px}.project .body h3,.project .body h1{margin:0;font:700 1.5rem/1 var(--display);letter-spacing:-.01em}.project p{margin:0;color:var(--ink-soft)}.project .cta{margin-top:20px}.badge{font:600 10px/1 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--accent);background:color-mix(in srgb,var(--accent) 14%,transparent);padding:5px 9px;border-radius:20px}.duo{display:grid;grid-template-columns:1fr 1fr;border:1px solid var(--line);border-radius:16px;overflow:hidden}.duo>div{padding:32px}.duo>div+div{border-left:1px solid var(--line)}.duo h2{margin:0 0 12px}.duo p{margin:0;color:var(--ink-soft)}.tag{display:inline-block;font:600 .72rem/1 var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft);background:var(--paper-2);border-radius:999px;padding:4px 11px}.post-list{list-style:none;padding:0;margin:0}.post-list li{padding-block:20px;border-bottom:1px solid var(--line)}.post-list a{display:inline-flex;align-items:baseline;gap:.4em;color:var(--ink);font:700 1.15rem/1.3 var(--display);letter-spacing:-.01em}.post-list a:after{content:"→";color:var(--accent-strong)}.post-list a:hover,.post-list a:focus-visible{color:var(--accent-strong);text-decoration:none}.post-list a:focus-visible{outline:3px solid var(--accent-strong);outline-offset:4px;border-radius:2px}.post-list .meta{color:var(--ink-soft);font:500 .8rem/1 var(--mono);letter-spacing:.04em;margin-top:6px}.post-list p{margin:8px 0 0;color:var(--ink-soft)}.prose{padding-block:56px}.prose h1{font-size:clamp(1.9rem,4vw,2.5rem);margin:0 0 8px}.prose .meta{color:var(--ink-soft);font:500 .85rem/1 var(--mono);letter-spacing:.04em;margin-bottom:36px}.prose p,.prose ul,.prose ol{margin-block:1em}.prose pre{background:#0d1b2a;color:#e6edf5;padding:16px;border-radius:10px;overflow-x:auto}.prose code{font-family:var(--mono);font-size:.88em}.prose img{max-width:100%;height:auto;border-radius:var(--radius)}.prose table{width:100%;margin-block:1.75em;border:1px solid var(--line);border-radius:var(--radius);border-collapse:separate;border-spacing:0;overflow:hidden;font-size:.95rem;line-height:1.8}.prose th,.prose td{padding:15px 20px;text-align:left;vertical-align:top;border-bottom:1px solid var(--line)}.prose th:not(:last-child),.prose td:not(:last-child){border-right:1px solid var(--line)}.prose tr:last-child th,.prose tr:last-child td{border-bottom:0}.prose thead th{background:var(--paper-2);font:700 .82rem/1.5 var(--display);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-soft);white-space:nowrap}.prose tbody td:first-child{font-weight:700;color:var(--ink);white-space:nowrap}.prose figure.screenshot{margin-block:1.75em;text-align:center}.prose figure.screenshot img{max-width:260px;border:1px solid var(--line)}.prose figure.screenshot figcaption{margin-top:10px;font-size:.85rem;color:var(--ink-soft)}.cta-note{margin:14px 0 0;font:500 .8rem/1.5 var(--font);color:var(--ink-soft)}.prose .shots{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:18px;margin-block:1.75em}.prose .shots figure{margin:0;text-align:center}.prose .shots img{width:100%;border:1px solid var(--line);border-radius:12px;display:block}.prose .shots figcaption{margin-top:10px;font-size:.85rem;color:var(--ink-soft)}.prose .featgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1px;background:var(--line);border:1px solid var(--line);border-radius:14px;overflow:hidden;margin-block:1.75em;padding:0;list-style:none}.prose .featgrid li{background:var(--paper);padding:18px 20px;margin:0}.prose .featgrid strong{display:block;font:600 .95rem/1.3 var(--display);margin-bottom:4px}.prose .featgrid span{font-size:.85rem;color:var(--ink-soft);line-height:1.5}.prose .pricing{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;margin-block:1.75em}.prose .pricing>div{border:1px solid var(--line);border-radius:14px;padding:22px;background:var(--paper)}.prose .pricing>div.is-pro{border-color:var(--accent)}.prose .pricing h3{margin:0 0 4px;font:700 1.1rem/1.2 var(--display)}.prose .pricing .tier-note{margin:0 0 14px;font:500 .82rem/1.4 var(--font);color:var(--ink-soft)}.prose .pricing ul{margin:0;padding-left:1.1em}.prose .pricing li{font-size:.9rem}.prose .sgrid{display:grid;grid-template-columns:repeat(9,1fr);position:relative;width:min(100%,380px);margin:1.75em auto;border:2px solid var(--ink);border-radius:6px;overflow:hidden;background:var(--paper)}.prose .sgrid i{aspect-ratio:1;display:flex;align-items:center;justify-content:center;font:600 clamp(.85rem,3.4vw,1.05rem)/1 var(--font);font-style:normal;color:var(--ink);border-right:1px solid var(--line);border-bottom:1px solid var(--line)}.prose .sgrid i:nth-child(9n){border-right:0}.prose .sgrid i:nth-child(3n):not(:nth-child(9n)){border-right:2px solid var(--ink)}.prose .sgrid i:nth-child(n+73){border-bottom:0}.prose .sgrid i:nth-child(n+19):nth-child(-n+27),.prose .sgrid i:nth-child(n+46):nth-child(-n+54){border-bottom:2px solid var(--ink)}.prose .sgrid i.hl{background:color-mix(in srgb,var(--accent) 13%,transparent)}.prose .sgrid i.tgt{background:color-mix(in srgb,var(--accent) 32%,transparent);font-weight:700}.prose .sgrid i.q{color:var(--accent-strong)}.prose .sgrid i.ent{color:var(--accent-strong);font-weight:500}.prose .sgrid i.fog{color:transparent;background:color-mix(in srgb,var(--ink) 20%,var(--paper))}.prose .sgrid i.mk{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr);padding:10%}.prose .sgrid i.mk b{display:grid;place-items:center;font:600 clamp(.45rem,1.6vw,.65rem)/1 var(--font)}.prose .sgrid i.mk b.d1{grid-area:1 / 1}.prose .sgrid i.mk b.d2{grid-area:1 / 2}.prose .sgrid i.mk b.d3{grid-area:1 / 3}.prose .sgrid i.mk b.d4{grid-area:2 / 1}.prose .sgrid i.mk b.d5{grid-area:2 / 2}.prose .sgrid i.mk b.d6{grid-area:2 / 3}.prose .sgrid i.mk b.d7{grid-area:3 / 1}.prose .sgrid i.mk b.d8{grid-area:3 / 2}.prose .sgrid i.mk b.d9{grid-area:3 / 3}.prose .sgrid i.mk b.x{color:var(--ink-soft);text-decoration:line-through}.prose .sgrid .overlay{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.prose .sgrid .overlay.under{z-index:0}.prose .sgrid i{position:relative;z-index:1}.prose .sgrid .overlay.over{z-index:2}.prose .sgrid .overlay .x-diagonal{stroke:var(--accent);stroke-width:.08}.prose .sgrid .overlay .kropki{r:.16;stroke:var(--ink);stroke-width:.06}.prose .sgrid .overlay .kropki.white{fill:var(--paper)}.prose .sgrid .overlay .kropki.black{fill:var(--ink)}.prose .sgrid .overlay .consecutive-bar{stroke:var(--ink);stroke-width:.06;stroke-linecap:round}.prose .sgrid .overlay .xv-mark{fill:var(--ink);font-size:.3px;font-weight:600;paint-order:stroke;stroke:var(--paper);stroke-width:.08}.prose .sgrid .overlay .thermometer-line{fill:none;stroke:var(--accent);stroke-opacity:.3;stroke-linecap:round;stroke-linejoin:round;stroke-width:.34}.prose .sgrid .overlay .thermometer-bulb{r:.3;fill:var(--accent);fill-opacity:.42}.prose .sgrid .overlay .renban-line{fill:none;stroke:var(--accent);stroke-opacity:.34;stroke-linecap:round;stroke-linejoin:round;stroke-width:.24}.prose .sgrid .overlay .arrow-line{fill:none;stroke:var(--accent);stroke-opacity:.42;stroke-linecap:round;stroke-linejoin:round;stroke-width:.12}.prose .sgrid .overlay .arrow-head{fill:var(--accent);fill-opacity:.56}.prose .sgrid .overlay .arrow-circle{r:.33;fill:none;stroke:var(--accent);stroke-opacity:.56;stroke-width:.1}.prose figure.board{margin:1.75em 0}.prose figure.board .sgrid{margin-block:0 10px}.prose figure.board figcaption{text-align:center;font-size:.85rem;color:var(--ink-soft)}.learn-line{margin-top:34px}.learn-line h3{margin:0 0 4px;font:700 1.05rem/1.2 var(--display)}.learn-line .line-blurb,.learn-line .line-soon{margin:0;font-size:.9rem;color:var(--ink-soft)}.learn-line .line-soon{margin-top:10px;font-style:italic}.prose .learn-cta{margin-top:2.5em;padding:24px;border:1px solid var(--line);border-radius:14px;background:var(--paper-2)}.prose .learn-cta h2{margin:0 0 8px;font:700 1.15rem/1.2 var(--display)}.prose .learn-cta p{margin:0}.prose .learn-cta .links{margin-top:16px;display:flex;flex-wrap:wrap;gap:8px 20px;font-weight:600}.prose .learn-cta[hidden]{display:none}.prose .learn-cta.post-puzzle{border-color:var(--accent)}.prose .learn-cta.post-puzzle .links a,.prose .learn-persist a{color:var(--accent-strong)}.prose .learn-persist{margin-top:2.5em;font-size:.92rem;color:var(--ink-soft)}.lang-menu{position:relative}.lang-menu summary{display:inline-flex;align-items:center;gap:6px;cursor:pointer;color:var(--ink-soft);list-style:none}.lang-menu summary::-webkit-details-marker{display:none}.lang-menu summary:hover,.lang-menu[open] summary{color:var(--ink)}.lang-menu summary:after{content:"";width:5px;height:5px;border-right:1.6px solid currentColor;border-bottom:1.6px solid currentColor;transform:translateY(-2px) rotate(45deg)}.lang-menu[open] summary:after{transform:translateY(1px) rotate(-135deg)}.lang-menu svg{flex:none}.lang-panel{position:absolute;top:calc(100% + 12px);right:0;z-index:20;min-width:190px;padding:8px;border:1px solid var(--line);border-radius:12px;background:var(--paper);box-shadow:0 12px 32px #00000024}.lang-panel{line-height:1.4}.lang-panel ul{margin:0;padding:0;list-style:none}.lang-panel li{margin:0}.lang-panel a{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:7px 10px;border-radius:8px;color:var(--ink-soft);white-space:nowrap}.lang-panel a:hover{background:var(--paper-2);color:var(--ink);text-decoration:none}.lang-panel a[aria-current]{font-weight:700;color:var(--ink)}.lang-panel .lang-tag{font:600 .68rem/1 var(--display);letter-spacing:.06em;padding:3px 5px;border:1px solid var(--line);border-radius:4px;color:var(--ink-soft)}.lang-panel .lang-note{margin:8px 4px 2px;padding-top:8px;border-top:1px solid var(--line);font-size:.8rem;line-height:1.45;color:var(--ink-soft);white-space:normal;max-width:210px}@media(max-width:720px){.project{grid-template-columns:1fr}.project .shot{border-right:none;border-bottom:1px solid var(--line)}.duo{grid-template-columns:1fr}.duo>div+div{border-left:none;border-top:1px solid var(--line)}.nav{gap:16px}.prose table{font-size:.9rem}.prose th,.prose td{padding:12px 13px}.lang-menu .lang-current{display:none}}@media(prefers-color-scheme:dark){:root{--paper: #0a1119;--paper-2: #111e2b;--ink: #eaf1f8;--ink-soft: #93a4b8;--line: #1e2c3a;--accent: #5b96f7;--accent-ink: #06101a;--wrong: #f2726c}.mark-light{display:none}.mark-dark{display:block}}.prose figure.board.play .sgrid i{cursor:default}.prose figure.board.play .sgrid i[role=button]{cursor:pointer}.prose figure.board.play .sgrid i.sel{background:color-mix(in srgb,var(--accent) 18%,var(--paper))}.prose figure.board.play .sgrid i:focus-visible{outline:3px solid var(--accent-strong);outline-offset:-3px;position:relative;z-index:1}.prose figure.board.play .sgrid i.err{background:color-mix(in srgb,var(--wrong) 22%,var(--paper));animation:board-reject .35s ease}@keyframes board-reject{50%{background:color-mix(in srgb,var(--wrong) 45%,var(--paper))}}@media(prefers-reduced-motion:reduce){.prose figure.board.play .sgrid i.err{animation:none;background:color-mix(in srgb,var(--wrong) 45%,var(--paper))}}.prose figure.board.play .pad{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;width:min(100%,380px);margin:10px auto 0}.prose figure.board.play .pad button{min-height:48px;border:1px solid var(--line);border-radius:6px;background:var(--paper-2);color:var(--ink);font:600 1rem/1 var(--font)}.prose figure.board.play .pad button:focus-visible{outline:3px solid var(--accent-strong);outline-offset:2px}.prose figure.board.play .board-status{min-height:1.65em;margin:10px auto 0;width:min(100%,380px);color:var(--ink-soft);text-align:center}.prose figure.board.play.done .sgrid{border-color:var(--accent)}
