:root{font-family:'Hiragino Kaku Gothic ProN','Yu Gothic',sans-serif;color:#294939;--green:#436b3e;--cream:#fffae7;--line:#9abd65;--board:min(45vw,54vh,510px)}*{box-sizing:border-box}body{margin:0;min-height:100dvh;background:#e8efce url('/assets/academy.png') center/cover fixed no-repeat}body:before{content:'';position:fixed;inset:0;background:linear-gradient(#fffdf351,#fffdf308 60%,#fffbe987);pointer-events:none}button,input{font:inherit}button{cursor:pointer;color:inherit;touch-action:manipulation}button:disabled{cursor:default;opacity:.55}button:focus-visible,a:focus-visible{outline:3px solid #d8a232;outline-offset:3px}header{position:relative;z-index:2;display:flex;align-items:center;justify-content:space-between;padding:14px 4vw;background:#fffff1e6;border-bottom:1px solid #d9d6b6}a{color:inherit;text-decoration:none}.brand{display:flex;gap:10px;font:24px Georgia,serif;align-items:center}.brand small{display:block;font:11px sans-serif;letter-spacing:3px;margin-top:4px}nav{display:flex;gap:8px}button{border:1px solid #b6c19a;background:#fffdefed;border-radius:30px;padding:10px 18px;font-size:12px;transition:background .2s,transform .2s}button:hover:not(:disabled){background:#f0f5d8;transform:translateY(-1px)}main{position:relative}.intro{text-align:center;padding:20px 10px 12px;text-shadow:0 2px 12px #fff,0 0 20px #fff}.eyebrow{font-size:9px;letter-spacing:3px;font-weight:bold}h1{font-family:'Hiragino Mincho ProN','Yu Mincho',serif;letter-spacing:6px;font-size:36px;margin:4px 0 8px}.intro p{font-size:12px;margin:0}.game-layout{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;max-width:1380px;margin:auto}.play{width:calc(var(--board) + 40px);background:#fffdf1ed;border:1px solid #fff8d1;padding:12px 18px;border-radius:24px;box-shadow:0 16px 60px #34482038;z-index:1}.coursebar{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:11px}.coursebar button{padding:7px 19px;background:#e9efd6;font-weight:bold}.scorebar{display:flex;justify-content:space-between;align-items:center;padding:10px 4px}.scorebar>div{display:flex;align-items:center;gap:9px}.scorebar small{display:block;font-size:10px}.scorebar b{display:block;font:28px Georgia,serif}.scorebar>div:last-child{text-align:right}.versus{font:italic 15px Georgia;color:#83926d}.avatar{width:45px;height:45px;border-radius:50%;display:block;background-color:#faf4e0;background-repeat:no-repeat;background-size:150%;border:2px solid #aaa478;box-shadow:0 3px 6px #514e3322}.chobi{background-image:url('/assets/cast/chobi.png');background-position:50% 29%;background-color:#30352f}.leon{background-image:url('/assets/cast/leon.png');background-position:50% 21%;background-color:#fffdf5}.board-frame{position:relative;border:9px solid #e0cfa3;border-radius:10px;box-shadow:0 5px 0 #aa9872,0 10px 18px #57472628;background:#fff7dc}#board{display:grid;grid-template-columns:repeat(8,1fr);width:100%;aspect-ratio:1;border:1px solid var(--line);overflow:hidden}.cell{position:relative;display:grid;place-items:center;aspect-ratio:1;padding:0;border:0;border-radius:0;border-right:1px solid var(--line);border-bottom:1px solid var(--line);background:#fff7df;min-width:0}.cell:nth-child(16n+odd),.cell:nth-child(16n+10),.cell:nth-child(16n+12),.cell:nth-child(16n+14),.cell:nth-child(16n+16){background:#fcf3d7}.cell:disabled{opacity:1}.cell:hover:not(:disabled){transform:none;background:#e9edbf}.cell.legal:after{content:'';height:20%;width:20%;background:#8caf57;border-radius:50%;box-shadow:0 0 0 5px #aaca6424}.piece{display:block;width:89%;height:89%;border-radius:50%;background-repeat:no-repeat;background-size:150%;border:2px solid #303a2b;box-shadow:0 3px 3px #382f3559,inset 0 0 3px #ffffffa3}.piece.white{border-color:#e0d4b1}.piece.flip{animation:flip .32s ease}.piece.drop{animation:drop .24s ease}.cell.last:before{content:'';position:absolute;right:3px;bottom:3px;width:5px;height:5px;border-radius:50%;background:#d99b33;z-index:1}@keyframes flip{0%{transform:rotateY(0)}45%{transform:rotateY(90deg) scale(.85)}100%{transform:rotateY(180deg)}}@keyframes drop{from{transform:scale(1.25) translateY(-5px);opacity:.5}to{transform:scale(1);opacity:1}}#startCover{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;background:#fffbe9e8;border-radius:3px;text-align:center;padding:20px}#startCover[hidden]{display:none}.mini-label{font:9px Georgia;letter-spacing:2px;color:#8b854c}h2{font-family:'Yu Mincho',serif;font-size:23px;margin:16px 0}#startCover p{font-size:13px;line-height:2;margin:0 0 24px}.primary{background:#466b3b;color:white;border:1px solid #466b3b;padding:13px 22px;box-shadow:0 4px 0 #2f5028}.primary:hover:not(:disabled){background:#5a7a3e}#status{text-align:center;font-size:12px;margin:15px -8px 9px;min-height:18px}.controls{display:flex;justify-content:center;gap:6px}.controls button{padding:8px 13px;font-size:11px}footer{font-size:9px;text-align:center;color:#6c7558;margin-top:12px}footer span{margin-left:12px}.cheer{height:550px;max-height:68vh;position:relative;align-self:end;pointer-events:none}.cheer figure{position:absolute;margin:0;width:52%;height:45%;filter:drop-shadow(0 5px 5px #484d3c22);transform-origin:bottom;animation:sway 5s ease-in-out infinite}.cheer img{width:100%;height:100%;object-fit:contain}.cheer figure:nth-child(1){left:1%;top:0}.cheer figure:nth-child(2){right:0;top:9%;animation-delay:-2s}.cheer figure:nth-child(3){left:-2%;top:32%;z-index:2}.cheer figure:nth-child(4){right:-2%;top:44%;animation-delay:-1s;z-index:3}.cheer figure:nth-child(5){left:10%;bottom:-4%;z-index:4}.cheer figcaption{position:absolute;left:50%;bottom:4%;transform:translateX(-50%);font-size:10px;border-radius:20px;background:#fffbebeb;padding:3px 12px;white-space:nowrap}.cheer:before{content:'いい一手、見つけよう！';position:absolute;top:0;left:15%;border-radius:20px;background:#fffdf1e8;padding:9px 15px;font-size:12px;z-index:4}.cheer.right:before{content:'みんなで応援してるよ！'}.garden-note{text-align:center;font-size:10px;letter-spacing:2px;padding:20px;color:#39543c;text-shadow:0 0 8px white}@keyframes sway{0%,100%{transform:rotate(-1deg)}50%{transform:rotate(1deg)}}dialog{border:1px solid #d7c799;border-radius:24px;background:#fffdf2;color:#294939;width:min(440px,calc(100vw - 24px));max-height:calc(100dvh - 30px);padding:30px;box-shadow:0 20px 100px #253c5440}dialog::backdrop{background:#17342c70;backdrop-filter:blur(5px)}.close{position:absolute;right:12px;top:8px;padding:2px 10px;font-size:24px;border:0;background:transparent}dialog h2{margin:10px 0 15px}dialog p{font-size:13px;line-height:1.8}label{display:block;font-size:12px;margin:15px 0}input{display:block;width:100%;padding:12px;margin-top:6px;border:1px solid #b7c299;border-radius:8px;background:white}form .primary{width:100%}.error{color:#a33d2c;font-size:12px;min-height:18px}.textbutton{border:0;text-decoration:underline;background:transparent;margin-top:16px}.level-option{display:block;width:100%;border-radius:12px;text-align:left;margin:9px 0;padding:14px}.level-option b{font-size:16px}.level-option small{display:block;margin-top:6px}progress{width:100%;height:7px;accent-color:#7b9a48}.rankrow{display:grid;grid-template-columns:30px 1fr auto;align-items:center;border-bottom:1px solid #dce0c7;padding:12px 0;font-size:13px}.rankrow small{font-size:10px;display:block;color:#748268}.result{text-align:center}.result .crown{font-size:50px}.result h2{font: bold 44px Georgia;color:#b58b25;letter-spacing:4px;margin:5px}.result .pets{height:140px;display:flex;justify-content:center}.pets img{height:100%;width:42%;object-fit:contain}.result-score{font:36px Georgia;margin:10px}.result.win:before{content:'✦　✧　✦　✧　✦';display:block;color:#d1a03a;letter-spacing:6px;animation:sway 1s infinite}#toast{position:fixed;bottom:25px;left:50%;transform:translateX(-50%);background:#365b3e;color:#fff;padding:12px 20px;border-radius:12px;font-size:13px;z-index:10;display:none;width:max-content;max-width:90vw}.rules-list{font-size:13px;line-height:2;padding-left:20px}@media(min-width:1500px){:root{--board:min(48vh,540px)}}
@media(max-width:700px){:root{--board:min(calc(100vw - 30px),calc(100dvh - 270px),460px)}header{padding:7px 10px;gap:4px}.brand{font-size:14px;gap:3px}.brand small{font-size:8px;letter-spacing:1px;margin-top:2px}nav{gap:4px}nav button{font-size:10px;padding:8px}#account{max-width:82px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.intro{padding:8px 5px 4px}.eyebrow{display:none}h1{font-size:23px;letter-spacing:3px;margin:0 0 3px}.intro p{font-size:10px}.game-layout{display:flex;position:relative;justify-content:center;padding-top:32px}.play{width:calc(var(--board) + 16px);padding:8px;border-radius:15px}.cheer{position:absolute;top:0;height:34px;width:48%;max-height:none;z-index:2;display:flex;justify-content:center}.cheer.left{left:1%}.cheer.right{right:1%}.cheer figure,.cheer figure:nth-child(n){position:relative;inset:auto;width:20%;height:42px;animation:none;filter:none}.cheer figcaption,.cheer:before{display:none}.cheer img{object-fit:cover;object-position:50% 12%;height:44px;width:36px}.coursebar{font-size:10px}.coursebar button{font-size:11px;padding:5px 15px}.scorebar{padding:5px 6px}.scorebar .avatar{width:32px;height:32px}.scorebar b{font-size:22px}.scorebar small{font-size:9px}.board-frame{border-width:6px}.piece{border-width:1.5px}#status{font-size:11px;margin:11px -5px 7px}.controls button{padding:7px 12px;font-size:11px;min-height:32px}footer{font-size:8px;margin-top:8px}footer span{margin-left:5px}.garden-note{display:none}#startCover{padding:10px}#startCover h2{font-size:19px}#startCover p{font-size:12px;margin-bottom:15px}.primary{font-size:12px;padding:12px}dialog{padding:25px 22px}.result .pets{height:110px}.result h2{font-size:36px}}
@media(prefers-reduced-motion:reduce){*,*:before{animation:none!important;transition:none!important}}
/* Keep the entire match visible in the desktop preview. */
@media(min-width:701px){:root{--board:min(43vw,calc(100dvh - 330px),510px)}body{overflow-x:hidden}.intro{padding-top:12px;padding-bottom:8px}.cheer{height:min(520px,calc(100dvh - 250px));max-height:none}.garden-note{padding:8px}.cheer figure:nth-child(5){bottom:0}.game-layout{padding:0 8px}.cheer figure:nth-child(3){left:0}.cheer figure:nth-child(4){right:0}}
/* Othello club: distinct cream board, green grid and living ivy frame. */
:root{--line:#739b36;--board:min(43vw,calc(100dvh - 350px),510px)}
body{height:100dvh;min-height:0;overflow:hidden}header{padding-top:9px;padding-bottom:9px}.intro{padding:8px 0}.intro h1{font-size:clamp(22px,3vw,34px);margin:2px 0}.intro .eyebrow{display:none}.garden-note{display:none}.play{padding:10px 14px;background:linear-gradient(135deg,#e1edcfef,#c5d8acef);border:2px solid #6a8756;border-radius:20px;box-shadow:0 12px 32px #1b3c3938}.board-frame{border:0;padding:20px;background:linear-gradient(135deg,#365c40,#1f4435);border-radius:13px;box-shadow:0 5px 0 #1b3527,0 9px 14px #162d3b3d}.board-frame:after{content:'';position:absolute;inset:-5px;background:url('/assets/vine-frame.svg') center/100% 100% no-repeat;pointer-events:none;z-index:3}#board{border:2px solid #6e9137;position:relative;z-index:1}.cell,.cell:nth-child(n){background:#fff0c4;border-right:1.5px solid #7eaa42;border-bottom:1.5px solid #7eaa42}.cell:nth-child(16n+odd),.cell:nth-child(16n+10),.cell:nth-child(16n+12),.cell:nth-child(16n+14),.cell:nth-child(16n+16){background:#f9e8b6}.cell.legal:after{background:#4f852d;box-shadow:0 0 0 4px #a7ca653d}.piece.black{border:3px solid #1d211c}.piece.white{border:3px solid #fffdf2;background-color:#fffdf5}.scorebar{padding:6px 4px}.scorebar b{font-size:23px}.scorebar .avatar{height:36px;width:36px}#status{margin:10px -6px 6px}footer{margin-top:8px;line-height:1.5;color:#334c33}footer span{display:block;margin-left:0}.cheer{align-self:stretch;display:grid;grid-template-columns:1fr 1fr;grid-template-rows:repeat(3,minmax(0,1fr));height:auto;max-height:none;padding:10px 5px;gap:6px}.cheer figure,.cheer figure:nth-child(n){position:relative;inset:auto;width:100%;height:100%;animation:none;display:flex;flex-direction:column;align-items:center;min-height:0}.cheer figure:last-child{grid-column:1/3;width:50%;justify-self:center}.cheer img{min-height:0;flex:1;object-fit:contain}.cheer figcaption{position:static;transform:none;flex:none;background:#fff7e6;border:1px solid #9cac79;z-index:5;font-size:11px;padding:2px 10px;margin-top:2px}.cheer:before{display:none}
@media(max-width:700px){:root{--board:min(calc(100vw - 24px),calc(100dvh - 275px),430px)}header{padding:6px}.brand{font-size:12px}nav button{padding:7px;font-size:10px}.intro{padding:5px 0}h1{letter-spacing:1px}.intro p{font-size:9px}.game-layout{padding-top:0}.play{width:var(--board);padding:7px}.board-frame{padding:13px}.board-frame:after{inset:-3px}.cheer{display:none}.scorebar{padding:4px}.scorebar .avatar{height:30px;width:30px}.piece.black,.piece.white{border-width:2px}footer{font-size:9px}.controls button{min-height:33px}#status{font-size:10px}}
/* Dedicated club illustration: characters share one table, no floating cutouts. */
body{background:#e9edda}body:before{display:none}.cheer{display:none!important}header{height:54px;background:#fffbee}.brand{font-size:19px}.intro{height:64px;background:linear-gradient(#fffbee,#e6edd9);display:flex;flex-direction:column;justify-content:center}.intro h1{font-size:26px}.game-layout{width:min(100vw,calc((100dvh - 118px)*1.5));height:min(calc(100vw / 1.5),calc(100dvh - 118px));padding:0;display:flex;justify-content:center;align-items:center;background:url('/assets/othello-club-v1.png') center/100% 100% no-repeat;max-width:none;margin:0 auto}.play{--board:min(34vw,calc(100dvh - 330px),460px);width:calc(var(--board) + 30px);padding:8px 10px;border:0;background:transparent;box-shadow:none;border-radius:0}.coursebar,.scorebar{background:#fff9e7ed;padding:5px 8px}.coursebar{border-radius:12px 12px 0 0}.scorebar{border-radius:0 0 12px 12px;margin-bottom:8px}.board-frame{padding:18px}#status{border-radius:6px;background:#fff8e8f5;padding:5px 2px;margin:9px 0 5px;font-size:10px}.controls{gap:4px}.controls button{background:#fffaeafa;padding:7px 10px}footer{background:#fff9e7e8;border-radius:6px;font-size:9px;padding:3px;margin-top:5px}
@media(max-width:700px){header{height:46px}.brand{font-size:12px}.intro{height:49px}.intro h1{font-size:22px}.intro p{font-size:9px}.game-layout{width:100%;height:calc(100dvh - 95px);background-size:100% auto;background-position:center top;align-items:flex-end;padding-bottom:max(8px,env(safe-area-inset-bottom))}.play{--board:min(calc(100vw - 34px),calc(100dvh - 316px));width:calc(var(--board) + 20px);padding:6px;background:#c8dbb6d9;border-radius:16px;backdrop-filter:blur(2px)}.board-frame{padding:12px}.scorebar{margin-bottom:5px}.coursebar{font-size:9px}footer{font-size:8px}.controls button{font-size:10px;min-height:30px}#status{padding:3px;font-size:9px}.scorebar .avatar{width:28px;height:28px}.scorebar b{font-size:20px}}
/* Board-first layout: use the available match viewport, not the illustration's size. */
header{height:48px}.intro{height:48px}.intro h1{font-size:24px}.intro p{font-size:10px}.game-layout{width:100%;height:calc(100dvh - 96px);background-size:cover;align-items:center}.play{--board:min(56vw,calc(100dvh - 270px),680px);width:calc(var(--board) + 30px);padding:5px 10px}.coursebar{padding:3px 8px}.coursebar button{padding:5px 16px}.scorebar{padding:4px 8px;margin-bottom:6px}.scorebar b{display:inline;font-size:23px}.scorebar small{display:inline;margin-right:8px}.board-frame{padding:15px}#status{margin:8px 0 4px;padding:3px;font-size:11px}.controls button{padding:7px 12px}footer{margin-top:4px;padding:3px;font-size:9px}footer span{display:inline;margin-left:12px}
@media(max-width:700px){header{height:44px}.intro{height:44px}.intro h1{font-size:21px}.game-layout{height:calc(100dvh - 88px);background-size:auto 100%;background-position:center;align-items:center;padding:6px 0 max(8px,env(safe-area-inset-bottom))}.play{--board:min(calc(100vw - 12px),calc(100dvh - 260px));width:var(--board);padding:5px;background:#dce7c8df}.board-frame{padding:10px}.scorebar small{display:block;font-size:9px;margin-right:0}.scorebar b{font-size:21px}.scorebar .avatar{width:30px;height:30px}.controls button{font-size:11px;min-height:34px}footer{font-size:8px}footer span{display:block;margin-left:0}#status{font-size:10px}}
/* Natural botanical artwork replaces the repeated vector leaf pattern. */
.board-frame{background:#716341;border-radius:6px;box-shadow:0 4px 0 #4c422b,0 7px 12px #24342640}.board-frame:after{inset:-8px;background-image:url('/assets/ivy-frame-natural-v1.png');background-size:100% 100%;filter:drop-shadow(0 2px 2px #24342630)}
/* Keep every playable square unobstructed by decorative foliage. */
.board-frame:after{z-index:0}#board{z-index:1}
@media(min-width:701px){.game-layout{background-image:url('/assets/othello-club-v2.png');background-size:100% 100%}}
/* Distinct enamel rims keep both pet portraits legible on the cream board. */
.piece.white{border:3px solid #e4b62e;box-shadow:0 0 0 1px #956e14,0 3px 4px #4c3d4266,inset 0 0 0 1px #fff6b3}
.piece.black{border:3px solid #f4d285;box-shadow:0 0 0 1.5px #263c2a,0 3px 4px #4c3d4266,inset 0 0 0 1px #fff0c7}
.avatar.leon{border:2px solid #d9a71c}.avatar.chobi{border:2px solid #f4d285;outline:1px solid #384434}
@media(max-width:700px){.piece.white,.piece.black{border-width:2px}}
/* Reveal the approved foliage outside the playing area instead of burying it. */
.board-frame:after{inset:-25px;z-index:3;clip-path:polygon(evenodd,0 0,100% 0,100% 100%,0 100%,0 0,40px 40px,40px calc(100% - 40px),calc(100% - 40px) calc(100% - 40px),calc(100% - 40px) 40px,40px 40px);filter:drop-shadow(0 3px 3px #24342640)}
@media(max-width:700px){.board-frame:after{inset:-12px;clip-path:polygon(evenodd,0 0,100% 0,100% 100%,0 100%,0 0,22px 22px,22px calc(100% - 22px),calc(100% - 22px) calc(100% - 22px),calc(100% - 22px) 22px,22px 22px)}}
/* Clear rhythm from brand to title, subtitle, scoreboard, then foliage. */
header{height:38px;padding:3px 4vw}.brand{font-size:17px}.brand small{font-size:9px;margin-top:1px}nav button{padding:6px 14px}.intro{height:70px;padding:5px 8px 12px;gap:5px}.intro h1{font-size:28px;line-height:1.25;margin:0}.intro p{font-size:13px;line-height:1.5;margin:0}.game-layout{height:calc(100dvh - 108px)}.scorebar{margin-bottom:20px;position:relative;z-index:5}.coursebar{position:relative;z-index:5}.board-frame:after{background-image:url('/assets/ivy-frame-natural-v2.png');inset:-34px;clip-path:polygon(evenodd,0 0,100% 0,100% 100%,0 100%,0 0,49px 49px,49px calc(100% - 49px),calc(100% - 49px) calc(100% - 49px),calc(100% - 49px) 49px,49px 49px)}
@media(max-width:700px){header{height:40px;padding:3px 6px}.brand{font-size:12px}.brand small{font-size:8px}nav button{padding:6px;font-size:9px}.intro{height:64px;padding:4px 4px 12px;gap:4px}.intro h1{font-size:22px}.intro p{font-size:11px}.game-layout{height:calc(100dvh - 104px)}.scorebar{margin-bottom:14px}.board-frame:after{inset:-14px;clip-path:polygon(evenodd,0 0,100% 0,100% 100%,0 100%,0 0,24px 24px,24px calc(100% - 24px),calc(100% - 24px) calc(100% - 24px),calc(100% - 24px) 24px,24px 24px)}.controls button{min-height:30px;padding:5px 10px}footer{line-height:1.25}}
#status,.controls,footer{position:relative;z-index:5}
/* Chobi: black disc, with a fine white contour on the character only. */
.piece.black,.avatar.chobi{position:relative;overflow:hidden;background:#232922;border:2px solid #192019;outline:none;box-shadow:0 3px 4px #302d3859,inset 0 1px 2px #ffffff25}
.piece.black::before,.avatar.chobi::before{content:'';position:absolute;width:150%;height:225%;left:-25%;top:-36.25%;background:url('/assets/cast/chobi.png') center/100% 100% no-repeat;filter:drop-shadow(.6px 0 0 #fff9e9) drop-shadow(-.6px 0 0 #fff9e9) drop-shadow(0 .6px 0 #fff9e9) drop-shadow(0 -.6px 0 #fff9e9);pointer-events:none}
@keyframes turnOut{to{transform:rotateY(90deg)}}@keyframes turnIn{from{transform:rotateY(-90deg)}to{transform:rotateY(0)}}.piece.turning{animation:turnOut .09s linear forwards}.piece.turning-back{animation:turnIn .11s ease-out}.sound-tests{display:flex;gap:9px;flex-wrap:wrap}.sound-tests button{padding:12px}.source-note{font-size:10px!important}.scorebar small{max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.result p{margin:8px 0}.result .pets{height:100px}.result-score{margin:6px}
#menu{font-size:19px;line-height:1;padding:6px 12px}.menu-items{display:grid;gap:10px}.menu-items button{text-align:left;padding:13px;border-radius:10px}@media(max-width:700px){header #ranking,header #account{display:none}#menu{font-size:20px;padding:6px 12px}nav{margin-left:auto}}
.volume-settings{padding:12px 14px;background:#eef2df;border-radius:12px;margin:12px 0}.volume-settings label{display:flex;justify-content:space-between;align-items:center;font-size:14px;margin:8px 0 2px}.volume-settings output{min-width:44px;text-align:right;font-weight:bold}.volume-settings input[type=range]{appearance:auto;accent-color:#527a38;width:100%;height:32px;margin:0;padding:0;border:0;background:transparent;cursor:pointer}.volume-settings small{display:block;font-size:10px;line-height:1.6;margin-top:8px}.volume-settings button{font-size:11px;padding:6px 12px}.sound-tests{margin-top:12px}.sound-tests button{padding:9px 12px}@media(max-width:700px){dialog:has(.volume-settings){padding:20px;max-height:calc(100dvh - 20px)}dialog:has(.volume-settings) h2{font-size:19px}dialog:has(.volume-settings) p{font-size:11px;margin:8px 0}dialog:has(.volume-settings) .rules-list{font-size:11px;line-height:1.6;margin:8px 0}.volume-settings{padding:8px 12px}.volume-settings label{font-size:13px}}

/* Movie stays entirely within phone and desktop viewport. */
.opening-screen{position:fixed;inset:0;z-index:1000;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#1c3023;padding:16px;padding-bottom:max(16px,env(safe-area-inset-bottom));gap:16px}
.opening-player{position:relative;width:min(100%,1280px);max-height:calc(100dvh - 100px);aspect-ratio:16/9;display:flex;align-items:center;justify-content:center;background:#111d15;overflow:hidden;border-radius:16px;box-shadow:0 12px 50px #0006}
.opening-player video{display:block;width:100%;height:100%;object-fit:contain}
.opening-play{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);white-space:nowrap}
.opening-play[hidden]{display:none}
.opening-actions{display:flex;align-items:center;justify-content:center;gap:24px;color:#fff;width:100%;flex-wrap:wrap}
.opening-actions label{display:flex;align-items:center;gap:12px}
.opening-actions input{width:120px;accent-color:#ecd36e}
@media(max-width:500px){.opening-screen{padding:10px;gap:12px}.opening-actions{gap:12px;font-size:13px}.opening-player{border-radius:10px}}

/* Always-visible mode choices; reserve their space inside the viewport. */
.intro{height:112px;padding:4px 8px 6px;gap:4px}
.mode-switch{display:flex;justify-content:center;gap:7px;margin-top:3px}
.mode-switch button{min-width:138px;min-height:36px;padding:7px 18px;font-size:13px;font-weight:bold;border:1px solid #809865;background:#fffbed}
.mode-switch button[aria-pressed=true]{background:#446a3e;color:#fff9dc;border-color:#446a3e;box-shadow:0 2px 5px #25452624}
.game-layout{height:calc(100dvh - 150px)}
.game-layout[hidden],.people-lobby[hidden]{display:none!important}
.play{--board:min(56vw,calc(100dvh - 350px),680px)}
.people-lobby{height:calc(100dvh - 150px);display:grid;place-items:center;padding:18px;background:url('/assets/othello-club-v2.png') center/cover}
.lobby-card{max-width:430px;text-align:center;background:#fffbedf5;border:1px solid #a4b181;border-radius:22px;padding:24px 28px;box-shadow:0 12px 40px #26422930}
.lobby-card h2{margin:12px 0}.lobby-card p{font-size:14px;line-height:1.8}.lobby-state{padding:10px;background:#e8efd9;border-radius:10px;font-weight:bold}
@media(max-width:700px){.intro{height:102px;padding:4px 4px 5px;gap:3px}.intro h1{font-size:21px}.intro p{font-size:10px}.mode-switch{margin-top:2px}.mode-switch button{min-height:34px;min-width:140px;padding:6px 12px;font-size:12px}.game-layout,.people-lobby{height:calc(100dvh - 142px)}.play{--board:min(calc(100vw - 12px),calc(100dvh - 330px))}.lobby-card{padding:20px;max-width:100%}.lobby-card p{font-size:13px}}

/* Ranking names are readable on the mode banners without opening another view. */
.mode-switch{width:min(100%,640px);align-self:center}
.mode-switch button{display:flex;flex:1;min-width:0;flex-direction:column;align-items:center;gap:3px;border-radius:14px;padding:7px 12px;min-height:76px}
.mode-switch b{font-size:13px}.mode-switch .rank-name{display:block;width:100%;font-size:12px;line-height:1.4;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mode-switch small{font-size:10px;font-weight:normal;line-height:1.3}
.intro{height:152px}.game-layout,.people-lobby{height:calc(100dvh - 190px)}.play{--board:min(56vw,calc(100dvh - 390px),680px)}
@media(max-width:700px){.intro{height:140px}.mode-switch{width:100%;gap:6px;padding:0 7px}.mode-switch button{min-height:72px;padding:6px 5px;gap:2px}.mode-switch b{font-size:12px}.mode-switch .rank-name{font-size:10.5px}.mode-switch small{font-size:9px}.game-layout,.people-lobby{height:calc(100dvh - 180px)}.play{--board:min(calc(100vw - 12px),calc(100dvh - 368px))}}

/* Official school uniforms, framed as the round profile icons used in 金魚日和. */
.name-avatar{display:inline-block;flex:none;width:32px;height:32px;border:2px solid #c8ad59;border-radius:50%;background-color:#f6edcf;background-repeat:no-repeat;background-size:160% auto;background-position:50% 18%;vertical-align:middle;box-shadow:0 1px 4px #283d3028}
.name-avatar[data-avatar="koharu"]{background-image:url("/assets/cast/koharu.png")}
.name-avatar[data-avatar="sumire"]{background-image:url("/assets/cast/sumire.png")}
.name-avatar[data-avatar="yui"]{background-image:url("/assets/cast/yui.png")}
.name-avatar[data-avatar="shizuku"]{background-image:url("/assets/cast/shizuku.png")}
.name-avatar[data-avatar="hinata"]{background-image:url("/assets/cast/hinata.png")}
.name-avatar[data-avatar="aoi"]{background-image:url("/assets/cast/aoi.png")}
.name-avatar[data-avatar="haru"]{background-image:url("/assets/cast/haru.png")}
.name-avatar[data-avatar="yuki"]{background-image:url("/assets/cast/yuki.png")}
.name-avatar[data-avatar="ren"]{background-image:url("/assets/cast/ren.png")}
.name-avatar[data-avatar="natsu"]{background-image:url("/assets/cast/natsu.png")}
.name-avatar[data-avatar="chobi"]{background-image:url("/assets/cast/chobi.png")}
.name-avatar[data-avatar="leon"]{background-image:url("/assets/cast/leon.png")}
.name-avatar[data-avatar=chobi]{background-position:50% 28%}.name-avatar[data-avatar=leon]{background-position:50% 21%}
#account{display:flex;align-items:center;gap:6px}#account .name-avatar{width:23px;height:23px}#playerAvatar{width:36px;height:36px}
.avatar-picker{border:0;margin:12px 0;padding:0}.avatar-picker legend{font-size:13px;font-weight:bold;margin-bottom:7px}.avatar-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px 5px}.avatar-choice{position:relative;display:flex;flex-direction:column;align-items:center;gap:3px;margin:0;padding:4px 0;border:2px solid transparent;border-radius:12px;cursor:pointer;font-size:10px}.avatar-choice .name-avatar{width:45px;height:45px}.avatar-choice input{position:absolute;width:1px;height:1px;opacity:0;padding:0;margin:0}.avatar-choice:has(input:checked){background:#e2edce;border-color:#5f843c}.avatar-choice:has(input:checked):after{content:'✓';position:absolute;right:0;top:0;border-radius:50%;background:#426a36;color:white;width:16px;height:16px;text-align:center;font-size:11px}.avatar-choice:has(input:focus-visible){outline:3px solid #dba638;outline-offset:2px}
.profile-name{display:flex;align-items:center;gap:10px}.profile-name .name-avatar{width:48px;height:48px}.rank-person{display:flex;align-items:center;gap:8px}.rank-person .name-avatar{width:32px;height:32px}
.mode-switch #aiLeader{display:flex;justify-content:center;align-items:center;gap:5px}.mode-switch #aiLeader .name-avatar{width:22px;height:22px;border-width:1px}.mode-switch #aiLeader>span:last-child{min-width:0;overflow:hidden;text-overflow:ellipsis}
dialog:has(.avatar-picker){width:min(470px,calc(100vw - 24px));padding:22px}dialog:has(.avatar-picker) h2{font-size:21px;margin:4px 0 8px}dialog:has(.avatar-picker) p{margin:6px 0;font-size:12px;line-height:1.5}dialog:has(.avatar-picker) label:not(.avatar-choice){margin:8px 0}dialog:has(.avatar-picker) input:not([type=radio]){padding:9px}dialog:has(.avatar-picker) .error:empty{min-height:0;margin:4px 0}dialog:has(.avatar-picker) .textbutton{margin-top:6px;padding:6px;display:block;width:100%;font-size:11px}dialog:has(.avatar-picker) .primary{padding:10px}
@media(max-width:700px){#account{display:none}#playerAvatar{width:30px;height:30px}.avatar-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:4px}.avatar-choice .name-avatar{width:46px;height:46px}.avatar-choice{padding:2px 0;gap:1px}.avatar-picker{margin:8px 0}.avatar-picker legend{font-size:12px}.mode-switch #aiLeader{gap:3px}.mode-switch #aiLeader .name-avatar{width:19px;height:19px}}

.result-actions{display:flex;justify-content:center;gap:10px;margin-top:12px}.result-actions button{min-height:42px;padding:10px 16px}.result-actions #resultHome{background:#fff9e9;border-color:#708d52}
