:root{--paper:#f3eee4;--card:#fbf8f2;--card-2:#efe9dd;--ink:#1c1a15;--ink-2:#4a463d;--muted:#7a7366;--line:#e0d8c8;--line-2:#cdc3ae;--teal:#0d5c58;--teal-hover:#0a4a47;--on-teal:#f6f2ea;--teal-soft:#dce8e2;--signal:#e2482a;--signal-soft:#f7ddd3;--good:#2b7a4b;--good-soft:#dceadb;--fair:#a66a10;--fair-soft:#f3e3c3;--poor:#b3261e;--poor-soft:#f3d6cf;--ref:#8f8879;--c1:#0d5c58;--c2:#e2482a;--c3:#c08a1e;--c4:#6f4a8c;--c5:#45698c;--c6:#6b7d3a;--c7:#b4566c;--c8:#a89a80;--serif:"Fraunces", "Iowan Old Style", Georgia, serif;--sans:"Hanken Grotesk", -apple-system, "Segoe UI", system-ui, sans-serif;--ipa:"Noto Sans", "Charis SIL", "Doulos SIL", -apple-system, sans-serif;--radius:16px;--shadow:0 1px 0 #1c1a150a, 0 8px 24px -12px #1c1a151f;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root{--paper:#11100d;--card:#1a1814;--card-2:#23201b;--ink:#f0e9dc;--ink-2:#cfc6b5;--muted:#9b927f;--line:#2d2922;--line-2:#3d382f;--teal:#5fc2b6;--teal-hover:#7dd3c8;--on-teal:#0d1513;--teal-soft:#16302c;--signal:#ff6a4a;--signal-soft:#3a1c14;--good:#6cc68f;--good-soft:#15291c;--fair:#f0b44f;--fair-soft:#33260f;--poor:#ff7b6c;--poor-soft:#3a1a16;--ref:#7f7867;--c1:#5fc2b6;--c2:#ff6a4a;--c3:#e8b44a;--c4:#b48ad6;--c5:#7fa8d6;--c6:#a8bd6a;--c7:#e08aa0;--c8:#b8ab92;--shadow:none;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--paper);color:var(--ink);font:16px/1.55 var(--sans);-webkit-font-smoothing:antialiased;margin:0}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}button:disabled{opacity:.4;cursor:not-allowed}:focus-visible{outline:2px solid var(--teal);outline-offset:2px;border-radius:4px}h1,h2,h3,h4,p{margin:0}a{color:var(--teal)}kbd{border:1px solid var(--line-2);background:var(--card);border-bottom-width:2px;border-radius:5px;padding:0 5px;font:12px ui-monospace,Menlo,monospace}.muted{color:var(--muted)}.small{font-size:13.5px}.tiny{font-size:12px}.error{color:var(--poor)}.up{color:var(--good)}.down{color:var(--poor)}.good{--tone:var(--good);--tone-soft:var(--good-soft)}.fair{--tone:var(--fair);--tone-soft:var(--fair-soft)}.poor{--tone:var(--poor);--tone-soft:var(--poor-soft)}.ipa{font-family:var(--ipa)}.serif{font-family:var(--serif)}.eyebrow{letter-spacing:.14em;text-transform:uppercase;color:var(--muted);font-size:11.5px;font-weight:700}.eyebrow .num{color:var(--signal);margin-right:8px}.display{font-family:var(--serif);font-variation-settings:"opsz" 144;letter-spacing:-.02em;font-weight:600;line-height:1.05}.lede{color:var(--ink-2);max-width:60ch;font-size:18px}.stack{flex-direction:column;gap:16px;display:flex}.row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.spread{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:8px 16px;display:flex}.app{max-width:1180px;margin:0 auto;padding:18px 20px 120px}.topbar{border-bottom:1px solid var(--line);align-items:center;gap:24px;margin-bottom:26px;padding-bottom:14px;display:flex}.wordmark{color:var(--ink);background:0 0;border:0;align-items:center;gap:10px;padding:0;text-decoration:none;display:flex}.wordmark-name{font-family:var(--serif);letter-spacing:-.01em;font-size:22px;font-style:italic;font-weight:600}.wordmark-sub{letter-spacing:.14em;text-transform:uppercase;color:var(--muted);font-size:11px}.nav{gap:22px;margin-left:auto;display:flex}.nav button{color:var(--muted);background:0 0;border:0;border-bottom:2px solid #0000;padding:6px 0;font-size:15px;font-weight:600}.nav button:hover{color:var(--ink)}.nav button.active{color:var(--ink);border-bottom-color:var(--signal)}.icon-btn{border:1px solid var(--line);background:var(--card);width:36px;height:36px;color:var(--ink-2);border-radius:50%;place-items:center;display:grid}.icon-btn:hover:not(:disabled){border-color:var(--line-2);color:var(--ink)}.engine-dot{background:var(--good);border-radius:50%;width:8px;height:8px;margin-right:6px;display:inline-block}.engine-dot.mock{background:var(--fair)}.banner{border:1px solid var(--fair);background:var(--fair-soft);color:var(--fair);border-radius:12px;margin-bottom:20px;padding:10px 14px;font-size:14px}.banner.error{border-color:var(--poor);background:var(--poor-soft);color:var(--poor)}.tabbar{display:none}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:22px}.card.flat{box-shadow:none}.card.ink{background:var(--ink);color:var(--paper);border-color:var(--ink)}.card.ink .muted,.card.ink .eyebrow{color:color-mix(in srgb, var(--paper) 65%, transparent)}.card-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:6px 14px;margin-bottom:16px;display:flex}.card-head h3{font-family:var(--serif);letter-spacing:-.01em;font-size:21px;font-weight:600}.section-title{font-family:var(--serif);letter-spacing:-.015em;font-size:30px;font-weight:600}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;display:grid}.grid-3{grid-template-columns:repeat(3,minmax(0,1fr));gap:18px;display:grid}.btn{border:1px solid var(--line-2);background:var(--card);border-radius:999px;align-items:center;gap:8px;padding:9px 16px;font-size:14.5px;font-weight:600;display:inline-flex}.btn:hover:not(:disabled){border-color:var(--ink-2)}.btn.primary{background:var(--teal);border-color:var(--teal);color:var(--on-teal)}.btn.primary:hover:not(:disabled){background:var(--teal-hover);border-color:var(--teal-hover)}.btn.small{padding:5px 12px;font-size:13px}.btn.quiet{background:0 0;border-color:#0000;padding-left:8px;padding-right:8px}.btn.quiet:hover:not(:disabled){background:var(--card-2);border-color:#0000}.chip{border:1px solid var(--line-2);white-space:nowrap;background:0 0;border-radius:999px;padding:4px 12px;font-size:13.5px;font-weight:500}.chip:hover{border-color:var(--teal);color:var(--teal)}.chip.on{background:var(--teal);border-color:var(--teal);color:var(--on-teal)}.pill{text-align:center;background:var(--tone-soft,var(--card-2));min-width:34px;color:var(--tone,var(--muted));border-radius:999px;padding:1px 9px;font-size:13px;font-weight:700;display:inline-block}.pill.plain{font-weight:500}.ipa-tag{font-family:var(--ipa);background:var(--teal-soft);color:var(--teal);border-radius:6px;padding:1px 8px;font-size:14.5px}.bar{background:var(--card-2);border-radius:3px;height:6px;overflow:hidden}.bar>div{background:var(--tone,var(--teal));border-radius:3px;height:100%;transition:width .5s}.segmented{border:1px solid var(--line-2);background:var(--card);border-radius:999px;flex-wrap:wrap;gap:2px;padding:3px;display:inline-flex}.segmented button{color:var(--muted);background:0 0;border:0;border-radius:999px;padding:6px 14px;font-size:14px;font-weight:600}.segmented button.on{background:var(--ink);color:var(--paper)}.field{flex-direction:column;gap:6px;display:flex}.field label{color:var(--ink-2);font-size:13px;font-weight:600}.input,select.input,textarea.input{border:1px solid var(--line-2);background:var(--card);color:var(--ink);border-radius:12px;padding:10px 12px}textarea.input{resize:vertical;min-height:96px;font-size:19px;line-height:1.4}.empty{text-align:left}.empty p+p{margin-top:6px}.skeleton{flex-direction:column;gap:12px;display:flex}.skeleton div{background:linear-gradient(90deg, var(--card-2), var(--line), var(--card-2));background-size:200% 100%;border-radius:6px;height:16px;animation:1.2s infinite shimmer}.skeleton div:first-child{width:45%;height:28px}.skeleton div:last-child{width:70%}@keyframes shimmer{to{background-position:-200% 0}}.spinner{vertical-align:-2px;border:2px solid;border-right-color:#0000;border-radius:50%;width:14px;height:14px;animation:.8s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.fade-in{animation:.3s both rise}@keyframes rise{0%{opacity:0;transform:translateY(6px)}}.numeral{font-family:var(--serif);font-variation-settings:"opsz" 144;letter-spacing:-.03em;color:var(--tone,var(--ink));font-weight:600;line-height:.9}.numeral small{letter-spacing:0;color:var(--muted);margin-left:4px;font-size:.32em;font-weight:500}.meter-row{grid-template-columns:110px 1fr 34px;align-items:center;gap:10px;font-size:14px;display:grid}.meter-row span:first-child{color:var(--ink-2)}.meter-row strong{text-align:right;font-variant-numeric:tabular-nums}.stage-card{position:relative;overflow:hidden}.stage-card.live{border-color:var(--signal)}.target-text{font-family:var(--serif);font-variation-settings:"opsz" 72;letter-spacing:-.015em;max-width:30ch;margin:14px 0 26px;font-size:clamp(26px,3.6vw,40px);font-weight:500;line-height:1.22}.recbar{flex-wrap:wrap;align-items:center;gap:18px;display:flex}.recbtn{background:var(--signal);color:#fff;width:78px;height:78px;box-shadow:0 0 0 6px var(--signal-soft), 0 10px 24px -10px var(--signal);border:0;border-radius:50%;flex:none;place-items:center;transition:transform .15s;display:grid;position:relative}.recbtn:hover:not(:disabled){transform:scale(1.04)}.recbtn .dot{background:#fff;border-radius:50%;width:22px;height:22px;transition:border-radius .2s,width .2s,height .2s}.recbtn.live{animation:1.6s infinite onair}.recbtn.live .dot{border-radius:4px;width:20px;height:20px}.recbtn.busy .dot{display:none}@keyframes onair{0%{box-shadow:0 0 0 6px var(--signal-soft), 0 0 0 6px color-mix(in srgb, var(--signal) 45%, transparent)}to{box-shadow:0 0 0 6px var(--signal-soft), 0 0 0 22px transparent}}.rec-meta{flex-direction:column;gap:2px;min-width:0;display:flex}.rec-label{font-size:15px;font-weight:700}.rec-label .live-tag{color:var(--signal);letter-spacing:.12em;margin-right:8px;font-size:12px}.timer{font-variant-numeric:tabular-nums;font-family:var(--serif);font-size:22px}.livebars{flex:1;align-items:center;gap:3px;min-width:140px;max-width:360px;height:40px;display:flex}.livebars span{background:var(--line-2);border-radius:2px;flex:1;transition:height 60ms linear}.livebars.speaking span{background:var(--teal)}.switch{color:var(--muted);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;font-size:13.5px;display:inline-flex}.switch input{opacity:0;width:1px;height:1px;position:absolute}.switch-track{background:var(--line-2);border-radius:999px;flex:none;width:34px;height:20px;transition:background .15s;position:relative}.switch-track:after{content:"";background:#fff;border-radius:50%;width:16px;height:16px;transition:transform .15s;position:absolute;top:2px;left:2px;box-shadow:0 1px 2px #0000004d}.switch input:checked+.switch-track{background:var(--teal)}.switch input:checked+.switch-track:after{transform:translate(14px)}.switch input:focus-visible+.switch-track{outline:2px solid var(--teal);outline-offset:2px}.hint{margin-top:14px}.dropzone{border:1.5px dashed var(--line-2);border-radius:var(--radius);text-align:center;background:var(--card);cursor:pointer;padding:28px;transition:border-color .15s,background .15s}.dropzone:hover,.dropzone.over{border-color:var(--teal);background:var(--teal-soft)}.practice{grid-template-columns:240px minmax(0,1fr);align-items:start;gap:28px;display:grid}.drill-nav{max-height:calc(100vh - 36px);padding-right:6px;position:sticky;top:18px;overflow-y:auto}.drill-nav h4{margin:18px 0 6px}.drill-nav h4:first-child{margin-top:0}.drill-link{text-align:left;width:100%;color:var(--ink-2);background:0 0;border:0;border-left:2px solid #0000;justify-content:space-between;align-items:center;gap:8px;padding:5px 10px;font-size:14.5px;display:flex}.drill-link:hover:not(:disabled){color:var(--ink);border-left-color:var(--line-2)}.drill-link.active{color:var(--ink);border-left-color:var(--signal);font-weight:700}.badge{text-align:center;background:var(--tone-soft);min-width:26px;color:var(--tone);border-radius:999px;padding:0 6px;font-size:11px;font-weight:700}.drill-select{display:none}.verdict{grid-template-columns:auto minmax(0,1fr) minmax(220px,300px);align-items:center;gap:28px;display:grid}.verdict .numeral{font-size:96px}.verdict h2{font-family:var(--serif);letter-spacing:-.015em;color:var(--tone);font-size:30px;font-weight:600}.verdict-meters{flex-direction:column;gap:10px;display:flex}.sentence{font-family:var(--serif);font-variation-settings:"opsz" 48;font-size:clamp(22px,2.8vw,30px);line-height:1.75}.w{font:inherit;color:var(--ink);text-underline-offset:7px;text-decoration:underline;text-decoration-thickness:3px;-webkit-text-decoration-color:var(--tone,var(--line-2));text-decoration-color:var(--tone,var(--line-2));background:0 0;border:0;border-radius:4px;margin:0 1px;padding:0 2px}.w:hover{background:var(--card-2)}.w.sel{background:var(--tone-soft,var(--card-2))}.w sup{font-family:var(--sans);color:var(--tone);letter-spacing:0;margin-left:2px;font-size:11px;font-weight:700}.w.omitted{color:var(--muted);text-decoration-style:dotted;-webkit-text-decoration-color:var(--muted);text-decoration-color:var(--muted)}.w.omitted .strike{text-decoration:line-through}.w.inserted{color:var(--muted);-webkit-text-decoration-color:var(--line-2);text-decoration-color:var(--line-2);font-style:italic}.word-panel{border-top:1px solid var(--line);margin-top:20px;padding-top:20px}.word-panel-head{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:16px;display:flex}.word-panel-head strong{font-family:var(--serif);margin-right:6px;font-size:26px;font-weight:600}.specimens{flex-wrap:wrap;gap:10px;display:flex}.specimen{border:1px solid var(--line);background:var(--paper);text-align:center;border-radius:12px;flex-direction:column;align-items:center;gap:4px;width:82px;padding:12px 8px 10px;display:flex;position:relative}.specimen:hover{border-color:var(--line-2)}.specimen .ipa{font-size:32px;line-height:1.1}.specimen .sc{color:var(--tone);font-size:12px;font-weight:700}.specimen .heard{color:var(--poor);white-space:nowrap;font-size:11px}.specimen:after{content:"";background:var(--tone);border-radius:3px 3px 0 0;height:3px;position:absolute;bottom:0;left:10px;right:10px}button.specimen{cursor:pointer;font:inherit;color:inherit}.tips{flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.tips li{border-top:1px solid var(--line);grid-template-columns:44px 1fr;gap:12px;padding:16px 0;display:grid}.tips li:first-child{border-top:0;padding-top:0}.tip-num{font-family:var(--serif);color:var(--signal);font-size:30px;font-weight:600;line-height:1}.tips p{color:var(--ink-2);margin:6px 0 10px}.tip-note{color:var(--teal);background:var(--teal-soft);border-radius:10px;margin:0 0 10px;padding:7px 11px;font-size:13.5px}.pitch{background:var(--paper);border:1px solid var(--line);border-radius:12px;width:100%;height:auto;display:block}.pitch-mid{stroke:var(--line-2);stroke-dasharray:3 5}.pitch-label{fill:var(--muted);font-size:10px;font-family:var(--sans)}.pitch-mine{fill:none;stroke:var(--teal);stroke-width:3px;stroke-linejoin:round;stroke-linecap:round}.pitch-ref{fill:none;stroke:var(--ref);stroke-width:2px;stroke-dasharray:6 5}.key{color:var(--ink-2);font-size:13px}.key:before{content:"";vertical-align:middle;border-radius:2px;width:18px;height:3px;margin:0 6px 0 14px;display:inline-block}.key.mine:before{background:var(--teal)}.key.ref:before{background:var(--ref)}.accent-bar{background:var(--card-2);border-radius:7px;gap:2px;height:14px;display:flex;overflow:hidden}.accent-bar span{height:100%;transition:width .6s}.accent-legend{flex-wrap:wrap;gap:6px 18px;margin-top:12px;display:flex}.accent-legend>div{align-items:center;gap:7px;font-size:14px;display:flex}.swatch{border-radius:3px;flex:none;width:10px;height:10px}.accent-lead{font-family:var(--serif);letter-spacing:-.02em;font-size:clamp(26px,3.4vw,38px);font-weight:600;line-height:1.15}.accent-lead em{color:var(--signal);font-style:italic}.hero{grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:22px;margin-bottom:22px;display:grid}.hero h1{margin:10px 0 14px;font-size:clamp(38px,5.4vw,64px)}.hero .numeral{font-size:120px}.action-tile{text-align:left;border:1px solid var(--line);background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);flex-direction:column;gap:6px;min-height:132px;padding:18px;display:flex}.action-tile:hover{border-color:var(--teal)}.action-tile .glyph{font-family:var(--serif);color:var(--signal);font-size:28px;line-height:1}.action-tile strong{font-size:17px}.next-list{margin:0;padding:0;list-style:none}.next-list li{border-top:1px solid var(--line);align-items:center;gap:12px;padding:12px 0;display:flex}.next-list li:first-child{border-top:0;padding-top:0}.next-list .big-ipa{font-family:var(--ipa);text-align:center;width:52px;font-size:26px}.steps{gap:6px;margin:14px 0 4px;display:flex}.steps span{background:var(--line);border-radius:2px;flex:1;height:4px}.steps span.done{background:var(--teal)}.steps span.now{background:var(--signal)}.sound-grid{grid-template-columns:repeat(auto-fill,minmax(118px,1fr));gap:10px;display:grid}.sound-card{border:1px solid var(--line);background:var(--card);text-align:center;border-radius:14px;flex-direction:column;align-items:center;gap:2px;padding:14px 10px 12px;display:flex;position:relative}.sound-card:hover{border-color:var(--teal)}.sound-card .ipa{font-size:34px;line-height:1.15}.sound-card .ex{color:var(--ink-2);font-size:13px}.sound-card .sc{position:absolute;top:8px;right:8px}.sheet-backdrop{z-index:50;background:#11100d73;place-items:center;padding:16px;animation:.15s fade;display:grid;position:fixed;inset:0}@keyframes fade{0%{opacity:0}}.sheet{background:var(--card);border:1px solid var(--line);border-radius:20px;width:min(560px,100%);max-height:calc(100vh - 32px);padding:26px;animation:.2s rise;overflow-y:auto;box-shadow:0 30px 80px -20px #0006}.sheet .ipa.hero-ipa{font-size:72px;line-height:1}.pattern-list{flex-direction:column;gap:16px;margin:0;padding:0;list-style:none;display:flex}.pattern-list p{margin-top:4px}.lang-row{grid-template-columns:120px 1fr 44px;align-items:center;gap:10px;padding:6px 0;font-size:14.5px;display:grid}.table{border-collapse:collapse;width:100%;font-size:14.5px}.table th{text-align:left;color:var(--muted);letter-spacing:.06em;text-transform:uppercase;border-bottom:1px solid var(--line);padding:8px;font-size:12px;font-weight:600}.table td{border-bottom:1px solid var(--line);padding:9px 8px}.table td.ipa{font-size:19px}.history{margin:0;padding:0;list-style:none}.history li+li{border-top:1px solid var(--line)}.history button{text-align:left;background:0 0;border:0;align-items:center;gap:14px;width:100%;padding:11px 4px;display:flex}.history button:hover{background:var(--card-2)}.history-text{flex-direction:column;flex:1;min-width:0;display:flex}.history-text>span:first-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.spark{width:100%;height:64px;display:block}.spark-guide{stroke:var(--line-2);stroke-dasharray:3 4}.spark-fill{fill:var(--teal-soft)}.spark-line{fill:none;stroke:var(--teal);stroke-width:2px}.spark-meta{justify-content:space-between;gap:8px;margin-top:6px;display:flex}.spark-meta strong{color:var(--tone,inherit)}@media (width<=960px){.verdict{grid-template-columns:auto minmax(0,1fr)}.verdict-meters{grid-column:1/-1}.hero,.grid-2{grid-template-columns:1fr}.grid-3{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=760px){body{font-size:15.5px}.app{padding:12px 16px 104px}.topbar{margin-bottom:18px}.nav{display:none}.topbar .row{margin-left:auto}.tabbar{z-index:40;background:color-mix(in srgb, var(--paper) 92%, transparent);-webkit-backdrop-filter:blur(12px);border-top:1px solid var(--line);padding:6px 4px calc(6px + env(safe-area-inset-bottom));display:flex;position:fixed;bottom:0;left:0;right:0}.tabbar button{color:var(--muted);background:0 0;border:0;flex-direction:column;flex:1;align-items:center;gap:2px;padding:4px 0;font-size:11px;font-weight:600;display:flex}.tabbar button svg{width:22px;height:22px}.tabbar button.active{color:var(--ink)}.tabbar button.active svg{color:var(--signal)}.card{padding:18px}.practice{grid-template-columns:1fr;gap:14px}.drill-nav{display:none}.drill-select{width:100%;display:block}.grid-3{grid-template-columns:1fr}.verdict{gap:16px}.verdict .numeral{font-size:72px}.verdict h2{font-size:24px}.hero .numeral{font-size:88px}.recbtn{width:70px;height:70px}.livebars{order:5;min-width:100%;max-width:none}.hint kbd,.hint-kbd{display:none}.segmented{border-radius:14px;grid-template-columns:repeat(4,1fr);width:100%;display:grid}.segmented button{border-radius:10px;padding:7px 4px;font-size:13px}.lang-row{grid-template-columns:96px 1fr 40px}.table th:nth-child(3),.table td:nth-child(3){display:none}.specimen{width:72px}}
