:root{--ink:#1b2430;--ink-2:#3d4a5a;--muted:#5f6b7a;--line:#e1e6ec;--soft:#f3f6f9;--brand:#2c5d8f;--brand-2:color-mix(in srgb, var(--brand) 10%, #fff);--bad:#b42318;--bg:#f7f9fb;--surface:#fff;--surface-2:var(--soft);--accent:var(--brand);--shadow:0 1px 2px rgba(16, 24, 40, .05), 0 6px 18px rgba(16, 24, 40, .06);--radius:12px;--wrap:1180px;color-scheme:light}*{box-sizing:border-box}[hidden]{display:none!important}html{-webkit-text-size-adjust:100%}body{margin:0;font:16.5px/1.65 system-ui,-apple-system,segoe ui,Roboto,Helvetica,Arial,sans-serif;color:var(--ink);background:var(--bg)}a{color:var(--brand)}img,svg{max-width:100%}.wrap{max-width:var(--wrap);margin:0 auto;padding:0 16px}.skip{position:absolute;left:-999px;top:0;background:#fff;padding:8px;z-index:10}.skip:focus{left:8px}.masthead{border-bottom:1px solid var(--line);background:var(--surface);box-shadow:0 1px rgba(16,24,40,2%)}.masthead__in{display:flex;align-items:center;gap:16px;min-height:56px;flex-wrap:wrap}.logo{display:inline-flex;align-items:center;gap:9px;text-decoration:none;color:var(--ink);font-size:18.5px;font-weight:650;letter-spacing:-.015em}.logo svg{width:30px;height:30px;flex:none}.logo b{color:var(--brand)}.masthead nav{display:flex;gap:4px;flex-wrap:wrap;margin-left:auto}.masthead nav a{text-decoration:none;color:var(--muted);padding:8px 10px;border-radius:8px;font-size:15px;min-height:40px;display:inline-flex;align-items:center}.masthead nav a:hover{background:var(--soft);color:var(--ink)}.tool-head{padding:26px 0 8px}.tool-head h1{font-size:clamp(26px,4.2vw,38px);line-height:1.15;margin:0 0 8px;letter-spacing:-.025em}.lede{margin:0;color:var(--ink-2);max-width:760px;font-size:17.5px}.tool{margin:14px 0 28px}.tool__static{text-align:center}.tool__static img{width:300px;border:1px solid var(--line);box-shadow:0 2px 10px rgba(20,40,70,8%)}.tool--live{display:grid;grid-template-columns:minmax(0,1fr);gap:18px}.tool__stage{order:-1}@media(min-width:860px){.tool--live{grid-template-columns:330px minmax(0,1fr);align-items:start}.tool__stage{order:0;position:sticky;top:12px}}.tool__panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow)}.tool__presets{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}.tool__fields{display:grid;gap:10px}.field{display:grid;gap:4px}.field label{font-size:14px;font-weight:600;color:#344150}.field small{color:var(--muted);font-size:13px}.field--check{grid-template-columns:auto 1fr;align-items:center;gap:8px}.field--check label{font-weight:500}.field input[type=checkbox]{width:20px;height:20px;margin:0;accent-color:var(--brand)}select,input[type=number],input[type=text],textarea{font:inherit;font-size:15px;width:100%;min-height:40px;padding:6px 10px;border:1px solid #c5ced8;border-radius:8px;background:#fff;color:var(--ink)}textarea{min-height:80px}input[type=color]{width:56px;height:40px;padding:2px;border:1px solid #c5ced8;border-radius:8px;background:#fff}select:focus,input:focus,textarea:focus,.btn:focus-visible,summary:focus-visible{outline:2px solid var(--brand);outline-offset:1px}.length-custom{display:grid;grid-template-columns:1fr 72px;gap:6px}.tool__more{margin-top:12px;border-top:1px solid var(--line);padding-top:8px}.tool__more summary{cursor:pointer;font-weight:600;font-size:14px;color:var(--brand);padding:8px 0;min-height:40px}.tool__more .tool__fields{padding-top:6px}.tool__preview{background:#e6ebf1;border:1px solid var(--line);border-radius:var(--radius);padding:16px;display:flex;justify-content:center}.tool__preview svg{width:auto;height:auto;max-width:100%;max-height:min(72vh,760px);background:#fff;box-shadow:0 2px 12px rgba(20,40,70,.18);display:block}.tool__info{margin:10px 2px 0;font-size:14px;color:#344150;min-height:1.6em}.tool__info.bad{color:var(--bad);font-weight:600}.tool__actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}.tool__tip{font-size:13px;color:var(--muted);margin:8px 2px 0}.btn{font:inherit;font-size:15px;font-weight:600;min-height:42px;padding:8px 16px;border-radius:8px;border:1px solid var(--brand);background:#fff;color:var(--brand);cursor:pointer}.btn:hover{background:var(--brand-2)}.btn.primary{background:var(--brand);color:#fff}.btn.primary:hover{background:#234c75}.btn.ghost{border-color:#c5ced8;color:#344150}.btn.chip{min-height:36px;padding:4px 12px;font-size:14px;font-weight:500;border-color:#c5ced8;color:#344150;border-radius:18px}.btn.chip:hover{border-color:var(--brand);color:var(--brand)}.btn:disabled{opacity:.5;cursor:not-allowed}.guide{max-width:780px;padding-bottom:32px}.guide section{padding:8px 0 6px}.guide section+section{border-top:1px solid var(--line);margin-top:18px;padding-top:22px}.guide h2{font-size:25px;line-height:1.25;margin:10px 0 12px;letter-spacing:-.02em}.guide p,.guide li{color:var(--ink-2)}.guide h3{font-size:18px;margin:18px 0 6px}.guide ol,.guide ul{padding-left:22px}.guide li{margin:4px 0}.guide table{border-collapse:collapse;width:100%;font-size:15px;margin:10px 0;display:block;overflow-x:auto}.guide th,.guide td{border:1px solid var(--line);padding:6px 10px;text-align:left;white-space:nowrap}.guide th{background:var(--soft)}.samples{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:14px;margin:8px 0 4px}.samples figure{margin:0}.samples img{width:100%;height:auto;border:1px solid var(--line);background:#fff;display:block}.samples figcaption{font-size:13px;color:var(--muted);margin-top:4px}.related li{margin:6px 0}.directory{background:var(--surface);border-top:1px solid var(--line);padding:26px 0 30px}.directory h2{font-size:20px;margin:0 0 12px}.dir-grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px}.dir-grid a{display:flex;gap:10px;align-items:center;text-decoration:none;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:10px 12px;min-height:64px;height:100%;transition:border-color .15s,box-shadow .15s,transform .15s}.dir-grid a:hover{border-color:var(--brand);box-shadow:var(--shadow);transform:translateY(-1px)}.dir-grid img{width:44px;height:57px;border:1px solid var(--line);flex:none}.dir-grid b{display:block;font-size:15px}.dir-grid small{color:var(--muted);font-size:13px;line-height:1.35;display:block}.prose{max-width:760px;padding-top:22px;padding-bottom:40px}.prose h1{font-size:30px;line-height:1.25;margin:0 0 6px}.prose h2{font-size:21px;margin:26px 0 8px}.updated{color:var(--muted);font-size:14px;margin-top:0}.prose table{border-collapse:collapse;width:100%;display:block;overflow-x:auto}.prose th,.prose td{border:1px solid var(--line);padding:6px 10px;text-align:left}.footer{border-top:1px solid var(--line);background:var(--surface);padding:22px 0 30px;font-size:14px;color:var(--muted);text-align:center}.footer a{color:var(--muted);padding:8px 4px;display:inline-block}.footer__copy{margin:6px 0 0;font-size:13px}.tagline{margin:0;color:var(--muted);font-size:14px}#print-area{display:none}@media print{body>*:not(#print-area){display:none!important}#print-area{display:block}.print-sheet{break-after:page;page-break-after:always;overflow:hidden}.print-sheet:last-child{break-after:auto;page-break-after:auto}.print-sheet svg{display:block;max-width:none}html,body{margin:0;padding:0;background:#fff}}.langs{display:flex;gap:2px;flex-wrap:wrap;font-size:14px}.langs a,.langs span{padding:8px;min-height:40px;display:inline-flex;align-items:center;border-radius:8px;color:var(--muted);text-decoration:none}.langs span{color:var(--ink);font-weight:600}.langs a:hover{background:var(--soft);color:var(--ink)}.masthead nav.langs{margin-left:0}.mz-top{grid-column:1/-1;order:-3;display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center}.mz-tabs{display:flex;gap:4px;flex-wrap:wrap}.mz-tab{font:inherit;font-size:16px;font-weight:600;min-height:44px;padding:8px 22px;border-radius:10px;border:1px solid #c5ced8;background:#fff;color:var(--ink-2);cursor:pointer}.mz-tab:hover{border-color:var(--brand);color:var(--brand)}.mz-tab[aria-selected=true]{background:var(--brand);border-color:var(--brand);color:#fff}.mz-tab:focus-visible{outline:3px solid var(--brand);outline-offset:2px}.mz-stage{min-width:0;position:static;display:grid;gap:10px}@media(min-width:860px){.mz-stage{position:sticky;top:12px}}.mz-chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.mz-chips .btn.chip[aria-pressed=true]{background:var(--brand);border-color:var(--brand);color:#fff}.mz-chips .mz-chiplabel{font-weight:650;font-size:14px;color:var(--ink-2);margin-right:4px}.mz-main{display:grid;grid-template-columns:minmax(0,1fr);gap:12px;align-items:start}@media(min-width:860px){.mz-main{grid-template-columns:minmax(0,1fr)220px}}.mz-previewbox{min-height:200px;align-items:flex-start;padding:12px}.mz-sheetprev,.mz-mazeprev{width:100%;display:flex;justify-content:center;line-height:0;transition:opacity .12s}.mz-sheetprev.is-busy,.mz-mazeprev.is-busy{opacity:.45}.tool__preview .mz-mazeprev svg{width:min(100%,calc(var(--mz-maxh,72vh) * var(--mz-ar,1)));height:auto;max-width:100%;max-height:none;aspect-ratio:var(--mz-ar,1)}.tool__preview .mz-sheetprev svg{width:min(100%,calc(var(--mz-maxh,72vh) * var(--mz-ar,.77)));height:auto;max-width:100%;max-height:none;aspect-ratio:var(--mz-ar,.77)}.mz-side{display:grid;gap:8px;align-content:start}.mz-side .btn{width:100%;text-align:center}.mz-side .btn[aria-pressed=true]{background:var(--brand-2)}.mz-side .tool__info,.mz-side .tool__tip{margin:0}.mz-viewbar{display:flex;gap:6px;flex-wrap:wrap}.mz-viewbar .btn.chip[aria-pressed=true]{background:var(--brand);border-color:var(--brand);color:#fff}@media(max-width:859px){.mz-side{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}.mz-side .tool__info,.mz-side .tool__tip,.mz-side .mz-viewbar,.mz-side .mz-progress{grid-column:1/-1}}.mz-progress{display:block;width:100%;height:10px;accent-color:var(--brand)}.mz-progress[hidden]{display:none}.mz-panel .mz-sec{display:grid;gap:10px}.mz-sec[hidden]{display:none}.mz-sechead{font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:4px 0 -2px}.mz-seg{display:flex;flex-wrap:wrap;gap:6px}.mz-seg .btn.chip[aria-pressed=true]{background:var(--brand);border-color:var(--brand);color:#fff}.mz-twin{display:grid;grid-template-columns:1fr 1fr;gap:10px}.mz-range{display:flex;align-items:center;gap:10px}.mz-range input[type=range]{flex:1;min-width:0;accent-color:var(--brand);min-height:40px}.mz-range output{min-width:3.2em;text-align:right;font-variant-numeric:tabular-nums;font-weight:600}.mz-algo-desc{margin:0}.field input[type=color]{width:56px;height:40px;padding:2px;border:1px solid #c5ced8;border-radius:8px;background:#fff;cursor:pointer}.mz-seedrow{display:flex;gap:8px;align-items:stretch}.mz-seedrow input{flex:1;min-width:0}.mz-shapes{display:grid;grid-template-columns:repeat(auto-fill,minmax(62px,1fr));gap:6px}.mz-shape{display:grid;justify-items:center;gap:2px;padding:6px 2px 4px;min-height:64px;border:1px solid #c5ced8;border-radius:10px;background:#fff;color:var(--ink-2);cursor:pointer;font:inherit;font-size:11.5px;line-height:1.15}.mz-shape svg{width:36px;height:36px;display:block;fill:currentColor}.mz-shape:hover{border-color:var(--brand);color:var(--brand)}.mz-shape[aria-pressed=true]{border-color:var(--brand);background:var(--brand-2);color:var(--brand);box-shadow:inset 0 0 0 1px var(--brand)}.mz-shape:focus-visible{outline:3px solid var(--brand);outline-offset:2px}.mz-shape span{max-width:100%;overflow-wrap:anywhere;text-align:center}.mz-setname{font-size:13px;font-weight:650;color:var(--ink-2);margin:6px 0 4px}@media(max-width:420px){.mz-tab{padding:8px 14px;flex:auto}.mz-twin{grid-template-columns:1fr 1fr}}@media print{.mz-sheet{width:auto}}.mz-seg{margin-bottom:4px}.mz-game-stage{min-width:0}.mz-game-hud{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 16px;max-width:720px;margin:0 auto 8px;font-size:15px;color:var(--ink-2)}.mz-game-hud-title{font-weight:700;color:var(--ink);margin-right:auto}.mz-game-stat b{color:var(--ink);font-variant-numeric:tabular-nums}.mz-game-time{display:inline-block;min-width:3.6em}.mz-game-boardwrap{position:relative;max-width:720px;margin:0 auto;background:#fff;border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 2px 12px rgba(20,40,70,.12);overflow:hidden;line-height:0}.mz-game-board{width:100%}.mz-game-canvas{display:block;margin:0 auto;max-width:100%;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;cursor:grab}.mz-game-canvas:active{cursor:grabbing}.mz-game-canvas:focus-visible{outline:3px solid var(--brand);outline-offset:-3px}.mz-game-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,.88);padding:12px;line-height:1.4}.mz-game-overlay[hidden]{display:none}.mz-game-win{background:var(--surface);border:1px solid var(--line);border-radius:14px;box-shadow:0 6px 28px rgba(20,40,70,.22);padding:18px 20px;text-align:center;max-width:340px;width:100%}.mz-game-win h3{margin:0 0 6px;font-size:24px}.mz-game-newbest{margin:0 0 8px;font-weight:700;color:#2f9e44}.mz-game-note{margin:8px 0 0;font-size:13px;color:var(--muted)}.mz-game-results{display:flex;justify-content:center;gap:18px;margin:10px 0 14px}.mz-game-results dt{font-size:13px;color:var(--muted)}.mz-game-results dd{margin:0;font-size:20px;font-weight:700;font-variant-numeric:tabular-nums}.mz-game-win-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:8px}.mz-game-pad{display:grid;grid-template-columns:repeat(3,60px);grid-template-areas:". up ." "left down right";gap:8px;justify-content:center;margin:14px auto 0;user-select:none;-webkit-user-select:none}.mz-game-pad-btn{width:60px;height:60px;min-height:44px;font:inherit;font-size:26px;line-height:1;border-radius:14px;border:1px solid #c5ced8;background:#fff;color:var(--ink);box-shadow:0 2px #c5ced8;cursor:pointer;touch-action:none;-webkit-tap-highlight-color:transparent}.mz-game-pad-btn:active{background:var(--brand);color:#fff;transform:translateY(2px);box-shadow:none}.mz-game-pad-btn:focus-visible{outline:3px solid var(--brand);outline-offset:2px}.mz-game-pad-up{grid-area:up}.mz-game-pad-left{grid-area:left}.mz-game-pad-down{grid-area:down}.mz-game-pad-right{grid-area:right}.mz-game-tip{max-width:720px;margin-left:auto;margin-right:auto}.mz-game-levelnav{display:flex;gap:8px}.mz-game-levelnav .btn{flex:1}.mz-game-panel [hidden]{display:none!important}@media(hover:hover) and (pointer:fine) and (min-width:900px){.mz-game-pad{margin-top:10px}.mz-game-pad-btn{width:48px;height:48px;font-size:22px}.mz-game-pad{grid-template-columns:repeat(3,48px)}}@media(max-width:420px){.mz-game-hud{font-size:14px;gap:2px 12px}.mz-game-win{padding:14px}}@media(prefers-reduced-motion:reduce){.mz-game-pad-btn:active{transform:none}}.mz-game-stage--car .mz-game-boardwrap{background:#9ad27e;border-color:#6fae55}.mz-game-stage--car .mz-game-canvas{cursor:pointer}.mz-game-stage--car .mz-game-pad-btn:active{background:#d6322c;border-color:#d6322c}.mz-game-carline{margin:0 0 8px;font-size:18px;font-weight:700;color:var(--ink)}.mz-letter-panel textarea{width:100%;min-height:96px;font:inherit;font-size:16px;padding:10px 12px;border:1px solid #c5ced8;border-radius:10px;resize:vertical;box-sizing:border-box;background:#fff;color:var(--ink)}.mz-letter-panel textarea:focus-visible{outline:3px solid var(--brand);outline-offset:1px}.mz-letter-panel .field input[type=text],.mz-letter-panel .field input[type=number],.mz-letter-panel .field select{min-height:44px}.mz-letter-notes{display:grid;gap:6px}.mz-letter-notes:empty{display:none}.mz-letter-note{margin:0;padding:8px 12px;border-radius:10px;background:var(--surface-2,#f1f5f9);color:var(--ink-2);font-size:14px}.mz-letter-note.bad{background:#fdecec;color:#8a1c1c}.mz-letter-prev{width:100%;display:flex;justify-content:center;line-height:0}.tool__preview .mz-letter-prev svg{width:min(100%,calc(var(--mz-maxh,72vh) * var(--mz-ar,1)));height:auto;max-width:100%;max-height:none;aspect-ratio:var(--mz-ar,1)}.tool__preview .mz-letter-page svg{width:min(100%,calc(var(--mz-maxh,72vh) * var(--mz-ar,.77)))}.mz-letter-panel .mz-twin>.field{min-width:0}@media(max-width:380px){.mz-letter-panel .mz-twin{grid-template-columns:1fr}}.mz-solver{display:grid;gap:14px;min-width:0}.mz-solver-tabs{display:flex;gap:4px;flex-wrap:wrap}.mz-solver-tab{font:inherit;font-size:16px;font-weight:600;min-height:44px;padding:8px 18px;border-radius:10px;border:1px solid #c5ced8;background:#fff;color:var(--ink-2);cursor:pointer}.mz-solver-tab:hover{border-color:var(--brand);color:var(--brand)}.mz-solver-tab[aria-selected=true]{background:var(--brand);border-color:var(--brand);color:#fff}.mz-solver-tab:focus-visible{outline:3px solid var(--brand);outline-offset:2px}.mz-solver-pane{display:grid;gap:12px;min-width:0}.mz-solver-pane[hidden]{display:none}.mz-solver-drop{display:grid;justify-items:center;gap:10px;text-align:center;padding:26px 16px;border:2px dashed #9fb0c3;border-radius:var(--radius);background:var(--surface-2,#f3f6f9)}.mz-solver-drop.is-over{border-color:var(--brand);background:color-mix(in srgb,var(--brand) 8%,#fff)}.mz-solver-drop:focus-visible{outline:3px solid var(--brand);outline-offset:2px}.mz-solver-drop-title{margin:0;font-weight:650;font-size:18px;color:var(--ink)}.mz-solver-drop-hint{margin:0;font-size:14px;color:var(--muted);max-width:46ch}.mz-solver-file{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden;pointer-events:none}.mz-solver-row{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}.mz-solver .btn{min-height:44px}.mz-solver-work[hidden]{display:none}.mz-solver-work{display:grid;gap:12px;min-width:0}.mz-solver-stage{background:#e6ebf1;border:1px solid var(--line);border-radius:var(--radius);padding:8px;min-width:0}.mz-solver-canvas{display:block;width:100%;height:auto;margin:0 auto;background:#fff;touch-action:none;cursor:crosshair;user-select:none;-webkit-user-select:none}.mz-solver-canvas.is-move{cursor:grab}.mz-solver-bar{display:flex;flex-wrap:wrap;gap:8px}.mz-solver-bar .btn[aria-pressed=true]{background:var(--brand);color:#fff}.mz-solver-opts{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));align-items:end}.mz-solver-opts .field{min-width:0}.mz-solver-opts input[type=range]{width:100%;min-height:44px;accent-color:var(--brand)}.mz-solver-opts input[type=color]{min-height:44px}.mz-solver-opts .field--check{min-height:44px;align-items:center}.mz-solver-status{margin:0;font-size:14px;color:#344150;min-height:1.6em;overflow-wrap:anywhere}.mz-solver-status.bad{color:var(--bad);font-weight:600}.mz-solver-tip{margin:0}@media(max-width:420px){.mz-solver-tab{flex:auto;padding:8px 12px}.mz-solver-drop{padding:18px 12px}}.mz-solver-drop[hidden]{display:none}.wrap{max-width:var(--wrap,1180px)}.page-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:8px 48px;align-items:start}.page-grid>.guide,.page-grid>.prose{max-width:760px;width:100%;padding-top:0}.page-grid>.prose{padding-top:22px}@media(min-width:1100px){.page-grid{grid-template-columns:minmax(0,1fr)300px}.page-grid>.guide,.page-grid>.prose{max-width:none}.page-side{position:sticky;top:16px;max-height:calc(100vh - 32px);overflow-y:auto;padding-top:18px}}.page-side{display:grid;gap:16px;padding-bottom:28px;font-size:14.5px}.side-card{background:var(--surface,#fff);border:1px solid var(--line,#dfe5ec);border-radius:var(--radius,10px);padding:14px 16px}.side-title{margin:0 0 8px;font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--muted,#5a6675)}.side-card ol,.side-card ul{list-style:none;margin:0;padding:0;display:grid;gap:2px}.side-card li a{display:block;padding:5px 8px;margin:0 -8px;border-radius:6px;color:var(--ink-2,var(--ink,#1d2733));text-decoration:none;line-height:1.35}.side-card li a:hover{background:var(--surface-2,var(--soft,#f4f7fa));color:var(--accent,var(--brand,#2c5d8f))}.side-toc li a{border-left:2px solid transparent;border-radius:0 6px 6px 0;margin-left:-16px;padding-left:14px}.side-toc li a:hover{border-left-color:var(--accent,var(--brand,#2c5d8f))}.side-all{display:inline-block;margin-top:8px;font-weight:600;text-decoration:none}.side-ad:empty{display:none}@media(max-width:1099px){.side-toc{display:none}}.home-tools .directory{background:0 0;border:0;padding:6px 0 22px}.home-tools .directory .wrap{padding:0;max-width:none}.guide h2[id],.prose h2[id]{scroll-margin-top:16px}