@font-face{font-family:Playfair Display;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/playfair-display-latin-400-normal-CFtfchNt.woff2)format("woff2")}@font-face{font-family:Playfair Display;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/playfair-display-latin-ext-400-normal-BxlSGspa.woff2)format("woff2")}@font-face{font-family:Playfair Display;font-style:italic;font-display:swap;font-weight:400;src:url(/assets/playfair-display-latin-400-italic-LeeEXsx5.woff2)format("woff2")}@font-face{font-family:Playfair Display;font-style:italic;font-display:swap;font-weight:400;src:url(/assets/playfair-display-latin-ext-400-italic-zVOgzDMq.woff2)format("woff2")}@font-face{font-family:Playfair Display;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/playfair-display-latin-500-normal-DIxvyhka.woff2)format("woff2")}@font-face{font-family:EB Garamond;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/eb-garamond-latin-400-normal-BCNrxLz_.woff2)format("woff2")}@font-face{font-family:EB Garamond;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/eb-garamond-latin-ext-400-normal-o4A__6QZ.woff2)format("woff2")}@font-face{font-family:EB Garamond;font-style:italic;font-display:swap;font-weight:400;src:url(/assets/eb-garamond-latin-400-italic-DSEbMgZu.woff2)format("woff2")}@font-face{font-family:EB Garamond;font-style:italic;font-display:swap;font-weight:400;src:url(/assets/eb-garamond-latin-ext-400-italic-V7s3nWfX.woff2)format("woff2")}@font-face{font-family:EB Garamond;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/eb-garamond-latin-500-normal-DehAIUv0.woff2)format("woff2")}@font-face{font-family:Manrope;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/manrope-latin-500-normal-BYYD-dBL.woff2)format("woff2")}@font-face{font-family:Manrope;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/manrope-latin-600-normal-4f0koTD-.woff2)format("woff2")}@font-face{font-family:Manrope;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/manrope-latin-700-normal-BZp_XxE4.woff2)format("woff2")}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--wine:#4a121a;--wine-deep:#2a080d;--wine-2:#5c1d24;--gold:#c9a86a;--gold-text:#7d6020;--rose:#f4cad4;--petal:#fdf2f4;--parch:#faf6f0;--linen:#f2ece1;--alab:#fffbf7;--hair:#e5dacb;--hair-rose:#e8adb9;--ink:#261a1c;--berry:#9e3d48;--muted:#6b5557;--nav-muted:#6f5c5e;--on-wine-soft:#e9d6d8;--on-wine-dim:#c9a3a8;--gilt-bg:#fbf4e6;--gilt-hair:#ecdcb8;--ok-bg:#f3ead6;--ok-text:#6b5113;--expired-bg:#ece7e1;--expired-text:#5f5052;--serif:"Playfair Display", "Noto Serif SC", "Noto Serif KR", serif;--body:"EB Garamond", "Noto Serif SC", "Noto Serif KR", serif;--cjk:"Noto Serif SC", "Noto Serif KR", serif;--ui:"Manrope", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--tap:44px;--radius:14px;--gutter:16px;--column:560px;--shadow:0 12px 36px -6px #4a121a14}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;background:var(--parch)}body{background:var(--parch);min-height:100dvh;color:var(--ink);font-family:var(--body);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;margin:0;font-size:17px;line-height:1.45}h1,h2,p{margin:0}a{color:inherit}:lang(zh){font-family:Noto Serif SC,Noto Serif KR,serif}:lang(ko){font-family:Noto Serif KR,Noto Serif SC,serif}.cjk{font-family:var(--cjk);font-weight:500}:focus-visible{outline:2px solid var(--wine);outline-offset:2px}.panel :focus-visible,.on-wine :focus-visible{outline-color:var(--alab)}#root{min-height:100dvh}.app{flex-direction:column;min-height:100dvh;display:flex}.app__content{width:100%;max-width:var(--column);padding:16px max(var(--gutter), env(safe-area-inset-right)) 24px max(var(--gutter), env(safe-area-inset-left));flex:1;margin:0 auto}.screen{flex-direction:column;align-items:flex-start;gap:16px;display:flex}.topbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 12px;width:100%;min-height:32px;display:flex}.topbar .label{white-space:nowrap}.splash{place-items:center;min-height:100dvh;display:grid}.label{font-family:var(--ui);letter-spacing:.16em;text-transform:uppercase;color:var(--muted);font-size:11px;font-weight:600}.title{font-family:var(--serif);letter-spacing:-.01em;color:var(--wine);font-size:28px;font-weight:400;line-height:1.2}.title em{font-style:italic}.lead{color:var(--muted);text-wrap:pretty;font-size:17px}.card{background:var(--alab);border:1px solid var(--hair);border-radius:var(--radius);padding:14px}.panel{background:var(--wine);color:var(--alab);border-radius:22px;padding:18px;position:relative;overflow:hidden}.panel:after{content:"";pointer-events:none;border:1px solid #c9a86a47;border-radius:16px;position:absolute;inset:8px}.btn{min-height:var(--tap);font-family:var(--ui);letter-spacing:.12em;text-transform:uppercase;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:999px;justify-content:center;align-items:center;gap:8px;padding:0 22px;font-size:12px;font-weight:700;text-decoration:none;display:inline-flex}.btn:disabled{opacity:.6;cursor:default}.btn--primary{background:var(--wine);color:var(--alab)}.btn--primary:hover:not(:disabled){background:var(--wine-2)}.btn--ghost{border-color:var(--wine);color:var(--wine)}.btn--ghost:hover:not(:disabled){background:var(--petal)}.btn--block{width:100%}.btn--light{background:var(--alab);color:var(--wine)}.btn--light:hover:not(:disabled){background:var(--petal)}.btn--gilt{background:var(--gold);color:var(--wine-deep)}.field{width:100%;min-height:var(--tap);border:1px solid var(--hair);background:var(--alab);color:var(--ink);caret-color:var(--gold);font-family:var(--body);border-radius:12px;padding:8px 12px;font-size:18px;display:block}.field::placeholder{color:var(--nav-muted);font-family:var(--body);font-style:italic}.field:focus{border-color:var(--wine)}.field[aria-invalid=true]{border-color:var(--berry)}.chip{appearance:none;border:1px solid var(--hair);background:var(--alab);font-family:var(--ui);color:var(--ink);border-radius:999px;align-items:center;gap:4px;margin:0;padding:4px 10px;font-size:11px;font-weight:600;text-decoration:none;display:inline-flex}.chip--tap{min-height:var(--tap);cursor:pointer;padding:0 14px}.chip--on{background:var(--petal);border-color:var(--hair-rose);color:var(--wine)}.notice{border:1px solid var(--hair-rose);background:var(--petal);width:100%;color:var(--wine);border-radius:12px;padding:10px 12px;font-size:16px}.pill{font-family:var(--ui);letter-spacing:.04em;border-radius:999px;align-items:center;padding:3px 10px;font-size:11px;font-weight:600;display:inline-flex}.pill--open{background:var(--ok-bg);color:var(--ok-text)}.pill--closed{background:var(--petal);color:var(--wine);border:1px solid var(--hair-rose)}.nav{border-top:1px solid var(--hair);background:var(--alab);padding:4px max(4px, env(safe-area-inset-right)) env(safe-area-inset-bottom) max(4px, env(safe-area-inset-left));justify-content:space-around;align-items:stretch;display:flex;position:sticky;bottom:0}.nav__link{min-height:56px;font-family:var(--ui);letter-spacing:.06em;text-align:center;text-transform:uppercase;color:var(--nav-muted);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:2px;padding:6px 2px;font-size:11px;font-weight:600;line-height:1.2;text-decoration:none;display:flex}.nav__link[aria-current=page]{color:var(--wine)}.nav__glyph{letter-spacing:0;font-size:18px;line-height:1}.login{width:100%;max-width:420px;min-height:100dvh;padding:24px max(var(--gutter), env(safe-area-inset-right)) 24px max(var(--gutter), env(safe-area-inset-left));flex-direction:column;justify-content:center;gap:16px;margin:0 auto;display:flex}.login__hero{text-align:center;flex-direction:column;align-items:center;gap:6px;padding:28px 18px;display:flex}.login__title{font-family:var(--serif);letter-spacing:-.01em;font-size:30px;font-weight:400;line-height:1.15}.login__lead{color:var(--on-wine-soft);font-size:18px;font-style:italic}.login__form{flex-direction:column;gap:10px;padding:16px;display:flex}.login__form .btn{margin-top:6px}.on-wine{background:var(--wine);color:var(--alab)}.on-wine .label{color:var(--on-wine-soft)}.on-wine .label--gold,.on-wine .rom{color:var(--gold)}.on-wine .tr{color:var(--on-wine-soft)}.stack{flex-direction:column;align-items:flex-start;gap:8px;width:100%;display:flex}.chips{flex-wrap:wrap;gap:6px;width:100%;display:flex}.chip__mark{font-size:13px}.chip--dot.chip--on:before{content:"";background:var(--gold);border-radius:50%;width:6px;height:6px}.rom{color:var(--gold-text);font-size:15px;font-style:italic}.tr{color:var(--muted);font-size:15px}.label--wine{color:var(--wine)}.back-link{min-height:var(--tap);font-family:var(--ui);letter-spacing:.1em;text-transform:uppercase;color:var(--wine);align-items:center;gap:6px;font-size:12px;font-weight:700;text-decoration:none;display:inline-flex}.back-link--icon{min-width:var(--tap);letter-spacing:0;justify-content:center;font-size:28px;line-height:1}.list{flex-direction:column;gap:8px;width:100%;margin:0;padding:0;list-style:none;display:flex}.actions-row{flex-wrap:wrap;gap:8px;width:100%;display:flex}.today{flex-direction:column;gap:6px;width:100%;padding:20px 18px;display:flex}:where(.today__text,.karaoke,.phrase-row__text,.item__text){font-family:var(--serif)}.today__text{margin-top:6px;font-size:26px;line-height:1.35}.today .rom{font-size:17px}.today .tr{font-size:16px}.today__actions{z-index:1;flex-wrap:wrap;gap:8px;margin-top:12px;display:flex;position:relative}.today--empty{text-align:center;align-items:center;gap:10px;padding:28px 18px}.today__wait{color:var(--on-wine-soft);font-size:17px;font-style:italic}.section-head{justify-content:space-between;align-items:center;width:100%;display:flex}.section-head__more{min-height:var(--tap);align-items:center;text-decoration:none;display:inline-flex}.grid{grid-template-columns:1fr 1fr;gap:8px;width:100%;margin:0;padding:0;list-style:none;display:grid}.collection{min-height:72px;color:inherit;flex-direction:column;gap:4px;padding:12px;text-decoration:none;display:flex}.collection__title{font-family:var(--serif);color:var(--wine);font-size:17px;line-height:1.25}.collection--row{min-height:var(--tap);padding:14px}.phrase-row{min-height:var(--tap);color:inherit;align-items:flex-start;gap:12px;text-decoration:none;display:flex}.phrase-row__n{min-width:22px;font-family:var(--ui);color:var(--wine);padding-top:4px;font-size:12px;font-weight:700}.phrase-row__body{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.phrase-row__text{color:var(--ink);font-size:19px;line-height:1.3}.phrase-row .pill{flex:none;align-self:center}.session{padding-bottom:env(safe-area-inset-bottom)}.session__bar{width:100%;min-height:var(--tap);justify-content:space-between;align-items:center;gap:8px;display:flex}.session__title{text-align:center;flex:1}.session__spacer{width:var(--tap)}.session__tempo{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px;width:100%;display:flex}.session__tempo .chips{width:auto}.session__tempo .chip--tap{padding:0 12px}.sentence{text-align:center;flex-direction:column;gap:8px;width:100%;padding:24px 18px;display:flex}.karaoke{font-size:24px;font-style:italic;line-height:1.4}.karaoke:lang(zh),.karaoke:lang(ko){font-style:normal}.sentence .rom{font-size:17px}.sentence .tr{font-size:16px}.w{border-radius:4px;padding:0 2px;transition:background-color .12s,color .12s}.w[data-state=spoken]{color:var(--alab)}.w[data-state=current]{background:var(--rose);color:var(--wine)}.w[data-state=next]{color:var(--on-wine-dim)}.waves{flex-direction:column;gap:6px;width:100%;padding:14px;display:flex}.waves .label{align-items:center;gap:6px;display:flex}.dot{border-radius:50%;width:8px;height:8px}.dot--gold{background:var(--gold)}.dot--wine{background:var(--wine)}.wave{justify-content:space-between;align-items:center;gap:2px;height:36px;display:flex;position:relative}.wave i{border-radius:2px;flex:1 1 0;min-width:1.5px;max-width:4px;display:block}.wave[data-tone=guide] i{background:var(--gold)}.wave[data-tone=own] i{background:var(--wine)}.wave i[data-empty]{opacity:.35}.wave__needle{background:var(--wine);opacity:0;pointer-events:none;width:1.5px;position:absolute;top:0;bottom:0;left:0}.wave__needle:before{content:"";background:var(--gold);width:7px;height:7px;position:absolute;top:-3px;left:-2.75px;transform:rotate(45deg)}.score{border:1px solid var(--hair);border-radius:var(--radius);background:var(--alab);align-items:center;gap:12px;width:100%;padding:12px 14px;display:flex}.score__mark{flex:none;place-items:center;width:30px;font-size:22px;line-height:1;display:grid}.score__title{font-family:var(--serif);font-size:19px;line-height:1.25}.score__tip{color:var(--muted);font-size:15px}.score--sublime{background:var(--gilt-bg);border-color:var(--gilt-hair)}.score--sublime .score__title{color:var(--gold-text)}.score--poised .score__title,.score--poised .score__mark{color:var(--wine)}.score--recalibrate{background:var(--petal);border-color:var(--hair-rose)}.score--recalibrate .score__title,.score--recalibrate .score__mark{color:var(--berry)}.rec-status{font-family:var(--ui);color:var(--berry);align-items:center;gap:8px;font-size:13px;font-weight:600;display:flex}.rec-dot{background:var(--berry);border-radius:50%;width:10px;height:10px;animation:1.2s ease-in-out infinite blink}.actions{justify-content:space-around;align-items:flex-start;gap:8px;width:100%;margin-top:4px;display:flex}.action{min-width:var(--tap);min-height:var(--tap);cursor:pointer;background:0 0;border:0;grid-template-rows:80px auto;place-items:center;row-gap:8px;margin:0;padding:0;display:grid}.action:disabled{opacity:.5;cursor:default}.action__disc{border:1px solid var(--hair);background:var(--alab);width:52px;height:52px;color:var(--wine);border-radius:50%;place-items:center;font-size:18px;display:grid}.action:active:not(:disabled) .action__disc{background:var(--petal)}.mic{background:var(--wine);width:72px;height:72px;color:var(--alab);box-shadow:0 0 0 6px var(--petal), 0 0 0 7px var(--gold);border-radius:50%;place-items:center;display:grid}.mic[data-recording]{animation:1.6s ease-out infinite aura}.action--mic:active .mic{background:var(--wine-2)}.session__moves{justify-content:space-between;gap:8px;width:100%;display:flex}.session__listen{justify-content:center;width:100%;display:flex}.add{flex-direction:column;gap:12px;width:100%;padding:12px;display:flex}.add__form{flex-direction:column;gap:10px;display:flex}.add__send{align-self:flex-end}.words{width:100%;margin:0;padding:0;list-style:none}.item{border-bottom:1px solid var(--hair);flex-direction:column;gap:4px;padding:12px 0;display:flex}.item:last-child{border-bottom:0}.item__row{justify-content:space-between;align-items:flex-start;gap:10px;display:flex}.item__body{flex-direction:column;flex:1;min-width:0;display:flex}.item__open{min-height:var(--tap);color:inherit;flex-direction:column;justify-content:center;gap:2px;text-decoration:none;display:flex}.item__text{color:var(--ink);overflow-wrap:anywhere;font-size:20px;line-height:1.3}.item__tr{min-height:var(--tap);font:inherit;text-align:left;text-underline-offset:4px;color:var(--muted);cursor:pointer;background:0 0;border:0;align-items:center;margin:0;padding:0;font-size:15px;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;display:flex}.item__meta{color:var(--muted);flex-wrap:wrap;font-size:12px;display:flex}.item__meta>*+:before{content:"·";margin:0 6px}.item__edit,.item__confirm{flex-direction:column;gap:8px;padding:4px 0;display:flex}.item__actions{flex-wrap:wrap;gap:0 12px;display:flex}.status{font-family:var(--ui);letter-spacing:.08em;text-transform:uppercase;border:1px solid #0000;border-radius:999px;flex:none;margin-top:6px;padding:3px 8px;font-size:11px;font-weight:600;display:inline-flex}.status--ready{background:var(--ok-bg);color:var(--ok-text)}.status--waiting{background:var(--petal);border-color:var(--hair-rose);color:var(--wine)}.status--expired{background:var(--expired-bg);color:var(--expired-text)}.status--failed{background:var(--petal);border-color:var(--hair-rose);color:var(--berry)}.textbtn{min-height:var(--tap);font-family:var(--ui);letter-spacing:.1em;text-transform:uppercase;color:var(--wine);cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;margin:0;padding:0 4px;font-size:11px;font-weight:700;display:inline-flex}.textbtn:disabled{opacity:.6;cursor:default}.textbtn--quiet{color:var(--muted)}.listen__status{text-align:center;width:100%;color:var(--muted);font-size:17px;font-style:italic}.listen__glyph{letter-spacing:0;font-size:24px;line-height:1}.listen__settings{flex-direction:column;gap:12px;width:100%;display:flex}@keyframes aura{0%{box-shadow:0 0 0 6px var(--petal), 0 0 0 7px var(--gold), 0 0 0 7px #fffbf7b3}to{box-shadow:0 0 0 6px var(--petal), 0 0 0 7px var(--gold), 0 0 0 24px #fffbf700}}@keyframes blink{50%{opacity:.3}}@media (prefers-reduced-motion:reduce){.mic[data-recording],.rec-dot{animation:none}.w{transition:none}}.stats{text-align:center;grid-template-columns:repeat(auto-fit,minmax(90px,1fr));gap:6px;display:grid}.stat{padding:10px 4px}.stat__value{font-family:var(--serif);color:var(--wine);font-size:22px}.before-after__text{font-family:var(--serif);margin-top:8px;font-size:18px;font-style:italic}.before-after__takes{z-index:1;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px;display:grid;position:relative}.take{background:#ffffff14;border:1px solid #c9a86a4d;border-radius:12px;padding:10px}.take--latest{border-color:var(--gold);background:#c9a86a2e}.take__when{font-family:var(--ui);color:var(--on-wine-soft);font-size:12px}.take__score{font-family:var(--serif);margin-top:2px;font-size:22px}.on-wine .take__play{min-height:44px;font:inherit;font-family:var(--ui);color:var(--gold);cursor:pointer;background:0 0;border:0;padding:0;font-size:13px}.langrows{flex-direction:column;gap:8px;list-style:none;display:flex}.langrows__row{justify-content:space-between;align-items:center;font-size:16px;display:flex}.dots{gap:5px;display:inline-flex}.dots__dot{border:1px solid var(--gold);border-radius:50%;width:10px;height:10px}.dots__dot--on{background:var(--gold)}.admin{flex-direction:column;gap:10px;display:flex}.admin__row{flex-direction:column;gap:2px;display:flex}.admin__row dt{font-family:var(--ui);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-size:12px}.admin__row dd{font-size:16px}
