/* Noto Sans KR comes from this site (dist/fonts-kr.css, linked before this sheet; 2026-11-05), no longer from Google Fonts. */
/* Andika (SIL OFL, docs/licenses/Andika-OFL.txt): a reading font for early readers with single-storey a and g. Latin subset only, so Korean falls back to the next family. */
@font-face{font-family:'Andika';font-style:normal;font-weight:400;font-display:swap;src:url(andika-400.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Andika';font-style:normal;font-weight:700;font-display:swap;src:url(andika-700.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
/* 학원 글씨체 (2026-10-31): Arimo (Arial metrics) and Tinos (Times metrics), SIL OFL (docs/licenses/Arimo-OFL.txt, Tinos-OFL.txt),
   the latin subsets of @fontsource/arimo@5.3.0 and @fontsource/tinos@5.3.0 with Andika's unicode-range. Their vertical metrics were
   patched once to Andika's (hhea/OS/2 typo ascender 2500, descender -800, line gap 0; win 2500/800; USE_TYPO_METRICS) with the
   scratch tool tools/patch.py (fontTools 4.68, run with python3 -I, not part of the build), so every line box and baseline equals
   Andika's; outlines and advance widths are unchanged. --font-en holds the academy's Latin family only (Hangul falls through to
   Noto Sans KR in every stack); every stack starts with var(--font-en) and never names a family. Phonics screens lock it to Andika
   (data-font-lock), the teacher's font cards show each family (data-font-sample). Never define a derived stack token on :root:
   it would be resolved there and ignore the lock. */
@font-face{font-family:'Arimo';font-style:normal;font-weight:400;font-display:swap;src:url(arimo-400.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Arimo';font-style:normal;font-weight:700;font-display:swap;src:url(arimo-700.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Tinos';font-style:normal;font-weight:400;font-display:swap;src:url(tinos-400.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Tinos';font-style:normal;font-weight:700;font-display:swap;src:url(tinos-700.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
:root{--font-en:'Andika'}:root[data-font="sans"]{--font-en:'Arimo',Arial}:root[data-font="serif"]{--font-en:'Tinos','Times New Roman'}[data-font-lock="kid"],[data-font-sample="kid"]{--font-en:'Andika'}[data-font-sample="sans"]{--font-en:'Arimo',Arial}[data-font-sample="serif"]{--font-en:'Tinos','Times New Roman'}[data-font-lock],[data-font-sample]{font-family:var(--font-en),'Noto Sans KR','Apple SD Gothic Neo',sans-serif}
:root{font-family:var(--font-en),'Noto Sans KR',sans-serif;color:var(--n-202b46,#202b46);background:var(--n-f5f7fb,#f5f7fb);font-synthesis:none;--blue:var(--n-3457ed,#3457ed);--muted:var(--n-69748a,#69748a);--line:var(--n-e6eaf2,#e6eaf2)}*{box-sizing:border-box}body{margin:0;padding-left:env(safe-area-inset-left,0px);padding-right:env(safe-area-inset-right,0px)}button,textarea,select{font:inherit}input{font-family:inherit}button{cursor:pointer;transition:background .15s,transform .15s}button:hover:not(:disabled){filter:brightness(.96)}button:active:not(:disabled){transform:translateY(1px)}button:disabled{cursor:not-allowed;opacity:.5}button:focus-visible,a:focus-visible,select:focus-visible{outline:3px solid var(--n-92a8ff,#92a8ff);outline-offset:4px}textarea:focus{outline:2px solid var(--n-6683ff,#6683ff);outline-offset:2px}a{color:inherit;text-decoration:none}.header{height:88px;padding:0 max(5vw,24px);display:flex;align-items:center;gap:20px;background:var(--n-ffffff,#fff);border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:11px;font-size:23px;font-weight:800;letter-spacing:-1px}.brand-light{font-weight:500;margin-left:5px}.brand-mark{background:var(--blue);color:var(--n-ffffff,#fff);font-size:29px;width:39px;height:39px;display:grid;place-items:center;border-radius:13px 13px 13px 4px;font-family:var(--font-en),Arial,sans-serif;letter-spacing:-4px;padding-right:4px}.header-caption{font-size:14px;color:var(--n-8590a4,#8590a4);margin-left:18px}.mode-badge{margin-left:auto;background:var(--n-eef2ff,#eef2ff);color:var(--n-4560c8,#4560c8);border-radius:20px;padding:7px 15px;font-size:13px;font-weight:600}main{max-width:1240px;margin:auto;padding:43px 32px 0}.page-title{display:flex;justify-content:space-between;align-items:center;margin-bottom:31px;gap:16px}.eyebrow{font-size:12px;font-weight:800;letter-spacing:1.8px;color:var(--blue)}h1{font-size:29px;letter-spacing:-1.1px;margin:10px 0 9px}p{line-height:1.75;margin:0}.page-title p{color:var(--muted);font-size:15px}.level-pill{background:var(--n-ffffff,#fff);border:1px solid var(--line);border-radius:40px;padding:11px 19px;font-size:14px;white-space:nowrap}.workspace{display:grid;grid-template-columns:minmax(0,1fr) 310px;gap:25px;align-items:start}.lesson{background:var(--n-ffffff,#fff);border:1px solid var(--line);border-radius:22px;overflow:hidden;box-shadow:0 5px 20px #25356603}.question{background:var(--n-ecf0ff,#ecf0ff);padding:25px 29px 24px}.question-top{display:flex;align-items:center;justify-content:space-between;gap:15px}.question-label{font-size:11px;letter-spacing:1.8px;color:var(--n-566cc0,#566cc0);font-weight:800}.text-button{border:0;background:transparent;color:var(--n-65718d,#65718d);font-size:13px;padding:6px 0}.question-body{display:flex;align-items:center;gap:17px;margin:24px 0 16px}.question-number{font-family:var(--font-en),Georgia,serif;font-size:45px;color:var(--n-a3b2ed,#a3b2ed);line-height:1}.question h2{font-family:var(--font-en),Arial,sans-serif;font-size:27px;line-height:1.25;letter-spacing:-.6px;margin:0 0 9px}.question p{font-size:15px;color:var(--n-617094,#617094)}.icon-button{border:1px solid var(--n-d3dcfc,#d3dcfc);background:var(--n-ffffffa6,#ffffffa6);color:var(--blue);border-radius:50%;width:38px;height:38px;flex-shrink:0;margin-left:auto;font-size:22px}.topic{display:inline-block;background:var(--n-dfe6ff,#dfe6ff);color:var(--n-5266a3,#5266a3);border-radius:6px;font-size:12px;padding:4px 9px;margin-left:53px}.steps{display:flex;list-style:none;justify-content:space-between;margin:0;padding:24px 30px;border-bottom:1px solid var(--line);gap:10px}.steps li{display:flex;gap:9px;align-items:center;font-size:13px;color:var(--n-929bac,#929bac);white-space:nowrap}.steps li span{width:25px;height:25px;border-radius:50%;background:var(--n-f0f2f7,#f0f2f7);display:grid;place-items:center;font-size:11px;font-weight:700}.steps li.active{font-weight:700;color:var(--blue)}.steps li.active span{background:var(--blue);color:var(--n-ffffff,white)}.steps li.done{color:var(--i-4e8f77,#4e8f77)}.steps li.done span{background:var(--i-e4f3eb,#e4f3eb);color:var(--i-438066,#438066)}.activity{padding:29px}.activity-heading{display:flex;align-items:center;justify-content:space-between;gap:12px}h2{font-size:18px;margin:0;font-weight:700;letter-spacing:-.5px}.small-label{font-size:11px;color:var(--n-8e99ac,#8e99ac);letter-spacing:1px}.muted{font-size:14px;color:var(--muted);margin-top:9px}.language-bar{display:flex;justify-content:space-between;align-items:center;gap:10px;margin:24px 0 13px}.segmented{display:flex;background:var(--n-f2f4f8,#f2f4f8);border-radius:9px;padding:4px;gap:3px}.segmented button{border:0;border-radius:6px;background:transparent;padding:7px 14px;font-size:13px;color:var(--n-717c94,#717c94)}.segmented button.selected{background:var(--n-ffffff,white);box-shadow:0 2px 5px #2436570b;color:var(--blue);font-weight:700}.input-kind{font-size:12px;color:var(--n-929caf,#929caf)}.answer-box{background:var(--n-fafbfe,#fafbfe);border:1.5px solid var(--n-e3e8f1,#e3e8f1);border-radius:13px;padding:17px;position:relative}.answer-box:focus-within{border-color:var(--n-879eff,#879eff)}textarea{width:100%;resize:vertical;min-height:106px;border:0;background:transparent;color:var(--n-273353,#273353);font-size:19px;line-height:1.7;padding:0}textarea::placeholder{color:var(--n-a0a9bb,#a0a9bb);font-size:16px}textarea:focus{outline:none}.input-foot{display:flex;justify-content:space-between;align-items:center;margin-top:9px;font-size:12px;color:var(--n-8c96aa,#8c96aa);gap:10px}.record-row{display:flex;align-items:center;justify-content:center;flex-direction:column;margin:22px 0 18px;gap:9px}.record{width:61px;height:61px;border:0;border-radius:50%;color:var(--n-ffffff,#fff);background:var(--blue);box-shadow:0 0 0 7px var(--n-eef1ff,#eef1ff);display:grid;place-items:center}.record svg{width:25px;height:25px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.record.recording{background:var(--i-df515b,#df515b);box-shadow:0 0 0 7px var(--i-fff0f0,#fff0f0);animation:pulse 1.3s infinite}.record-caption{font-size:13px;color:var(--n-75809a,#75809a);margin-top:5px}.actions{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-top:18px;border-top:1px solid var(--line)}.primary{background:var(--blue);color:var(--n-ffffff,#fff);border:0;border-radius:10px;padding:13px 20px;font-size:14px;font-weight:600}.secondary{background:var(--n-ffffff,white);border:1px solid var(--n-dce2ee,#dce2ee);color:var(--n-53617f,#53617f);border-radius:10px;padding:11px 15px;font-size:14px}.example-button{color:var(--n-7180a0,#7180a0);font-size:13px;border:0;background:none;padding:9px 0;text-decoration:underline;text-decoration-color:var(--n-c1cada,#c1cada);text-underline-offset:5px}.sidebar{display:grid;gap:20px}.coach-card{background:var(--n-fff0a6,#fff0a6);padding:27px 25px 21px;border-radius:19px;border:1px solid var(--n-f1e29b,#f1e29b)}.coach-card .eyebrow{color:var(--n-877633,#877633);font-size:10px;letter-spacing:1.3px}.coach-card h2{font-size:24px;line-height:1.5;margin:13px 0;color:var(--n-52471d,#52471d);letter-spacing:-.8px}.coach-card p{font-size:14px;color:var(--n-877744,#877744);line-height:1.8}.coach-footer{border-top:1px solid var(--n-e3d695,#e3d695);margin-top:25px;padding-top:16px;display:flex;justify-content:space-between;font-size:11px;gap:8px;color:var(--n-877744,#877744)}.coach-footer strong{color:var(--n-635727,#635727);font-size:12px}.score-card{background:var(--n-ffffff,#fff);border:1px solid var(--line);border-radius:19px;padding:23px}.score-heading{display:flex;align-items:center;justify-content:space-between;gap:7px}.score-heading h2{font-size:16px}.outline-badge{font-size:11px;border:1px solid var(--n-e0e6ef,#e0e6ef);padding:4px 7px;border-radius:5px;color:var(--n-77849d,#77849d);white-space:nowrap}.score-empty{text-align:center;font-size:43px;color:var(--n-d6deed,#d6deed);padding:24px 0 13px}.score-empty span{display:block;font-size:13px;color:var(--n-93a0b6,#93a0b6);line-height:1.8;margin-top:5px}.score-example{display:block;border-top:1px solid var(--line);padding-top:15px;margin-top:14px;width:100%;text-align:left;font-size:12px;color:var(--n-5e74ba,#5e74ba)}.privacy-note{font-size:12px;color:var(--n-8c97ab,#8c97ab);line-height:1.8;padding:0 5px}footer{padding:30px 0;display:flex;gap:4px;font-size:12px;color:var(--n-939caf,#939caf);line-height:1.8}footer strong{font-weight:500;color:var(--n-697792,#697792)}footer>span{margin-left:auto}.hint-card{border:1px solid var(--n-f1dda0,#f1dda0);background:var(--n-fff9e5,#fff9e5);padding:15px 17px;border-radius:11px;color:var(--n-80652b,#80652b);font-size:14px;line-height:1.8;margin:18px 0}.hint-card strong{display:block;color:var(--n-655027,#655027);margin-bottom:4px}.chips{display:flex;flex-wrap:wrap;gap:8px;margin:20px 0}.chip{padding:10px 13px;border-radius:8px;background:var(--n-f0f3fb,#f0f3fb);border:1px solid var(--n-dce4f3,#dce4f3);color:var(--n-536687,#536687);font-size:15px}.chip.current{background:var(--n-e9eeff,#e9eeff);border-color:var(--n-6d8bff,#6d8bff);color:var(--n-3457ed,#3457ed)}.chip.completed{background:var(--i-ebf7ee,#ebf7ee);border-color:var(--i-c7e7d0,#c7e7d0);color:var(--i-47815a,#47815a)}.target-prompt{margin:22px 0 7px;font-size:23px;letter-spacing:-.6px}.sentence{font-family:var(--font-en),Arial,sans-serif;font-size:24px;line-height:1.9;padding:18px;background:var(--n-f6f8fe,#f6f8fe);border:1px solid var(--n-e4e9f5,#e4e9f5);border-radius:12px;overflow-wrap:anywhere}.sentence mark{color:var(--n-ac7110,#ac7110);background:var(--n-fff0b8,#fff0b8);border-radius:4px;padding:2px}.insertion{display:inline-block;border:1px dashed var(--n-dfaa42,#dfaa42);color:var(--n-956b19,#956b19);background:var(--n-fff6d9,#fff6d9);border-radius:5px;margin:0 5px;padding:0 7px;font-size:18px;vertical-align:middle}.completed-sentence{font-family:var(--font-en),Arial,sans-serif;font-size:22px;color:var(--i-3b69b1,#3b69b1);line-height:1.65;border-left:3px solid var(--i-92acf5,#92acf5);padding:10px 15px;margin:15px 0;background:var(--i-f6f8ff,#f6f8ff)}.feedback{padding:13px 15px;border-radius:9px;font-size:14px;line-height:1.7;margin:14px 0;background:var(--n-edf6f0,#edf6f0);color:var(--n-37724d,#37724d)}.feedback.warning{background:var(--i-fff4e7,#fff4e7);color:var(--i-936228,#936228)}.mini-note{font-size:12px;color:var(--n-8a96ac,#8a96ac);line-height:1.7;margin-top:12px}.score-total{display:flex;align-items:baseline;justify-content:center;gap:6px;margin:23px 0 17px;font-family:var(--font-en),Arial,sans-serif;color:var(--blue)}.score-total strong{font-size:47px}.score-total span{color:var(--n-9aa5b6,#9aa5b6);font-size:14px}.score-label{display:flex;justify-content:space-between;font-size:12px;color:var(--n-73809a,#73809a);gap:8px;margin:15px 0 8px}.score-label strong{color:var(--n-3b4967,#3b4967);font-size:13px}.bar{height:7px;background:var(--n-edf0f6,#edf0f6);border-radius:9px;overflow:hidden}.bar>span{display:block;height:100%;border-radius:9px;background:var(--blue)}.score-formula{font-size:11px;line-height:1.8;color:var(--n-8b96ab,#8b96ab);margin-top:17px;padding-top:13px;border-top:1px solid var(--line)}.sample-label{background:var(--n-fff3d3,#fff3d3);color:var(--n-91671d,#91671d);padding:7px 10px;font-size:12px;line-height:1.6;border-radius:7px;margin-top:15px}audio{width:100%;height:38px;margin-top:12px}#notice{position:fixed;bottom:25px;left:50%;transform:translateX(-50%);padding:13px 22px;background:var(--n-263451,#263451);color:var(--n-ffffff,white);border-radius:12px;font-size:14px;max-width:min(90vw,600px);box-shadow:0 4px 20px #19243b22;z-index:20;display:none}#notice.visible{display:block}dialog{border:1px solid var(--n-dfe5ef,#dfe5ef);border-radius:20px;padding:30px;max-width:490px;width:90vw;box-shadow:0 20px 90px #10235433;color:var(--n-263451,#263451)}dialog::backdrop{background:var(--n-15264c55,#15264c55)}dialog h2{font-size:23px;margin-bottom:15px}dialog p{font-size:15px;color:var(--n-687792,#687792);margin:12px 0}dialog .primary{margin-top:15px}.loading{color:var(--n-60739e,#60739e);font-size:14px}.retry-note{font-size:13px;color:var(--i-806833,#806833);background:var(--i-fff7db,#fff7db);padding:13px;border-radius:9px;line-height:1.7;margin:16px 0}@keyframes pulse{50%{box-shadow:0 0 0 12px var(--n-fff0f0,#fff0f0)}}@media(min-width:1450px){main{padding-top:55px}.activity{padding:33px}.question{padding:28px 33px}.workspace{gap:30px}}@media(max-width:1000px){main{padding:32px 22px 0}.workspace{grid-template-columns:minmax(0,1fr) 275px;gap:18px}.question h2{font-size:23px}.question,.activity{padding:23px}.steps{padding:20px}.steps li{gap:5px;font-size:12px}.header-caption{display:none}.coach-card{padding:23px}.score-card{padding:19px}.score-heading{flex-wrap:wrap}.question-number{display:none}.topic{margin-left:0}}@media(max-width:760px){.header{height:72px;padding:0 21px}.brand{font-size:20px}.workspace{grid-template-columns:1fr}.page-title{align-items:flex-start}.page-title h1{font-size:24px;line-height:1.5}.page-title p{font-size:14px}.level-pill{display:none}.eyebrow{font-size:10px}.sidebar{grid-template-columns:1fr}.coach-card{display:none}.question h2{font-size:25px}.question-body{gap:10px}.activity{padding:23px 21px}.steps{padding:20px 18px}.steps li{font-size:12px}.steps li span{width:22px;height:22px}.actions{flex-wrap:wrap}.privacy-note{font-size:12px}.score-heading{flex-wrap:nowrap}.score-card{padding:23px}.score-empty{padding:12px 0;font-size:28px}.score-empty span{display:inline;margin-left:15px}.input-kind{display:none}footer{display:block;font-size:11px}footer>span{display:none}.question-number{display:block;font-size:35px}.topic{margin-left:45px}.question{padding:22px}.sentence{font-size:22px}.target-prompt{font-size:21px}}@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
.chip.needs-practice{background:var(--n-fff0da,#fff0da);border-color:var(--n-f1c485,#f1c485);color:var(--n-9b581b,#9b581b)}dialog a{color:var(--n-3457ed,#3457ed);text-decoration:underline}.header .secondary{white-space:nowrap;padding:9px 13px;font-size:13px}@media(max-width:760px){.header{height:auto;min-height:76px;flex-wrap:wrap;padding:14px 18px;gap:10px}.header .brand{margin-right:auto}.mode-badge{display:none}.activity-heading h2{font-size:17px}.small-label{flex-shrink:0}}
/* Activity type scale (2026-10-28, owner: "엑티비티의 글자크기가 커서 가독성이 떨어져 가독성 좋은 크기로 적당히 조정해줘").
   One set of sizes for every student activity screen (vocabulary, reading, word matching, both builders, the 연습/랭킹 도전
   choice and the game kit: word rain, hangman, phonics), so the same role has the same size everywhere: each activity text
   rule takes its size from one role below instead of its own px value. Measured on S1 (What Can I Be?) and S5 (Jack-o'-Lanterns)
   at 320, 375 and 1280 px before choosing: English display text was 39-84 px on phones (one word filled the card) and the
   reading sentence 24-30 px (S5 took 4-5 lines at 320 px, 13 sentences ended on a single orphan word).
   Reasoning: children of 7-13 read fastest at large-but-not-huge print; the gain from bigger letters levels off around 14 pt on
   screen (about 18-19 CSS px on a phone held at 30 cm), after which size only adds lines, line breaks and eye movements, and
   crowded or over-long lines hurt more than a modest size cut. Andika has a tall x-height, so it reads larger than its px value. English stays the largest text on a screen, Korean help is one step smaller, and nothing a child must read
   goes below 12 px. Phones get the first value (clamp() eases the 320-359 px phones down a little); 700 px and wider get the
   media-query value, but only when the window is also 560 px tall, so a landscape phone (740x360) keeps the phone sizes
   (study.js and book.js add that height class to their measurement keys). Line heights: 1.45 for English sentences, 1.55 for Hangul, 1.2-1.3 inside tiles, cards and buttons.
   Letter spacing is never negative; display words get +.02em and sentences +.01em (slightly open spacing helps early readers).
   Weights: Andika has only 400 and 700 (650-800 all render as 700), and Noto Sans KR 600 reads better than 750-900 at small sizes. */
:root{
 --act-display:clamp(38px,11.5vw,44px); /* the single focus word of a screen where letters are the lesson: phonics word */
 --act-word:clamp(30px,9vw,34px);       /* headword: vocabulary word, word-builder answer row (also the cap of fit-to-width sizes) */
 --act-tile:clamp(20px,5.9vw,22px);     /* one letter in a box: vocabulary spelling tiles, builder letter keys, hangman keys and cells */
 --act-sentence:clamp(20px,5.9vw,22px); /* the English sentence a child reads aloud: reading target */
 --act-chip:clamp(15px,4.6vw,17px);     /* an English word or phrase on a tappable card/chip: matching cards, rain drops, phonics and review chips */
 --act-chunk:clamp(14px,4.35vw,17px);   /* a sentence-builder chunk: follows the width on small phones so the widest S5 chunk fits one 320px row */
 --act-prompt:clamp(16px,4.6vw,17px);   /* the Korean cue a child answers from: builder prompts, reading Korean-only round, hangman and word-rain meaning */
 --act-ko:clamp(15px,4.27vw,16px);      /* the secondary line: Korean meaning or translation shown with English, the builder's English example sentence, one-line Korean leads */
 --act-ko-sm:14px;                      /* Korean on a half-width card: matching meaning cards */
 --act-title:clamp(18px,5.3vw,20px);    /* screen titles and big choices: 연습/랭킹 도전 tiles, start buttons, finish titles, result numbers */
 --act-button:clamp(15px,4.27vw,16px);  /* primary and full-width action buttons: 다음, 읽었어요, 다시 듣기, 학습 마치기 */
 --act-button-sm:clamp(12px,3.47vw,13px); /* compact buttons in a row of three: 마지막 지우기, 다시 하기, -10점 · +30초, 철자·단어·뜻 듣기 */
 --act-note:clamp(12px,3.47vw,13px);    /* instructions, status, hint and result lines, notes under choices */
 --act-label:12px;                      /* pills and small labels: 연습/랭킹 도전 pill, HUD labels, step labels, column labels, chip sub-labels */
 --act-number:16px;                     /* numbers in the card's top row: timer, score, counters */
 --act-toolbar:14px;                    /* numbers in the toolbar above the card: ‹ 3/12 ›, 오늘 도전 1/2 */
 --act-lh-word:1.2;--act-lh-sentence:1.45;--act-lh-ko:1.55;--act-lh-ui:1.3;
 --act-track-word:.02em;--act-track-sentence:.01em;
 --act-w-strong:700;--act-w-ko:600;--act-w-note:600
}
@media (min-width:700px) and (min-height:560px){:root{--act-display:52px;--act-word:40px;--act-tile:24px;--act-sentence:26px;--act-chip:19px;--act-chunk:19px;--act-prompt:19px;--act-ko:17px;--act-ko-sm:16px;--act-title:22px;--act-button:16px;--act-button-sm:14px;--act-note:14px;--act-label:13px;--act-number:18px}}
/* 화면 색 (2026-10-31): in the four other colour sets the default focus ring is the set's --t-focus (the light blue ring
   was 2.2:1 on the page); 지금 keeps it. Same weight as the line it follows, so a screen's own focus ring still wins. */
:where(:root[data-theme]:not([data-theme="classic"])) button:focus-visible,:where(:root[data-theme]:not([data-theme="classic"])) a:focus-visible,:where(:root[data-theme]:not([data-theme="classic"])) select:focus-visible{outline-color:var(--t-focus)}
