/* Original Google Fonts files and OFL licences are bundled in assets/fonts/. */
@font-face{font-family:'Baloo 2';src:url('assets/fonts/Baloo2-variable.ttf') format('truetype');font-style:normal;font-weight:400 800;font-display:swap}
@font-face{font-family:'Nunito';src:url('assets/fonts/Nunito-variable.ttf') format('truetype');font-style:normal;font-weight:200 1000;font-display:swap}
:root{--ink:#30274d;--purple:#7750dc;--mint:#b7eadf;--round:'Baloo 2','Trebuchet MS',sans-serif;--body:'Nunito','Trebuchet MS',sans-serif}*{box-sizing:border-box}body{margin:0;background:#faf8ff;color:var(--ink);font-family:var(--body);font-size:16px}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit;cursor:pointer;touch-action:manipulation}button:disabled{cursor:default}button:focus-visible,a:focus-visible{outline:4px solid #f3b449;outline-offset:4px}[hidden]{display:none!important}header{max-width:1220px;height:91px;margin:auto;padding:18px 36px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #e9e3f2}.brand{text-decoration:none;font:800 32px/1 var(--round);color:var(--purple);letter-spacing:-1px}.brand>span{font-size:20px;color:#8d859e}.brand b{color:#d69341}.toolbar{display:flex;gap:10px}.icon-button{border:1px solid #e6dff0;background:white;border-radius:50%;width:47px;height:47px;font-size:23px;font-weight:800;display:grid;place-items:center;flex-shrink:0}.icon-button:hover{background:#eee7ff}.icon-button[aria-pressed=true]{background:#e8defe;color:var(--purple)}main{max-width:1160px;margin:auto;padding:28px 30px 22px}.game-top{position:relative;display:flex;align-items:center;justify-content:center;margin:7px auto 27px;gap:20px}h1{font:800 39px/1.15 var(--round);margin:0;letter-spacing:-.7px}h1>span{color:#e4a242}.level{position:absolute;left:0;background:#eee6ff;color:var(--purple);font:800 20px/1 var(--round);padding:11px 14px;border-radius:14px;white-space:nowrap}.level>span{color:#9585b3;font-size:15px}#hard-badge{position:absolute;right:0;background:#ffe3d8;color:#a33b19;border-radius:12px;padding:9px 13px;font-size:14px;font-weight:900}.arena{display:grid;grid-template-columns:minmax(140px,1fr) minmax(300px,440px) minmax(140px,1fr);gap:30px;align-items:center}.play{text-align:center;min-width:0}#status{font:700 26px/1.25 var(--round);min-height:34px;margin:0 0 18px;color:var(--purple)}.board-shell{position:relative;padding:13px;border:1px solid #9cdbcd;border-radius:31px;background:var(--mint);box-shadow:0 9px 0 #8dcab9,0 18px 28px #3f877e12}.board{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}.cell{aspect-ratio:1;min-width:0;border:0;border-radius:19px;background:#fffefa;box-shadow:0 3px 0 #dfebe5;padding:10px;position:relative;display:grid;place-items:center;transition:background .15s,transform .15s}.cell:not(:disabled):hover{background:#f0fff8;transform:translateY(-2px)}.cell:not(:disabled):active{transform:scale(.97)}.cell.hinted:empty:after{content:'';position:absolute;width:32%;height:32%;border:5px solid #6bcab5;border-radius:50%;opacity:.35;animation:hint 1.8s ease-in-out infinite}.cell.winning{background:#e1fac6;animation:cheer .5s ease}.token,.mini-token{background-image:url('assets/tokens.png');background-repeat:no-repeat;background-size:300% 200%;display:inline-block;aspect-ratio:1;width:100%;height:100%;filter:drop-shadow(0 2px 1px #432a4518)}.cell .token{animation:pop .25s ease-out}.token-o{background-position:0 0}.token-x{background-position:0 100%}.character{text-align:center;align-self:center;position:relative;margin-top:15px}.reaction{width:100%;max-width:250px;aspect-ratio:1;margin:auto;background-size:300% 200%;background-repeat:no-repeat;filter:drop-shadow(0 12px 10px #7750dc12);transition:transform .22s;position:relative}.reaction .fallback{width:100%;height:100%;object-fit:contain}.dumka .fallback{height:125%;transform:translateY(-13%)}.reactions-ready .reaction{background-image:url('assets/reactions-v3.png')}.reactions-ready .reaction .fallback{display:none}.kumka .reaction{background-position:0 0}.dumka .reaction{background-position:0 100%}.character.active .reaction{animation:breathe 3.2s ease-in-out infinite}.character.celebrate .reaction{animation:cheer .65s ease-in-out 3}.character-name{display:inline-flex;align-items:center;gap:9px;border:2px solid transparent;border-radius:30px;padding:6px 20px 6px 10px;font:700 26px/1 var(--round);margin-top:6px}.character.active .character-name{border-color:#b5e7d7;background:#effcf5}.dumka.active .character-name{border-color:#d8c5fc;background:#f0e8ff}.character-name .mini-token{width:45px;height:45px}.reaction-word{display:block;color:var(--purple);font:700 24px/1.2 var(--round);height:31px;margin-top:13px}.round-feedback{height:48px;margin-top:19px;display:flex;justify-content:center;align-items:center;gap:9px;position:relative;font:700 18px/1.2 var(--round)}#result-symbol{color:#e4ab25;letter-spacing:3px}.next-track{position:absolute;bottom:0;width:100px;height:4px;border-radius:4px;background:#ece6f5;overflow:hidden}.next-track div{height:100%;background:var(--purple);border-radius:4px}.bottom-controls{display:flex;align-items:center;justify-content:center;gap:22px;margin-top:14px}.skins{display:flex;gap:10px}.skin{width:66px;height:66px;border:2px solid #eae4f2;background:#fff;border-radius:19px;padding:6px;transition:transform .15s}.skin[aria-pressed=true]{border-color:#69cab0;background:#e7faf2;box-shadow:0 3px 0 #b9e3d5}.skin:hover{transform:translateY(-3px)}.hint-button{color:#8060c6;font-size:29px}.hint-button:disabled{opacity:.35}.progress{width:min(440px,100%);height:7px;border-radius:5px;background:#eae3f4;margin:24px auto 0;overflow:hidden}.progress>span{height:100%;display:block;width:0;background:#a28adf;border-radius:5px;transition:width .6s}#pause-overlay{position:absolute;inset:0;background:#f9f6ffe8;border-radius:28px;display:grid;place-items:center;backdrop-filter:blur(5px)}#resume{height:92px;width:92px;border:0;border-radius:50%;background:var(--purple);color:white;font-size:37px;padding-left:13px;box-shadow:0 6px 0 #5c37b3}dialog{width:calc(100% - 32px);max-width:410px;padding:35px 30px 30px;border:1px solid #e4dced;border-radius:27px;text-align:center;color:var(--ink);font-family:var(--body)}dialog::backdrop{background:#35234e66;backdrop-filter:blur(5px)}dialog h2{font:700 28px/1.3 var(--round);margin:8px 0 15px}dialog p{font-size:18px;line-height:1.6}.help-o{color:#3aaf94}.help-x{color:var(--purple)}.dialog-close{position:absolute;right:12px;top:12px;width:35px;height:35px;border:0;border-radius:50%;background:#eee7f8;font-size:23px}.example-line{display:flex;gap:8px;justify-content:center}.example-line>span{width:60px;height:60px}.primary-button{width:100%;background:var(--purple);color:white;border:0;border-radius:14px;padding:14px 20px;font-size:19px;font-weight:900;box-shadow:0 4px 0 #5731a8}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@keyframes pop{from{transform:scale(.6);opacity:.1}to{transform:scale(1);opacity:1}}@keyframes hint{50%{transform:scale(1.15);opacity:.6}}@keyframes breathe{50%{transform:translateY(-5px) rotate(-1deg)}}@keyframes cheer{40%{transform:translateY(-12px) rotate(-3deg)}70%{transform:translateY(-5px) rotate(3deg)}}@media(max-width:850px){.arena{grid-template-columns:minmax(110px,1fr) minmax(280px,390px) minmax(110px,1fr);gap:16px}main{padding-inline:20px}.character-name{padding:4px 12px 4px 5px;font-size:20px;gap:5px}.character-name .mini-token{width:33px;height:33px}.reaction-word{font-size:20px}h1{font-size:33px}.level{font-size:17px}}
@media(max-width:650px){header{height:70px;padding:13px 18px}.brand{font-size:27px}.brand>span{font-size:17px}.toolbar{gap:6px}.icon-button{width:42px;height:42px;font-size:22px}main{padding:14px 16px 18px}.game-top{margin:3px 0 9px;min-height:36px;justify-content:flex-start;gap:12px}h1{font-size:25px;letter-spacing:-.4px}.level{position:static;order:2;margin-left:auto;padding:8px 10px;font-size:16px}.level>span{font-size:13px}#hard-badge{position:static;order:3;font-size:12px;padding:7px 8px}.arena{grid-template-columns:1fr 1fr;gap:0 20px;max-width:420px;margin:auto;align-items:start}.character{grid-row:1;align-self:start;margin:0;display:flex;align-items:center;justify-content:center;gap:2px;min-width:0}.kumka{grid-column:1}.dumka{grid-column:2}.reaction{width:92px;max-width:92px;margin:0;flex-shrink:0}.character-name{font-size:16px;flex-direction:column;padding:4px 10px;gap:2px;border-radius:18px;margin:0}.character-name .mini-token{width:30px;height:30px}.reaction-word{display:none}.play{grid-row:2;grid-column:1/-1}#status{font-size:25px;margin:6px 0 11px;min-height:31px}.board-shell{padding:10px;border-radius:25px;box-shadow:0 7px 0 #8dcab9}.board{gap:7px}.cell{border-radius:15px;padding:7px}.round-feedback{height:37px;margin-top:14px;font-size:16px}.bottom-controls{margin-top:6px;gap:20px}.skin{width:57px;height:57px;border-radius:16px}.progress{margin-top:19px;max-width:340px}.hint-button{width:45px;height:45px}.next-track{bottom:-2px}}
@media(max-width:370px){.brand{font-size:24px}.toolbar{gap:4px}.icon-button{width:38px;height:38px}h1{font-size:22px}.reaction{width:78px}.arena{gap:0 8px}.character-name{padding-inline:7px}.level{font-size:14px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}
/* The two rows in the expression sheet have different heights. */
.kumka .reaction{background-size:300% 216.949153%}.dumka .reaction{background-size:300% 185.507246%}
.dedication{max-width:1160px;margin:0 auto;padding:2px 20px 22px;text-align:center;color:#766888;font-size:14px;line-height:1.5}
.mode-switch{display:flex;justify-content:center;gap:5px;width:max-content;margin:-10px auto 22px;padding:5px;border:1px solid #e6dff0;background:#eee8f8;border-radius:17px}.mode-switch button{min-width:118px;padding:10px 18px;border:0;background:transparent;color:#77678c;border-radius:12px;font-size:16px;font-weight:900}.mode-switch button[aria-pressed=true]{background:white;color:var(--purple);box-shadow:0 3px 7px #34205312}.mode-switch #mode-hard[aria-pressed=true]{color:#6b3800;background:#ffe0a0;box-shadow:0 3px 0 #e9bc66}.hard-rule{text-align:center;margin:-11px 0 17px;font-size:14px;font-weight:800;color:#806290}.is-hard .board-shell{background:#d8c8f4;border-color:#c5afe7;box-shadow:0 9px 0 #b59bdc,0 18px 28px #77608712}.is-hard .board{gap:7px}.is-hard .cell{border-radius:13px;padding:5px}.is-hard .cell.winning{background:#ffe3a3}.is-hard .arena{grid-template-columns:minmax(140px,1fr) minmax(300px,470px) minmax(140px,1fr)}.is-hard .level{background:#ffeac5;color:#895418}.is-hard .bottom-controls{margin-top:7px}.is-hard .hint-button{display:none}#hard-help{font-size:15px;line-height:1.5}.is-hard .example-line>span{width:52px;height:52px}
@media(max-width:850px){.is-hard .arena{grid-template-columns:minmax(105px,1fr) minmax(280px,420px) minmax(105px,1fr)}}
@media(max-width:650px){.mode-switch{margin:10px auto 12px;padding:4px}.mode-switch button{min-width:115px;padding:9px 15px;font-size:15px}.hard-rule{margin:0 0 8px;font-size:14px}.is-hard .arena{grid-template-columns:1fr 1fr}.is-hard .board{gap:5px}.is-hard .board-shell{padding:8px;border-radius:23px;box-shadow:0 7px 0 #b59bdc}.is-hard .cell{border-radius:10px;padding:3px}.is-hard .reaction{width:78px;max-width:78px}.is-hard #status{font-size:23px;margin-top:5px}.is-hard .character-name{font-size:15px}.is-hard .character-name .mini-token{width:27px;height:27px}}

/* Tap either character to choose the human; roles stay visible during every round. */
.choose-character{text-align:center;font-size:14px;font-weight:800;color:#806c98;margin:-9px 0 8px}.character{border:0;background:transparent;padding:0;border-radius:26px}.character .reaction{display:block}.character[aria-pressed=true] .character-name{border-color:#a88bdc;background:#f0e8ff}.character:hover .character-name{border-color:#a88bdc}.character-label{display:flex;flex-direction:column;gap:5px;text-align:left}.character-label small{font:800 12px/1 var(--body);color:#806c98}.character[aria-pressed=true] .character-label small{color:#6543b7}
@media(max-width:650px){.choose-character{margin:0 0 5px;font-size:12px}.character-label{gap:3px;text-align:center}.character-label small{font-size:10px}.character-name{padding:4px 7px}.character .reaction{width:78px;max-width:78px}}
@media(max-width:370px){.character .reaction{width:66px;max-width:66px}.character-name{padding-inline:4px;font-size:15px}}
.round-result{position:absolute;inset:10px;z-index:4;border-radius:22px;background:linear-gradient(145deg,#fff9e9f5,#efe5fff5);display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:8px;padding:14px;box-shadow:0 8px 28px #40286a3b;backdrop-filter:blur(7px);animation:result-in .28s ease-out}.result-card{min-width:0;display:flex;flex-direction:column;align-items:center;gap:4px;font:900 19px/1.1 var(--round);color:var(--purple)}.result-card b{font-size:23px;color:#8a45c6}.result-card.loser{color:#675f72}.result-card.loser b{color:#776f80;font-size:19px}.result-face{position:relative;display:block;width:min(145px,100%);aspect-ratio:1;background-image:url('assets/reactions-v3.png');background-repeat:no-repeat;filter:drop-shadow(0 8px 7px #46266722)}.result-card.loser .result-face{filter:grayscale(.2) saturate(.75) drop-shadow(0 8px 7px #46266722);transform:rotate(-3deg)}.result-card.loser .result-face:after{content:'💧';position:absolute;right:12%;top:48%;font-size:25px;filter:none;transform:rotate(10deg)}.result-face.kumka{background-size:300% 216.949153%}.result-face.dumka{background-size:300% 185.507246%}.result-face.kumka.mood-joy{background-position:100% 0}.result-face.kumka.mood-sad{background-position:50% 0}.result-face.dumka.mood-joy{background-position:0 100%}.result-face.dumka.mood-sad{background-position:50% 100%}.result-versus{font-size:28px;color:#e6ac2e;animation:star-pop .6s ease-in-out infinite alternate}@keyframes result-in{from{opacity:0;transform:scale(.88)}to{opacity:1;transform:scale(1)}}@keyframes star-pop{to{transform:scale(1.2) rotate(8deg)}}@media(max-width:650px){.round-result{inset:7px;padding:10px 7px;border-radius:18px}.result-card{font-size:16px}.result-card b{font-size:20px}.result-card.loser b{font-size:16px}.result-versus{font-size:22px}.result-face{width:min(120px,100%)}.result-card.loser .result-face:after{font-size:21px}}
@media(max-width:650px){.game-top #hard-badge{display:none}}
.scoreboard{position:absolute;left:0;display:flex;align-items:center;gap:9px;padding:9px 13px;border-radius:16px;background:#fff1bd;color:#5d407e;font:900 17px/1 var(--round);box-shadow:0 3px 0 #ead288}.scoreboard span{white-space:nowrap}.scoreboard b{display:inline-grid;place-items:center;min-width:28px;height:28px;padding:0 6px;border-radius:9px;background:white;color:var(--purple);font-size:19px}.scoreboard i{font-style:normal;color:#b28a25}@media(max-width:650px){.game-top{flex-wrap:wrap}.scoreboard{position:static;order:2;margin-left:auto;padding:7px 9px;font-size:14px;gap:6px}.scoreboard b{min-width:24px;height:24px;font-size:16px}.game-top h1{order:1}.character-label small[hidden]{display:none}.character-name{align-items:center}.character-label{text-align:center}}

/* Character portraits remain beside the board; game pieces are X and O. */
.kumka .reaction,.dumka .reaction,.result-face{background-size:300% 200%!important;border-radius:20%}
.reaction{background-image:url('assets/reactions-v3.png')}.reaction .fallback{display:none}
#kumka-face,#dumka-face{background-image:url('assets/reactions-v3.png')!important;background-size:300% 200%!important}
.game-menu-button{width:auto!important;padding:0 12px;font-size:15px!important}
@media(max-width:650px){header{height:auto;min-height:70px;flex-wrap:wrap;justify-content:center;gap:10px}.toolbar{width:100%;justify-content:center}}
#character-menu{max-width:420px;width:calc(100% - 32px);box-sizing:border-box;padding:24px;border:0;border-radius:24px;color:#352348;background:#fffaf2;max-height:85dvh;overflow:auto}
#character-menu::backdrop{background:#23113db8}#character-menu h2{margin:0 0 18px}.menu-options{display:flex;gap:10px}.menu-options button{flex:1;min-height:48px;border:2px solid #d6c6ed;border-radius:14px;background:white;color:#352348;font:inherit}.menu-options button[aria-pressed=true]{border-color:#7450ca;background:#eee5ff}.menu-note{font-size:14px;line-height:1.5}

/* Owner reference 2026-10-16: orange sculpted cross / purple sculpted ring. */
.token,.mini-token{background-size:contain;background-position:center;background-color:transparent;background-repeat:no-repeat;border:0;border-radius:0;box-shadow:none;filter:none}
.token-x,.mini-token.token-x{background-image:url('assets/mark-x-sculpted.svg')}
.token-o,.mini-token.token-o{background-image:url('assets/mark-o-sculpted.svg')}
.cell .sculpted-piece{width:92%;height:92%}
#help-kumka-symbol,#help-dumka-symbol{display:inline-block;width:1em;height:1.12em;vertical-align:middle;color:transparent;background-position:center;background-repeat:no-repeat;background-size:contain}
.help-x{background-image:url('assets/mark-x-sculpted.svg')}.help-o{background-image:url('assets/mark-o-sculpted.svg')}
.review-cell .mini-token{width:82%;height:82%}

/* Compact play screen; complete help and settings stay on demand. */
.mode-switch,.choose-character,.reaction-word{display:none!important}
#result-text{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}

/* Existing campaigns: current level and genuinely completed levels stay separate. */
#campaign-progress{margin:18px 0;padding:12px;border:1px solid #e3d8ef;border-radius:16px;background:#faf7ff;text-align:left}
#campaign-progress h3{margin:0 0 10px;font-size:16px}
#campaign-progress>div{display:grid;grid-template-columns:44px minmax(0,1fr) 65px;align-items:center;gap:9px;margin:9px 0;font-size:14px}
#campaign-progress progress{display:block;width:100%;height:10px;accent-color:#7750dc}
#campaign-progress span{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
#campaign-progress progress{appearance:none;-webkit-appearance:none;border:0;border-radius:8px;background:#e8e0f3;overflow:hidden}
#campaign-progress progress::-webkit-progress-bar{background:#e8e0f3;border-radius:8px}
#campaign-progress progress::-webkit-progress-value{background:#7750dc;border-radius:8px}
#campaign-progress progress::-moz-progress-bar{background:#7750dc;border-radius:8px}
