@font-face{font-family:Escolar_G;src:url('assets/Escolar_G.TTF') format('truetype');font-display:block}@font-face{font-family:Escolar_P;src:url('assets/Escolar_P.TTF') format('truetype');font-display:block}

:root{color-scheme:light;--ink:#253d57;--purple:#7662ac;--cream:#fffbee;--gold:#eab957}*{box-sizing:border-box}body{margin:0;background:#e5f3ee;color:var(--ink);font-family:Escolar_G,cursive;font-size:26px}button,input,select{font:inherit;color:inherit}button{cursor:pointer;border:2px solid #b9c9d4;border-radius:14px;background:linear-gradient(#fffef9,#e9f0f3);min-height:44px;padding:5px 18px;box-shadow:0 3px 0 #bccbd1}button:hover{filter:brightness(1.04)}button:active{transform:translateY(2px);box-shadow:none}button:focus-visible,select:focus-visible{outline:4px solid #b979e0;outline-offset:2px}button:disabled{opacity:.5;cursor:default}.primary{background:linear-gradient(#ffe4a1,#f2be63);border-color:#bc8b3d;color:#4d351d;font-size:32px}select{width:100%;background:#fffdfa;border:2px solid #c6d5dd;border-radius:11px;min-height:44px;padding:2px 9px;font-size:24px}label{display:flex;flex-direction:column;gap:2px}h1,h2,p{margin:0}h2{font-size:32px}small{font-size:21px}[hidden]{display:none!important}#app{height:100dvh;overflow:hidden;position:relative}#world{position:absolute;inset:0 0 50%;background:linear-gradient(#f6f9ed66,#f8f5e3bb),url('assets/forest.png') center/cover;overflow:hidden}#scene{width:100%;height:100%;display:block}#worldTitle{position:absolute;left:3%;top:4%;pointer-events:none;text-shadow:0 2px #fff}#worldTitle span{font-size:23px;letter-spacing:1px}h1{font-size:clamp(36px,4.2vw,66px);line-height:1.1;color:#3f4a6c}#story{font-size:clamp(22px,2vw,30px);margin-top:6px;background:#fffbedde;border:1px solid #fff;padding:7px 14px;border-radius:14px;max-width:560px}.playing #worldTitle{top:2%;left:2%}.playing #worldTitle span,.playing #story{display:none}.playing h1{font-size:clamp(25px,2.5vw,36px)}#globalProgress{position:absolute;top:4%;right:3%;width:35%;font-size:25px;text-align:right}progress{display:block;width:100%;height:15px;accent-color:#8e73c4;border:0}progress::-webkit-progress-bar{background:#fffbeb;border-radius:10px}progress::-webkit-progress-value{background:linear-gradient(90deg,#ad8cdb,#5bc4bf);border-radius:10px}.lower{position:absolute;top:50%;left:0;right:0;bottom:0;background:#fffbedf5;border-top:5px solid #cfb47c}#menu{padding:12px clamp(14px,4vw,65px);overflow:auto;background:linear-gradient(140deg,#fffbed,#e7f4f2)}.settings{display:grid;grid-template-columns:2fr 1fr 1.5fr 1fr 1fr;gap:8px 18px}.menuActions{display:flex;gap:12px;justify-content:center;align-items:center;margin:12px 0}#levelInfo{text-align:center;margin-top:12px;font-size:26px}#validation{color:#a23952;text-align:center;font-size:23px}#saved{display:block;text-align:center;color:#4b6775}#boards{bottom:46px;display:grid;grid-template-columns:repeat(var(--players,1),minmax(0,1fr));gap:8px;padding:7px;background:#e4e9f1;touch-action:none}.board{min-width:0;border:3px solid var(--accent);border-radius:19px;background:#fffdf5;display:grid;grid-template-rows:32px 40px 1fr 27px;overflow:hidden;position:relative;box-shadow:0 3px 5px #33445524}.boardHeader{background:var(--soft);padding:0 12px;display:flex;justify-content:space-between;align-items:center;font-size:24px}.instruction{font-size:clamp(24px,2.1vw,32px);text-align:center;display:flex;justify-content:center;align-items:center;gap:7px;background:#ffffff;white-space:nowrap}.instruction .speak{width:38px;min-height:34px}.status{font-size:21px;text-align:center;background:var(--soft);white-space:nowrap;overflow:hidden}.activity{position:relative;min-height:0;display:flex;align-items:center;justify-content:center;padding:7px 8px;background:radial-gradient(ellipse at center,#fffef9,#f5f1fa)}.speak{display:inline-flex;justify-content:center;align-items:center;padding:4px;min-height:42px;min-width:42px;width:42px;flex-shrink:0;border-radius:50%;background:#fff8dc;color:#405975;border:2px solid #d0be8e;box-shadow:0 2px #cabd9b}.speak svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:2.2}.orbs{width:100%;height:100%;display:flex;gap:clamp(4px,1vw,16px);align-items:center;justify-content:center}.orbGroup{width:31%;max-width:180px;display:flex;flex-direction:column;align-items:center;gap:8px}.orb{width:100%;aspect-ratio:1;max-height:140px;min-height:64px;padding:3px;border-radius:50%;border:3px solid #bfa5e3;font-size:clamp(28px,3.4vw,51px);background:radial-gradient(circle at 35% 25%,#fff,#edddfc 65%,#c8b3e2);box-shadow:0 5px 0 #a48abb,0 5px 14px #bb9bc45c;touch-action:none;overflow:hidden}.traceCanvas{display:block;width:100%;height:100%;touch-action:none}.traceTools{position:absolute;right:8px;top:6px;display:flex;gap:5px}.traceTools button{font-size:20px;padding:3px 8px;min-height:32px}.connections{display:grid;grid-template-columns:1fr .45fr 1.4fr;grid-template-rows:repeat(var(--pairs),1fr);gap:5px;width:100%;height:100%;position:relative}.picture{background-color:#fff;box-shadow:0 2px 5px #20394f20;border:2px solid #d0dce0;border-radius:16px;touch-action:none;min-height:0;padding:0;display:flex;align-items:center;justify-content:center;position:relative;z-index:2}.objectArt{display:block;width:100%;height:100%;object-fit:contain}.wordPair{grid-column:3;display:flex;align-items:center;gap:4px;z-index:2;min-width:0}.wordDrop{width:100%;height:100%;border:2px solid #d3c0e5;border-radius:16px;background:#f6edff;display:flex;align-items:center;justify-content:center;font-size:clamp(25px,3vw,40px);touch-action:none;padding:0 3px;min-height:0;box-shadow:none;overflow:hidden}.wordPair .speak{width:36px;min-width:36px;min-height:36px}.linkLayer{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:3}.matched{border-color:#46ac97!important;background:#d9f3e7!important}.selected{outline:4px solid #e4bc60;outline-offset:-4px}.hintGlow{animation:hint 1.3s ease-in-out infinite}.wrong{animation:boing .45s ease-in-out}.celebrate{position:absolute;inset:0;background:#fff6d8da;z-index:6;display:flex;flex-direction:column;justify-content:center;align-items:center;pointer-events:none;color:#487b71;font-size:42px;text-align:center}.celebrate small{font-size:27px}#toolbar{position:absolute;bottom:0;left:0;right:0;height:46px;display:flex;align-items:center;justify-content:center;gap:12px;padding:4px;background:#e9f4f1}#toolbar button{min-height:36px;font-size:22px;padding:1px 15px}.sheet{z-index:10;padding:12px 5%;display:flex;flex-direction:column;overflow:auto;background:linear-gradient(120deg,#fffbee,#ede9fb)}#sheetBody{overflow:auto;flex:1;min-height:0;font-size:26px;padding:8px 2px}#sheetActions{display:flex;justify-content:center;gap:10px;padding-top:8px}#sheetBody p{margin-bottom:8px}.syllableGrid{display:flex;flex-wrap:wrap;gap:7px;margin:8px 0}.syllableGrid label{display:flex;flex-direction:row;align-items:center;border:1px solid #c9bed8;background:white;border-radius:9px;padding:3px 8px;font-size:28px;min-height:44px;min-width:58px}.syllableGrid input{width:20px;height:20px;accent-color:#7d68af}.presetRow{display:flex;gap:8px;flex-wrap:wrap}.presetRow button{font-size:23px}.labWords{font-size:25px;color:#4d6679}.botBoard{align-items:center;flex-direction:column;gap:12px;font-size:30px}.botFeather{width:85px;height:85px;background:linear-gradient(130deg,#e4f6ee,#d1c5f1);border:3px solid #ab9dc7;border-radius:50%;display:grid;place-items:center}.botFeather svg{width:60px;height:60px}.readyFonts{font-size:22px}.playing #world{filter:none}

@keyframes hint{50%{box-shadow:0 0 16px 5px #ecc771}}@keyframes boing{25%{transform:translateX(-8px) scale(.94)}65%{transform:translateX(8px) scale(1.03)}}

@media(max-width:800px){.settings{grid-template-columns:1.6fr 1fr 1.4fr;gap:6px 12px}#menu{padding:8px 16px}.menuActions{margin:8px 0}#levelInfo{font-size:23px}#worldTitle{top:4%;left:4%}#story{max-width:78vw;font-size:24px}.board{border-radius:12px;grid-template-rows:28px 36px 1fr 24px}.boardHeader{font-size:22px;padding:0 5px}.instruction{font-size:24px}.status{font-size:18px}#boards{gap:4px;padding:4px}.orb{font-size:31px}.wordDrop{font-size:30px}.wordPair{gap:2px}.wordPair .speak{min-width:30px;width:30px;min-height:32px}.activity{padding:5px}.orbs{gap:5px}.orbGroup{gap:5px}.speak{min-width:35px;width:35px;min-height:35px}#toolbar{gap:5px}#toolbar button{font-size:20px;padding:1px 8px}.playing #globalProgress{font-size:21px;width:46%}}

@media(max-width:540px){.settings{grid-template-columns:1fr 1fr}.settings label:first-child{grid-column:span 2}select{font-size:24px;min-height:38px}label{font-size:23px}.menuActions{gap:5px;flex-wrap:wrap}.primary{font-size:29px}#levelInfo{margin-top:4px;font-size:22px}#menu{padding:7px 12px}#worldTitle{top:4%}h1{font-size:44px}#story{font-size:23px;max-width:92vw}.playing h1{font-size:25px}.playing #globalProgress{font-size:21px;width:44%}.board .orb{font-size:37px}#boards[data-count='2'] .orb,#boards[data-count='3'] .orb{font-size:23px;min-height:42px}#boards[data-count='2'] .instruction,#boards[data-count='3'] .instruction{font-size:20px}#boards[data-count='3'] .wordDrop{font-size:22px}#toolbar button{font-size:18px;padding:1px 5px}#fullscreen{display:none}.wordDrop{font-size:36px}.sheet{padding:10px 16px}.connections{grid-template-columns:1fr .2fr 1.7fr}.status{font-size:20px}.boardHeader{font-size:24px}.instruction{font-size:27px}.playing #worldTitle{top:3%}#boards[data-count='3'] .boardHeader{font-size:18px}#boards[data-count='3'] .status{font-size:16px}}

@media(max-height:600px){.settings{grid-template-columns:2fr 1fr 1.5fr 1fr 1fr}#menu{padding:5px 16px}select{font-size:21px;min-height:32px}label{font-size:22px}.menuActions{margin:5px}#levelInfo{margin-top:4px;font-size:22px}#saved{display:none}.board{grid-template-rows:23px 29px 1fr 21px}.boardHeader{font-size:20px}.instruction{font-size:23px}.status{font-size:18px}.traceTools{top:2px}.traceTools button{min-height:26px;font-size:18px}.orb{max-height:80px;min-height:44px;font-size:29px}.speak{min-height:29px;min-width:30px;width:30px}.orbGroup{gap:3px}.wordPair .speak{min-height:27px;min-width:28px;width:28px}.wordDrop{font-size:26px}}

@media(prefers-reduced-motion:reduce){*{animation:none!important;scroll-behavior:auto!important}}

@media(max-height:480px){#boards{bottom:34px;padding:3px}.board{grid-template-rows:20px 26px 1fr 0}.status{display:none}.activity{padding:2px 6px}#toolbar{height:34px;padding:2px}#toolbar button{min-height:28px;font-size:18px}.traceTools button{min-height:24px;font-size:17px}.traceTools{top:1px}.instruction .speak{min-height:24px;width:28px;min-width:28px}.instruction .speak svg{width:20px;height:20px}.orbs .speak{min-height:27px}.orb{max-height:60px}.connections{gap:2px}.wordDrop{font-size:25px}.wordPair .speak{min-height:26px;min-width:27px;width:27px}}

@media(min-width:801px) and (min-height:601px){.board{grid-template-rows:32px 48px 1fr 27px}.speak,.instruction .speak,.wordPair .speak{min-width:44px;width:44px;min-height:44px}}

@media(max-width:540px) and (min-height:601px){#boards[data-count='1'] .wordPair .speak{min-width:44px;width:44px;min-height:44px}}



.practiceBoard{grid-template-rows:32px 48px 46px 1fr 27px}

.practiceControls{display:flex;gap:6px;padding:2px 8px;background:var(--soft);min-width:0}

.practiceControls select{min-width:0;flex:1;width:auto;font-size:25px;min-height:40px}

.practiceControls button{font-size:23px;min-height:40px;padding:1px 10px}

@media(max-width:540px){.practiceControls{gap:3px;padding:2px 4px}.practiceControls button{font-size:22px;padding:1px 7px}}

@media(max-height:600px){.practiceBoard{grid-template-rows:23px 29px 36px 1fr 21px}.practiceControls select,.practiceControls button{min-height:30px;font-size:20px}}



.traceTools .paperSelect{width:190px;min-height:32px;font-size:20px;padding:1px 4px}.traceTools{max-width:calc(100% - 16px)}

@media(max-height:600px){.traceTools .paperSelect{min-height:26px;font-size:18px;width:175px}}



.traceTools button{flex-shrink:0}.traceTools .paperSelect{min-width:0;flex-shrink:1}



.traceTools{flex-wrap:wrap;justify-content:flex-end}.traceTools .traceZoom{min-width:36px;min-height:36px;font-family:Arial,sans-serif;font-size:25px;padding:0 7px}.traceTools .paperSelect{width:170px;flex-shrink:0}



.pictureCell{position:relative;min-height:0;min-width:0}.pictureCell .picture{width:100%;height:100%}.pictureAudio{position:absolute;right:1px;bottom:1px;z-index:4;min-width:30px;width:30px;min-height:30px;height:30px;padding:3px}.pictureAudio svg{width:21px;height:21px}



/* Writing controls fold away so they never consume the letter's paper. */

.traceTools{display:block;z-index:5;max-width:calc(100% - 16px)}

.traceTools summary{cursor:pointer;list-style:none;background:#fffaf0;border:2px solid #c6d5dd;border-radius:12px;padding:3px 12px;font-size:22px;min-height:38px;text-align:center}

.traceToolRow{display:flex;flex-wrap:wrap;gap:6px;padding:8px;background:#fffaf5;border:2px solid #c6d5dd;border-radius:12px;box-shadow:0 5px 14px #23354730;max-width:440px;justify-content:flex-end}

.traceTools:not([open]) .traceToolRow{display:none}

.traceToolRow button,.traceToolRow .paperSelect{min-height:40px}

@media(max-width:540px){

 .practiceBoard{grid-template-rows:26px 36px 42px minmax(0,1fr) 22px}

 .practiceControls select,.practiceControls button{font-size:21px;min-height:36px}

 .traceTools summary{font-size:20px;min-height:36px;padding:2px 10px}

 .traceTools{top:3px;right:4px}

 .traceToolRow{max-width:300px}

}

@media(max-height:600px){

 .practiceBoard{grid-template-rows:22px 28px 34px minmax(0,1fr) 20px}

 .traceTools summary{font-size:18px;min-height:28px;padding:1px 8px}

}


.tracingBoard .instruction{position:relative;justify-content:flex-start;padding-left:12px}
.tracingBoard .traceTools{top:2px;right:6px}
.tracingBoard .traceToolRow{position:absolute;right:0;top:100%;width:max-content;max-width:min(440px,80vw)}
.tracingBoard.practiceBoard{grid-template-rows:26px 42px 42px minmax(0,1fr) 24px}
@media(max-width:540px){.tracingBoard.practiceBoard{grid-template-rows:24px 38px 40px minmax(0,1fr) 22px}}
@media(max-height:600px){.tracingBoard.practiceBoard{grid-template-rows:20px 30px 34px minmax(0,1fr) 20px}}

/* Personal portrait screens prioritise the writing surface; landscape PDI stays 50/50. */
@media(max-width:900px) and (orientation:portrait){
 .playing #world{bottom:74%}
 .playing #boards{top:26%}
 .playing #globalProgress{font-size:18px;top:3%}
 .playing h1{font-size:23px}
 .playing .traceCanvas{min-height:0}
}
@media(max-width:540px) and (orientation:portrait){
 .playing #world{bottom:76%}
 .playing #boards{top:24%}
 .playing #globalProgress{font-size:17px}
 .playing h1{font-size:22px}
}

@media(max-width:900px) and (orientation:portrait){.playing #globalProgress progress{display:none}.playing #globalProgress{font-size:16px}}

.storyEnding #worldTitle,.storyEnding #globalProgress{visibility:hidden}
