@import url('https://fontsapi.zeoseven.com/570/main/result.css');
:root{
  --bg:#0b0f14;--bg2:#10161f;--panel:#151e29;--panel2:#1b2633;--panel3:#202d3c;
  --line:#34475b;--line2:#465d75;--text:#edf3f7;--muted:#91a2b4;--accent:#7fda91;
  --danger:#ff8799;--gold:#f1ce68;--shadow:#05070a;--input:#101821;
  --pxfont:'Fusion Pixel 12px M zh_hans','Fusion Pixel 12px M latin','Fusion Pixel 12px Proportional SC','SimSun','Microsoft YaHei UI',monospace;
}
*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden;background:var(--bg);color:var(--text);font-family:var(--pxfont);font-size:15px}body{image-rendering:pixelated}button,input,textarea,select{font:inherit;color:inherit}button,input,textarea,select{border:2px solid var(--line);background:var(--input);border-radius:0;outline:none}button{cursor:pointer;padding:9px 12px;box-shadow:3px 3px 0 var(--shadow)}button:hover{border-color:var(--accent);transform:translate(-1px,-1px);box-shadow:4px 4px 0 var(--shadow)}button:active{transform:translate(1px,1px);box-shadow:2px 2px 0 var(--shadow)}button.primary{background:var(--accent);color:#0a130d;border-color:#b9efc3;font-weight:700}button.danger{border-color:#984858;color:#ffc7d0}.full{width:100%}.hidden{display:none!important}.muted{color:var(--muted)}.hint{color:var(--muted);font-size:12px}.minw0{min-width:0}.error{color:#ff9aa9;min-height:24px;margin-top:10px}.boot{height:100dvh;display:grid;place-items:center;font-size:28px;letter-spacing:3px;background:repeating-linear-gradient(0deg,#0b0f14 0 20px,#0e141c 20px 40px)}
.auth-screen{height:100dvh;overflow:auto;display:grid;place-items:center;padding:28px 14px;background:repeating-linear-gradient(0deg,#0b0f14 0 20px,#0e141c 20px 40px)}.panel{background:var(--panel);border:3px solid var(--line);box-shadow:8px 8px 0 var(--shadow)}.auth-card{width:min(540px,94vw);padding:28px}.auth-brand{display:flex;align-items:center;gap:18px;margin-bottom:20px}.logo-text{font-size:24px;letter-spacing:2px;font-weight:700}.auth-card label{display:block;margin:17px 0;color:#cbd6df}.auth-card input{width:100%;padding:11px;margin-top:7px}.auth-card input:focus,.auth-card select:focus{border-color:var(--accent)}
.color-picker{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:9px;margin-top:10px}.color-chip{height:48px;padding:0;border:3px solid #293949;background:var(--panel2);box-shadow:none;display:grid;place-items:center}.color-chip:hover{transform:none;box-shadow:none;border-color:#62778d}.color-chip.selected{border-color:#fff;outline:2px solid var(--accent);outline-offset:1px}.color-chip .slime{pointer-events:none}
.slime{--slime:#82d996;--slime-dark:#4e9d64;--slime-hi:#c7f1d0;position:relative;display:inline-block;flex:0 0 auto;width:34px;height:28px;background:var(--slime);border:3px solid #17211d;box-shadow:inset 0 -5px 0 color-mix(in srgb,var(--slime) 72%,#000),inset 5px 4px 0 rgba(255,255,255,.22);clip-path:polygon(18% 25%,25% 11%,36% 6%,42% 2%,48% 8%,55% 2%,63% 7%,76% 12%,84% 25%,94% 48%,95% 72%,83% 91%,67% 96%,29% 96%,13% 89%,5% 70%,7% 48%)}.slime:before,.slime:after{content:'';position:absolute;width:4px;height:5px;background:#17212a;top:13px}.slime:before{left:9px}.slime:after{right:9px}.slime.sm{width:24px;height:20px;border-width:2px}.slime.sm:before,.slime.sm:after{width:3px;height:3px;top:9px}.slime.sm:before{left:6px}.slime.sm:after{right:6px}.slime.lg{width:66px;height:52px;border-width:4px}.slime.lg:before,.slime.lg:after{width:6px;height:7px;top:25px}.slime.lg:before{left:18px}.slime.lg:after{right:18px}.slime.xl{width:78px;height:60px;border-width:4px}.slime.xl:before,.slime.xl:after{width:7px;height:8px;top:28px}.slime.xl:before{left:21px}.slime.xl:after{right:21px}.slime.mint{--slime:#82d996}.slime.sky{--slime:#72bddd}.slime.peach{--slime:#e9948f}.slime.lemon{--slime:#e7d35c}.slime.lilac{--slime:#a98be0}.slime.milk{--slime:#e5e2cf}.slime.cocoa{--slime:#aa765a}.slime.rose{--slime:#dc7faa}.slime.aqua{--slime:#6bd5cb}.slime.lime{--slime:#acd85e}
.app{display:grid;grid-template-columns:230px minmax(0,1fr);height:100dvh;overflow:hidden}.sidebar{min-width:0;height:100%;background:#0b1118;border-right:3px solid #293949;padding:16px;display:flex;flex-direction:column;overflow:hidden}.brand{display:flex;gap:12px;align-items:center;padding-bottom:16px;border-bottom:2px solid #263646}.brand div{min-width:0}.brand b{display:block;font-size:17px}.brand small{display:block;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:3px}.sidebar nav{display:grid;gap:7px;margin-top:18px;overflow:auto}.nav{text-align:left;background:#101821;border-color:#293949}.nav.active{background:#21372f;border-color:var(--accent);color:#c9f5d2}.sidebar-bottom{margin-top:auto;display:grid;grid-template-columns:auto 1fr;gap:7px;color:var(--muted);padding-top:14px;border-top:2px solid #263646}.sidebar-bottom small{grid-column:2}.main{min-width:0;height:100%;display:grid;grid-template-rows:auto minmax(0,1fr);overflow:hidden;background:linear-gradient(#101821,#0c1219)}.topbar{z-index:5;display:flex;justify-content:space-between;align-items:center;gap:12px;background:#111a24;border-bottom:3px solid #2b3d50;padding:13px 18px;min-height:72px}.title-wrap{min-width:0}.topbar h1{margin:0;font-size:21px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.topbar p{margin:4px 0 0;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.top-actions{flex:0 0 auto}
.room-browser{min-height:0;overflow:auto;padding:18px;display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));align-content:start;gap:13px}.room-browser.channels{display:flex;flex-direction:column;gap:7px;max-width:980px;width:100%}.channel-row{display:grid;grid-template-columns:44px minmax(0,1fr) auto;gap:12px;align-items:center;background:var(--panel);border:2px solid #304256;padding:12px 14px}.channel-icon{font-size:22px;color:var(--muted);text-align:center}.channel-row h3{margin:0 0 3px}.channel-row p{margin:0;color:var(--muted);white-space:normal;word-break:normal;overflow-wrap:break-word}.channel-count{color:var(--muted);white-space:nowrap}.room-card{background:var(--panel);border:3px solid #304256;box-shadow:5px 5px 0 var(--shadow);padding:15px;min-height:128px}.room-card h3{margin:0 0 8px}.room-card p{margin:6px 0;color:var(--muted);line-height:1.45}.room-count{color:var(--accent)}.room-tag{display:inline-block;border:2px solid #41536a;padding:3px 6px;margin:7px 4px 0 0;color:#b2c1cf}.room-card button{margin-top:12px;width:100%}
.room-view{min-height:0;overflow:hidden;padding:13px;display:grid;grid-template-rows:auto minmax(0,1fr)}.room-head{display:flex;align-items:center;gap:13px;margin-bottom:10px;min-height:42px}.room-head h2{margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.room-head small{color:var(--muted)}.room-body{min-height:0;display:grid;grid-template-columns:minmax(0,1fr) minmax(250px,320px);gap:12px}.room-main,.room-side,.page-card{background:var(--panel);border:3px solid #304256;box-shadow:4px 4px 0 var(--shadow)}.room-main{min-height:0;padding:14px;overflow:auto}.room-side{min-height:0;display:grid;grid-template-rows:auto minmax(0,1fr) auto;overflow:hidden}.online-list{padding:10px;border-bottom:2px solid #304154;max-height:155px;overflow:auto}.online-user{display:flex;align-items:center;gap:7px;margin:5px 0}.role-badge{font-size:11px;padding:2px 4px;border:1px solid #6d8298;color:#cbd8e3}.role-badge.owner{border-color:var(--gold);color:#ffe69a}.role-badge.admin{border-color:#b993ff;color:#d6c0ff}.chat-log{min-height:0;padding:11px;overflow:auto}.msg{position:relative;display:grid;grid-template-columns:26px minmax(0,1fr);gap:7px;margin:8px 0;padding:4px 6px;line-height:1.55;border-radius:8px}.msg:hover,.msg:focus-within{background:#ffffff08}.msg-body{position:relative;min-width:0;overflow-wrap:break-word;word-break:normal}.msg-head{min-height:20px}.msg b{color:var(--accent)}.msg-edited{color:var(--muted);font-size:9px}.msg-actions{position:absolute;right:0;top:-7px;display:flex;gap:3px;opacity:0;pointer-events:none;transition:opacity .12s ease}.msg:hover .msg-actions,.msg:focus-within .msg-actions{opacity:1;pointer-events:auto}.msg-actions button{padding:3px 6px;font-size:9px;box-shadow:1px 1px 0 var(--shadow);background:#17212d}.msg-actions button:last-child{color:#ffb0bc}.msg-edit-input{display:block;width:100%;min-height:62px;margin-top:4px;padding:7px;resize:vertical}.msg-edit-actions{display:flex;gap:5px;justify-content:flex-end;margin-top:5px}.msg-edit-actions button{padding:5px 8px;font-size:10px}.chat-form{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:7px;padding:10px;border-top:2px solid #304154}.chat-form input{padding:10px;min-width:0}
.page{min-height:0;overflow:auto;padding:18px}.page-card{padding:18px;margin-bottom:14px}.page-card h3{margin-top:0}.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:12px}.form-grid label{display:grid;gap:6px}.form-grid input,.form-grid textarea,.form-grid select{padding:10px;min-width:0}.form-grid select,select,option{background:var(--input)!important;color:var(--text)!important}.id-badge{display:inline-block;padding:5px 8px;border:2px solid var(--accent);color:#c7f6d2;background:#12211b}.friend-row,.admin-row{display:flex;align-items:center;gap:10px;border-bottom:2px dashed #34475b;padding:10px 0}.grow{flex:1;min-width:0}.online-dot{color:#69e980}.offline-dot{color:#66717c}
.music-layout{display:grid;grid-template-columns:minmax(300px,440px) minmax(0,1fr);gap:15px}.music-player{background:#101821;border:3px solid #40536a;padding:17px}.music-art{width:128px;height:128px;margin:0 auto 14px;display:grid;place-items:center;background:repeating-linear-gradient(45deg,#253b33 0 10px,#1d3029 10px 20px);border:4px solid #506b61;box-shadow:6px 6px 0 #070a0e}.music-player iframe{width:100%;height:86px;border:0;background:#fff;margin-top:12px}.music-search{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px}.music-search input{padding:10px}.search-results{display:grid;gap:7px;margin-top:10px}.song-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:center;border:2px solid #34485d;background:#111a23;padding:9px}.song-row b,.song-row small{display:block}.song-row small{color:var(--muted);margin-top:3px}.notice{border:2px dashed #53677c;padding:10px;color:#acbbc8;line-height:1.55}
.game-wrap{display:grid;gap:12px}.game-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.players-bar{display:flex;flex-wrap:wrap;gap:8px}.player-chip{border:2px solid #40536a;background:#101821;padding:7px 9px}.player-chip.turn{border-color:var(--gold);color:#ffe58b}.bot-chip{border-color:#7d67a4;color:#d1bcf5}.practice-badge{display:inline-block;border:2px solid #8d6bb5;color:#d8c3f5;padding:4px 7px}.board-shell{overflow:auto;padding:12px;background:#0e151d;border:3px solid #34485f}.gomoku{display:grid;grid-template-columns:repeat(15,34px);width:max-content;background:#c89b5a;border:5px solid #6f4a28;padding:10px}.gcell{width:34px;height:34px;box-shadow:none;border:1px solid #72532f;background:transparent;padding:0;position:relative}.stone{position:absolute;inset:4px;border:3px solid #1a1a1a;border-radius:50%;box-shadow:inset 3px 3px rgba(255,255,255,.18)}.stone.B{background:#20242a}.stone.W{background:#e4e2d6;border-color:#74706a}.xiangqi{display:grid;grid-template-columns:repeat(9,52px);width:max-content;background:#c99b60;border:5px solid #744a27;padding:8px}.xcell{width:52px;height:52px;border:1px solid #805b35;background:transparent;box-shadow:none;padding:2px}.xpiece{width:40px;height:40px;border:3px solid #a74d36;color:#a53d2c;background:#f3d79b;border-radius:50%;display:grid;place-items:center;margin:auto;font-size:20px}.xpiece.black{border-color:#303a3d;color:#20272a}.selected{outline:4px solid #76d891;outline-offset:-4px}.chess{display:grid;grid-template-columns:repeat(8,58px);width:max-content;border:5px solid #536274}.ccell{width:58px;height:58px;box-shadow:none;border:0;font-size:36px;padding:0}.ccell.light{background:#cbd5c0;color:#19222b}.ccell.dark{background:#6d8975;color:#10151a}.cards-area{display:grid;gap:14px}.game-status{border:2px solid #40536a;background:#101821;padding:9px}.pot{font-size:19px;color:var(--gold)}.cards,.community{display:flex;flex-wrap:wrap;gap:7px;min-height:72px}.card{display:inline-flex;flex-direction:column;justify-content:space-between;width:48px;height:68px;background:#f3f0e6;color:#1d242b;border:3px solid #88939b;padding:5px;box-shadow:3px 3px 0 #080b0e}.card.red{color:#b23f50}.hidden-card{background:#34455a;color:#d3deea;justify-content:center;align-items:center;font-size:24px}.seat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:9px}.seat{border:3px solid #34475b;background:#101821;padding:10px;min-height:115px}.seat.me{border-color:var(--accent)}.seat.turn{outline:3px solid var(--gold)}
.rank-tabs{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:12px}.rank-table{width:100%;border-collapse:collapse}.rank-table th,.rank-table td{padding:9px;border-bottom:2px solid #304154;text-align:left}.rank-pos{color:var(--gold);width:48px}.me-hero{display:grid;grid-template-columns:auto minmax(0,1fr);gap:18px;align-items:center}.slime-stage{width:130px;height:108px;display:grid;place-items:center;background:linear-gradient(#1a2834,#101923);border:3px solid #41546b;box-shadow:5px 5px 0 var(--shadow)}
.toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%,20px);opacity:0;pointer-events:none;background:#111b25;border:3px solid var(--accent);padding:10px 16px;box-shadow:5px 5px 0 #05080b;transition:.15s;z-index:99;max-width:min(680px,90vw)}.toast.show{opacity:1;transform:translate(-50%,0)}
@media(max-width:1000px){.app{grid-template-columns:190px minmax(0,1fr)}.room-body{grid-template-columns:minmax(0,1fr) 250px}.music-layout{grid-template-columns:1fr}}
@media(max-width:760px){html,body{font-size:14px}.app{grid-template-columns:72px minmax(0,1fr)}.sidebar{padding:10px 7px}.brand{justify-content:center}.brand div{display:none}.nav{font-size:0;text-align:center;padding:11px 4px}.nav::first-letter{font-size:18px}.sidebar-bottom span:not(#connDot),.sidebar-bottom small{display:none}.sidebar-bottom{display:flex;justify-content:center}.topbar{padding:10px 12px;min-height:62px}.topbar p{display:none}.room-browser,.page{padding:10px}.room-view{padding:8px}.room-body{grid-template-columns:1fr}.room-side{max-height:42vh}.online-list{max-height:90px}.room-main{min-height:0}.channel-row{grid-template-columns:34px minmax(0,1fr);padding:10px}.channel-count{grid-column:2}.music-layout{grid-template-columns:1fr}.xiangqi{grid-template-columns:repeat(9,44px)}.xcell{width:44px;height:44px}.xpiece{width:35px;height:35px;font-size:17px}.chess{grid-template-columns:repeat(8,48px)}.ccell{width:48px;height:48px;font-size:30px}.gomoku{grid-template-columns:repeat(15,30px)}.gcell{width:30px;height:30px}}
@media(max-width:480px){.app{grid-template-columns:60px minmax(0,1fr)}.room-head{gap:7px}.room-head h2{font-size:16px}.topbar h1{font-size:18px}.color-picker{grid-template-columns:repeat(5,1fr)}.seat-grid{grid-template-columns:1fr}.music-search{grid-template-columns:1fr}.song-row{grid-template-columns:1fr}.song-row button{width:100%}}
.chat-center{min-height:0;display:grid;grid-template-rows:auto minmax(0,1fr) auto;background:var(--panel);border:3px solid #304256;box-shadow:4px 4px 0 var(--shadow);overflow:hidden}.channel-banner{display:flex;flex-direction:column;gap:4px;padding:12px 14px;border-bottom:2px solid #304154;background:#121c27}.channel-banner b{font-size:17px}.channel-banner span{color:var(--muted)}.chat-log-main{font-size:15px;padding:14px 16px}.members-only{grid-template-rows:minmax(0,1fr)}.members-only .online-list{max-height:none;height:100%;border-bottom:0}
/* v0.0.3 game/presence refinements */
button:disabled{opacity:.42;cursor:not-allowed;transform:none!important;box-shadow:2px 2px 0 var(--shadow)!important}.ready-mark{font-style:normal;font-size:11px;border:1px solid #56697e;color:#8291a1;padding:2px 5px;margin-left:4px}.ready-mark.ready{color:#8ff0a5;border-color:#5ca96c}.ready-help{color:var(--muted);font-size:12px;border-left:3px solid var(--line2);padding:5px 8px}.status-badge{display:inline-block;font-size:11px;padding:2px 5px;border:1px solid #506276;color:#b9c6d2;white-space:nowrap}.status-online{border-color:#4d9b63;color:#84e59a}.status-busy{border-color:#b96472;color:#ff9cac}.status-focus{border-color:#9d7fd1;color:#cfb8ff}.status-away{border-color:#667785;color:#9cabb6}.status-gaming{border-color:#5d88c4;color:#94bbf0}.status-listening{border-color:#55a6a2;color:#87ded8}.presence-led{width:9px;height:9px;border:1px solid #23303b;flex:0 0 auto}.presence-led.on{background:#66e981;box-shadow:0 0 7px #66e981}.presence-led.off{background:#53606c}.admin-actions{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end}.admin-row small{color:var(--muted);line-height:1.55}.color-chip:hover .slime{filter:none}.color-chip:not(.selected):hover{background:var(--panel2)}

/* Gomoku stones are placed on 15x15 line intersections. Fixed pixel geometry avoids CSS arithmetic incompatibilities. */
.gomoku-board{position:relative;width:512px;height:512px;background:#c99b5d;border:5px solid #6f4a28;box-shadow:inset 0 0 0 3px #dcb276,5px 5px 0 #070a0e}
.gomoku-board:before{content:"";position:absolute;left:18px;top:18px;width:476px;height:476px;background-image:linear-gradient(to right,#674925 1px,transparent 1px),linear-gradient(to bottom,#674925 1px,transparent 1px);background-size:34px 34px;border-right:1px solid #674925;border-bottom:1px solid #674925;pointer-events:none}
.gpoint{position:absolute;width:28px;height:28px;border:0;background:transparent;box-shadow:none!important;padding:0;z-index:3}.gpoint:hover{transform:none!important;border:0;background:rgba(255,231,172,.15)}.gpoint .stone{inset:2px}.board-star{position:absolute;z-index:2;width:7px;height:7px;background:#674925;border-radius:50%;pointer-events:none}

/* Xiangqi pieces sit on the 9x10 intersections, including the river and palace geometry. */
.xiangqi-board{position:relative;width:472px;height:526px;background:#d1a467;border:5px solid #744a27;box-shadow:inset 0 0 0 3px #e2bc82,5px 5px 0 #070a0e}.xq-lines{position:absolute;left:20px;top:20px;width:432px;height:486px;overflow:visible}.xq-lines line{stroke:#684522;stroke-width:2;vector-effect:non-scaling-stroke}.xq-lines text{fill:#684522;font-family:var(--pxfont);font-size:22px;text-anchor:middle;dominant-baseline:middle}.xpoint{position:absolute;width:46px;height:46px;border:0;background:transparent;box-shadow:none!important;padding:0;z-index:3}.xpoint:hover{transform:none!important;border:0;background:rgba(255,238,184,.16);border-radius:50%}.xpoint.selected{outline:4px solid #69d783;outline-offset:0;border-radius:50%}.xpoint .xpiece{width:42px;height:42px;margin:2px auto;font-size:19px}

@media(max-width:650px){.board-shell{padding:8px}.gomoku-board,.xiangqi-board{transform-origin:top left}.gomoku-board{transform:scale(.82);margin-right:-92px;margin-bottom:-92px}.xiangqi-board{transform:scale(.82);margin-right:-85px;margin-bottom:-95px}.xq-lines text{font-size:18px}}


/* v0.0.6 local server identity/diagnostics */
.local-admin-panel{margin-top:12px;padding:12px;border:2px dashed var(--line2);background:#0f1720;max-height:48vh;overflow:auto}.local-admin-panel code{color:#c7f6d2;background:#0a1118;padding:2px 5px}.auth-card .local-admin-panel{max-height:38vh}.local-admin-panel .admin-row:last-of-type{border-bottom:0}

/* v0.0.9 account / device administration */
.admin-user-box{border:2px solid var(--line);background:#101821;padding:12px;margin:10px 0;box-shadow:3px 3px 0 var(--shadow)}
.admin-edit-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:9px;margin:10px 0}.admin-edit-grid label{display:grid;gap:5px;color:var(--muted)}.admin-edit-grid input,.admin-edit-grid select{width:100%;min-width:0;padding:8px;background:var(--input)!important;color:var(--text)!important}
.device-details{margin-top:10px;border-top:2px dashed var(--line);padding-top:8px}.device-details summary{cursor:pointer;color:#c7d4df}.device-row{display:flex;align-items:center;gap:8px;border-top:1px dashed #304154;padding:9px 0}.device-row input{width:min(260px,100%);padding:7px;background:var(--input);color:var(--text)}.device-row small{color:var(--muted);line-height:1.55;overflow-wrap:anywhere}.admin-user-card{align-items:flex-start}
@media(max-width:760px){.device-row{align-items:stretch;flex-direction:column}.admin-actions{justify-content:flex-start}.admin-edit-grid{grid-template-columns:1fr}}

/* v0.1.0 background activities / notifications */
.activity-dock{position:fixed;right:18px;bottom:18px;z-index:80;display:grid;gap:10px;width:min(330px,calc(100vw - 36px));pointer-events:none}.activity-card{pointer-events:auto;background:#101821;border:3px solid var(--line2);box-shadow:5px 5px 0 #05080b;min-width:250px}.activity-card.hidden{display:none}.activity-head{display:flex;align-items:center;gap:8px;padding:8px 10px;background:#162332;border-bottom:2px solid #304154;cursor:grab;user-select:none}.activity-head:active{cursor:grabbing}.activity-head b{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.activity-body{padding:10px;display:grid;gap:7px}.activity-actions{display:flex;gap:6px;flex-wrap:wrap}.activity-actions button{flex:1}.activity-card iframe{width:100%;height:86px;border:0;background:#0a1118}.activity-timer{font-variant-numeric:tabular-nums;color:#f1ce86}.activity-card.danger-clock{border-color:#d06072}.notify-stack{position:fixed;right:18px;bottom:18px;z-index:95;width:min(360px,calc(100vw - 36px));display:grid;gap:8px;pointer-events:none}.notify-card{pointer-events:auto;background:#111b25;border:3px solid #4f657c;box-shadow:5px 5px 0 #05080b;padding:10px;animation:notifyIn .15s ease-out}.notify-card b{display:block;margin-bottom:4px}.notify-card small{color:var(--muted)}@keyframes notifyIn{from{transform:translateX(20px);opacity:0}to{transform:none;opacity:1}}
.channel-follow{min-width:82px}.channel-follow.on{border-color:#e1bd65;color:#f1ce86}.channel-row{grid-template-columns:34px minmax(0,1fr) auto auto!important}.game-clockbar{display:flex;gap:10px;flex-wrap:wrap;margin:7px 0}.clock-pill{border:2px solid #40536a;background:#101821;padding:6px 9px;font-variant-numeric:tabular-nums}.clock-pill.turn{border-color:#f1ce68;color:#f1ce86}.clock-pill.low{border-color:#d06072;color:#ff9cac}.auto-rule{font-size:12px;color:var(--muted);padding:6px 8px;border-left:3px solid #40536a}.status-focus{display:none}
@media(max-width:760px){.activity-dock,.notify-stack{right:8px;bottom:8px;width:min(320px,calc(100vw - 16px))}.channel-row{grid-template-columns:34px minmax(0,1fr) auto!important}.channel-follow{grid-column:2/4;justify-self:start}}
@media(min-width:1101px){.notify-stack{right:370px}}
@media(max-width:1100px){.notify-stack{right:8px;bottom:210px}}

.last-move{outline:3px solid #ffd75e!important;outline-offset:-3px;box-shadow:0 0 0 2px rgba(0,0,0,.35),0 0 12px rgba(255,215,94,.65)!important}.gpoint.last-move{border-radius:50%;background:rgba(255,215,94,.28)}.netease-main-player{width:100%;max-width:420px;height:106px;border:0;background:transparent}

/* Owner recovery / dedicated verification management */
.owner-recovery-box{margin-top:16px;padding:12px;border:1px solid var(--line);border-radius:12px;background:rgba(255,255,255,.025)}
.owner-recovery-box summary{cursor:pointer;font-weight:700;margin-bottom:10px}.owner-recovery-box[open] summary{margin-bottom:12px}
.recovery-code{display:inline-block;padding:5px 9px;border:1px dashed var(--line);border-radius:8px;font-size:1.05em;letter-spacing:.08em;user-select:all}
.music-error{min-height:18px;margin-top:5px}.music-activity audio{width:100%;max-width:330px;height:40px}

/* v0.1.2 organized game hub / single player / extra games */
.game-browser{display:block}.game-mode-tabs{display:flex;gap:8px;margin:0 0 14px;position:sticky;top:0;z-index:2;background:var(--bg);padding:4px 0 8px}.game-mode-tabs button{min-width:110px}.game-mode-tabs button.active{border-color:#72dda0;background:#193126;color:#b9f5cc}.game-row-list{display:grid;gap:10px}.game-row{display:grid;grid-template-columns:minmax(160px,240px) 1fr;gap:14px;align-items:center;border:2px solid var(--line);background:#101821;padding:12px;box-shadow:3px 3px 0 #070a0e}.game-row-title h3{margin:0 0 5px}.game-row-title p{margin:0;color:var(--muted);font-size:12px}.game-room-buttons{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-start}.game-room-btn{min-width:110px;display:grid;gap:4px;text-align:left}.game-room-btn small{color:var(--muted);font-size:10px}.single-main{width:100%;max-width:none}.single-game{display:grid;gap:12px;justify-items:center}.sudoku-board{display:grid;grid-template-columns:repeat(9,42px);border:4px solid #cad6df;background:#cad6df;gap:1px}.sudoku-board input{width:42px;height:42px;text-align:center;font:700 21px var(--pxfont);border:0!important;border-radius:0!important;background:#111b25!important;color:#dce9f3!important;box-shadow:none!important}.sudoku-board input.fixed{background:#26384a!important;color:#9cf0b7!important}.sudoku-board input.wrong{background:#522433!important;color:#ffb3be!important}.sudoku-board input:nth-child(3n){border-right:3px solid #cad6df!important}.sudoku-board input:nth-child(n+19):nth-child(-n+27),.sudoku-board input:nth-child(n+46):nth-child(-n+54){border-bottom:3px solid #cad6df!important}.mine-board{display:grid;grid-template-columns:repeat(var(--mw),28px);gap:2px;max-width:100%;overflow:auto;padding:6px;background:#0b1118;border:3px solid var(--line)}.mine-cell{width:28px;height:28px;padding:0;display:grid;place-items:center;font-size:13px}.mine-cell.open{background:#26384a;box-shadow:none}.mine-cell.boom{background:#672c3c;color:#fff}.go-board{display:grid;grid-template-columns:repeat(9,42px);grid-template-rows:repeat(9,42px);padding:20px;background:#c99b5c;border:5px solid #6d4927;box-shadow:4px 4px 0 #070a0e}.go-point{width:42px;height:42px;padding:0;border:0;box-shadow:none;background:linear-gradient(90deg,transparent 48%,#6b4827 48%,#6b4827 52%,transparent 52%),linear-gradient(0deg,transparent 48%,#6b4827 48%,#6b4827 52%,transparent 52%);position:relative}.go-stone{position:absolute;inset:4px;border-radius:50%;box-shadow:2px 3px 3px #0008}.go-stone.s0{background:#111}.go-stone.s1{background:#f2efe7;border:1px solid #777}.seat-grid.compact .seat{min-height:72px}.uno-top{display:flex;align-items:center;gap:10px;justify-content:center;margin:12px}.uno-hand,.mj-hand{display:flex;gap:6px;flex-wrap:wrap;justify-content:center;padding:10px}.uno-card,.play-card,.mj-tile{min-width:48px;min-height:64px;padding:7px;border:2px solid #536a80;background:#182432;color:#f3f6f8}.uno-card.c-R{border-color:#e36878}.uno-card.c-Y{border-color:#e3c55d}.uno-card.c-G{border-color:#69c582}.uno-card.c-B{border-color:#68a8e2}.uno-card.c-W{border-color:#d9d9d9}.mj-tile{min-width:38px;min-height:52px;background:#efe8d5!important;color:#26313b!important}.mj-rivers{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.mj-rivers>div{border:1px solid var(--line);padding:8px}.mj-rivers .mj-tile{display:inline-grid;place-items:center;min-width:26px;min-height:34px;padding:3px;margin:2px}.play-card.selected{transform:translateY(-8px);border-color:#f1ce68;background:#253c4f}.music-activity .activity-body{overflow:hidden}
@media(max-width:760px){.game-row{grid-template-columns:1fr}.game-room-buttons{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.game-room-btn{min-width:0}.sudoku-board{grid-template-columns:repeat(9,34px)}.sudoku-board input{width:34px;height:34px;font-size:17px}.go-board{grid-template-columns:repeat(9,33px);grid-template-rows:repeat(9,33px);padding:12px}.go-point{width:33px;height:33px}.mj-rivers{grid-template-columns:1fr}.mine-board{max-width:calc(100vw - 36px)}}
.music-art{overflow:hidden}.music-cover-large{width:100%;height:100%;object-fit:cover;display:block}.song-row:has(.song-cover){grid-template-columns:48px minmax(0,1fr) auto}.song-cover{width:44px;height:44px;object-fit:cover;border:2px solid #455c70;box-shadow:2px 2px 0 #070a0e}.music-now-mini{display:grid;grid-template-columns:46px minmax(0,1fr);gap:8px;align-items:center;margin-bottom:6px}.music-cover-mini,.music-cover-placeholder{width:42px;height:42px;display:grid;place-items:center;object-fit:cover;border:2px solid #455c70;background:#182432}.music-cover-placeholder{font-size:20px}@media(max-width:480px){.song-row:has(.song-cover){grid-template-columns:44px 1fr}.song-row:has(.song-cover) button{grid-column:1/-1}}

/* v0.1.3 polished board/card tables */
.music-room-row .game-row-title h3{color:#b9f5cc}
.go-shell{display:grid;justify-items:center;gap:8px}.go-board-pro{position:relative;width:min(620px,78vw);aspect-ratio:1;background:#d5a45f;border:14px solid #6d4828;box-shadow:8px 8px 0 #070a0e;box-sizing:border-box;padding:7.5%;overflow:visible}.go-lines{position:absolute;inset:12.5%;background-image:linear-gradient(to right,#553a20 1.5px,transparent 1.5px),linear-gradient(to bottom,#553a20 1.5px,transparent 1.5px);background-size:12.5% 12.5%;border-right:1.5px solid #553a20;border-bottom:1.5px solid #553a20;pointer-events:none}.go-intersection{position:absolute;width:10%;height:10%;min-width:0;min-height:0;padding:0;border:0;background:transparent;box-shadow:none;transform:translate(-50%,-50%);z-index:3}.go-board-pro>.go-intersection{margin-left:12.5%;margin-top:12.5%}.go-star{position:absolute;width:8px;height:8px;border-radius:50%;background:#54381d;transform:translate(-50%,-50%);margin-left:12.5%;margin-top:12.5%;z-index:1}.go-stone{position:absolute;inset:5%;border-radius:50%;display:block;box-shadow:inset -4px -5px 8px #0005,2px 3px 4px #0009}.go-stone.s0{background:radial-gradient(circle at 35% 28%,#555,#151515 45%,#050505 80%)}.go-stone.s1{background:radial-gradient(circle at 35% 28%,#fff,#eee 55%,#c9c9c9 100%);border:1px solid #777}.go-stone em{position:absolute;width:25%;height:25%;border-radius:50%;background:#ef5f6e;left:37.5%;top:37.5%;box-shadow:0 0 0 2px #fff8}.go-legend{color:var(--muted);font-size:11px}
.four-table{position:relative;width:min(860px,100%);height:470px;margin:14px auto;border:3px solid #40536a;background:radial-gradient(circle at center,#243b35,#13241f 58%,#0d1714);box-shadow:6px 6px 0 #070a0e;overflow:hidden}.four-seat{position:absolute;border:2px solid #40536a;background:#101821dd;padding:7px;min-width:150px;z-index:3}.four-seat.turn{border-color:#f1ce68;box-shadow:0 0 0 2px #f1ce6844}.four-seat.top{top:8px;left:50%;transform:translateX(-50%)}.four-seat.bottom{bottom:8px;left:50%;transform:translateX(-50%)}.four-seat.left{left:8px;top:50%;transform:translateY(-50%)}.four-seat.right{right:8px;top:50%;transform:translateY(-50%)}.four-seat-head{display:grid;gap:2px;text-align:center}.four-seat-head small{color:var(--muted)}.four-center{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:grid;place-items:center;gap:7px;z-index:2}.hand-backs{display:flex;justify-content:center;margin-top:5px;max-width:220px}.card-back,.mj-back{display:inline-block;width:24px;height:34px;margin-left:-12px;border:2px solid #d7e2ea;border-radius:3px;background:repeating-linear-gradient(45deg,#173a67 0 4px,#255a91 4px 8px);box-shadow:1px 2px 2px #0008}.hand-backs .card-back:first-child,.hand-backs .mj-back:first-child{margin-left:0}.hand-backs.mj .mj-back{width:20px;height:29px;background:linear-gradient(#79b6e7,#397db7);border-color:#d8edf9}.hand-backs b{align-self:center;margin-left:8px}
.uno-face{width:64px;height:92px;border:4px solid #f5f5f5;border-radius:10px;display:grid;grid-template-rows:auto 1fr auto;align-items:center;justify-items:center;padding:5px;color:white;font-family:Arial,sans-serif;box-shadow:3px 4px 0 #0007;position:relative;overflow:hidden}.uno-face:before{content:"";position:absolute;width:72%;height:74%;left:14%;top:13%;background:#fff2;border-radius:50%;transform:rotate(-28deg)}.uno-face>*{z-index:1}.uno-face b{font-size:30px;text-shadow:1px 2px 0 #0005}.uno-face small{width:100%;font-weight:800;text-align:left}.uno-face small:last-child{text-align:right;transform:rotate(180deg)}.uno-face.c-R{background:#ce3040}.uno-face.c-Y{background:#e5b526;color:#242424}.uno-face.c-G{background:#2d9c55}.uno-face.c-B{background:#2b70c9}.uno-face.c-W{background:conic-gradient(#ce3040 0 25%,#e5b526 0 50%,#2d9c55 0 75%,#2b70c9 0)}.uno-face.back{background:radial-gradient(ellipse,#20242c 42%,#090b0f 43% 55%,#d12e3e 56% 63%,#111 64%);place-items:center}.uno-face.back i{font:bold 16px var(--pxfont);transform:rotate(-25deg)}button.uno-face{min-width:64px;padding:5px}.uno-hand{display:flex;gap:4px;align-items:flex-end;justify-content:center;flex-wrap:wrap;padding:12px}.uno-hand .uno-face:hover{transform:translateY(-8px)}.uno-center{min-width:100px}.own-hand-title{text-align:center;color:#b9c7d2;margin-top:10px;font-size:12px}

.mahjong-area{overflow-x:auto}.mahjong-table{position:relative;width:min(900px,100%);height:610px;margin:12px auto;background:radial-gradient(circle,#316c55,#1d4f3e 67%,#123529);border:8px solid #192a23;box-shadow:7px 7px 0 #070a0e;overflow:hidden}.mj-seat{position:absolute;z-index:3;background:#101821dc;border:2px solid #536a80;padding:6px;min-width:180px}.mj-seat.turn{border-color:#f1ce68}.mj-seat.top{top:6px;left:50%;transform:translateX(-50%)}.mj-seat.bottom{bottom:6px;left:50%;transform:translateX(-50%)}.mj-seat.left{left:6px;top:50%;transform:translateY(-50%)}.mj-seat.right{right:6px;top:50%;transform:translateY(-50%)}.mj-seat-head{display:grid;text-align:center}.mj-seat-head small{color:var(--muted)}.mj-center{position:absolute;inset:108px 180px 108px;display:grid;grid-template-columns:1fr 130px 1fr;grid-template-rows:1fr 110px 1fr;gap:5px}.mj-center-info{grid-column:2;grid-row:2;border:2px solid #b6d2c4;background:#12291f;display:grid;place-items:center;text-align:center;padding:6px}.mj-center-info small{color:#a7c2b5}.mj-dora{display:flex;align-items:center;gap:3px}.mj-dora>span{font-size:9px}.river{display:grid;place-items:center;overflow:hidden}.river.top{grid-column:2;grid-row:1}.river.bottom{grid-column:2;grid-row:3}.river.left{grid-column:1;grid-row:2}.river.right{grid-column:3;grid-row:2}.mj-river{display:grid;grid-template-columns:repeat(6,28px);gap:2px;justify-content:center}.river.left .mj-river,.river.right .mj-river{transform:rotate(90deg)}.river.top .mj-river{transform:rotate(180deg)}.mj-tile{width:27px;height:38px;min-width:27px;min-height:38px;padding:1px!important;border:1px solid #9b9482!important;border-radius:3px;background:linear-gradient(#fffdf3,#e8dfc8)!important;color:#222!important;display:inline-grid;grid-template-rows:1fr auto;place-items:center;box-shadow:1px 2px 1px #0006}.mj-tile b{font-size:23px;line-height:1;font-family:"Segoe UI Symbol","Noto Sans Symbols 2",sans-serif}.mj-tile small{font-size:6px;color:#666}.mj-tile.aka{box-shadow:inset 0 0 0 2px #e34b5d,1px 2px 1px #0006}.mj-tile.riichi{transform:rotate(90deg);margin:0 5px}.mj-tile.back{background:linear-gradient(#75b9ea,#347bae)!important;border-color:#d6efff!important}.mj-hand{display:flex;justify-content:center;gap:2px;flex-wrap:wrap;padding:9px}.mj-own{padding:0;border:0;background:transparent;box-shadow:none;min-width:29px}.mj-own:hover{transform:translateY(-7px)}.mj-own.riichi-able .mj-tile{outline:3px solid #f1ce68}.mj-melds{display:flex;gap:3px;justify-content:center;margin-top:4px}.mj-meld{display:inline-flex}.mj-meld .mj-tile{width:20px;height:29px;min-width:20px;min-height:29px}.mj-meld .mj-tile b{font-size:17px}.mj-reactions,.mj-actions{justify-content:center}.mj-result{max-width:700px;margin:10px auto;border:2px solid #f1ce68;background:#201c12;padding:10px;text-align:center}.mj-result p{margin:4px}.mahjong-table .hand-backs.mj{max-width:185px}.mahjong-table .hand-backs.mj .mj-back{margin-left:-9px}
@media(max-width:760px){.go-board-pro{width:min(92vw,520px);border-width:9px}.four-table{height:390px}.four-seat{min-width:116px;padding:4px;font-size:10px}.uno-face{width:48px;height:70px;border-width:3px}.uno-face b{font-size:22px}button.uno-face{min-width:48px}.mahjong-table{width:900px;transform-origin:top left}.mahjong-area{max-width:100%}.mj-hand{justify-content:flex-start;min-width:620px}.music-room-row .game-room-buttons{grid-template-columns:repeat(3,minmax(0,1fr))}}

/* v0.1.4 interaction polish: small, fast iOS-like motion without turning game updates into heavy animations */
:root{--motion-fast:140ms;--motion:220ms;--motion-slow:320ms;--ease-ios:cubic-bezier(.22,.61,.36,1);--ease-press:cubic-bezier(.2,.8,.2,1)}
html{scroll-behavior:smooth}
button,input,textarea,select{transition:border-color var(--motion-fast) var(--ease-ios),background-color var(--motion-fast) var(--ease-ios),box-shadow var(--motion) var(--ease-ios),opacity var(--motion-fast) var(--ease-ios),transform var(--motion-fast) var(--ease-press)}
button{border-radius:9px;box-shadow:0 3px 10px #0005}
button:hover{transform:translateY(-1px);box-shadow:0 6px 16px #0006}
button:active{transform:translateY(1px) scale(.985);box-shadow:0 2px 7px #0005}
button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:2px solid color-mix(in srgb,var(--accent) 70%,white);outline-offset:2px}
.panel,.room-main,.room-side,.page-card,.room-card,.channel-row,.music-player,.song-row,.player-chip,.seat,.notice,.id-badge{border-radius:12px;transition:border-color var(--motion) var(--ease-ios),background-color var(--motion) var(--ease-ios),box-shadow var(--motion) var(--ease-ios),transform var(--motion) var(--ease-ios),opacity var(--motion) var(--ease-ios)}
.panel,.room-main,.room-side,.page-card{box-shadow:0 10px 28px #0003}
.room-card{box-shadow:0 7px 20px #0003}.room-card:hover,.channel-row:hover{border-color:color-mix(in srgb,var(--line2) 65%,var(--accent));transform:translateY(-2px);box-shadow:0 11px 26px #0004}
.sidebar,.topbar{background:color-mix(in srgb,var(--bg2) 88%,transparent);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}
.nav{border-radius:10px;transition:background-color var(--motion) var(--ease-ios),color var(--motion) var(--ease-ios),border-color var(--motion) var(--ease-ios),transform var(--motion-fast) var(--ease-press)}.nav:hover{transform:translateX(2px)}.nav.active{box-shadow:inset 3px 0 0 var(--accent)}
.room-browser:not(.hidden),.page:not(.hidden),.room-view:not(.hidden){animation:viewIn var(--motion) var(--ease-ios) both}
@keyframes viewIn{from{opacity:.35;transform:translateY(5px) scale(.997)}to{opacity:1;transform:none}}
.toast{transition:opacity var(--motion) var(--ease-ios),transform var(--motion) var(--ease-ios)!important}
.online-user,.msg,.friend-row,.admin-row{transition:background-color var(--motion-fast) var(--ease-ios),opacity var(--motion-fast) var(--ease-ios),transform var(--motion-fast) var(--ease-ios)}
.player-chip.turn,.seat.turn,.four-seat.turn,.mj-seat.turn{animation:turnGlow 1.8s ease-in-out infinite alternate}
@keyframes turnGlow{from{box-shadow:0 0 0 1px #f1ce6822}to{box-shadow:0 0 0 3px #f1ce6845,0 6px 18px #0003}}
.stone,.xpiece,.go-stone,.uno-face,.mj-tile,.ccell{transition:transform var(--motion) var(--ease-ios),filter var(--motion-fast) var(--ease-ios),box-shadow var(--motion) var(--ease-ios),border-color var(--motion-fast) var(--ease-ios)}
.gpoint.last-move .stone,.xpoint.last-move .xpiece,.go-intersection.last-move .go-stone,.ccell.last-move{animation:pieceLand 260ms var(--ease-ios) both}
@keyframes pieceLand{0%{transform:scale(.76);filter:brightness(1.32)}65%{transform:scale(1.06)}100%{transform:scale(1);filter:none}}
.xpoint.selected .xpiece,.ccell.selected{animation:selectedPulse 900ms ease-in-out infinite alternate}
@keyframes selectedPulse{from{filter:brightness(1);transform:translateY(0)}to{filter:brightness(1.18);transform:translateY(-2px)}}
.uno-hand .uno-face:hover,.mj-own:hover{transform:translateY(-8px) scale(1.025)}
.game-toolbar,.players-bar,.poker-actions,.undo-toolbar{transition:opacity var(--motion-fast) var(--ease-ios),transform var(--motion-fast) var(--ease-ios)}
.raise-box{display:inline-flex;align-items:center;gap:5px;padding:4px 7px;border:1px solid var(--line);border-radius:10px;background:color-mix(in srgb,var(--input) 88%,transparent)}.raise-box input{width:92px;padding:7px 8px;border-radius:8px}
.chat-log,.room-main,.page,.room-browser{scroll-behavior:smooth;overscroll-behavior:contain}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}.player-chip.turn,.seat.turn,.four-seat.turn,.mj-seat.turn{animation:none!important}}

