:root{--ink:#183b37;--muted:#627773;--paper:#edf2ef;--panel:#fbfdfb;--green:#214e48;--line:#cfdbd4;--wood:#dbb67d;--accent:#ae7340;font-family:"Microsoft YaHei","PingFang SC",sans-serif;color:var(--ink);background:var(--paper);font-size:15px}*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}button,a,input,select{-webkit-tap-highlight-color:transparent}button{border:1px solid var(--line);background:var(--panel);color:var(--ink);padding:12px 18px;border-radius:8px;cursor:pointer;min-height:44px}button:hover:not(:disabled){border-color:var(--green);background:#e5eee8}button:disabled{opacity:.45;cursor:default}.primary{background:var(--green);color:white;border-color:var(--green)}.primary:hover:not(:disabled){background:#30665e;color:white}.quiet{background:transparent;border:0;padding:8px;font-size:13px}.wide{width:100%;margin-top:22px}a{color:inherit;text-decoration:none}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,[tabindex]:focus-visible{outline:3px solid #b77b30;outline-offset:3px}[hidden]{display:none!important}header{height:92px;max-width:1280px;margin:auto;padding:0 42px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:12px;font-family:"KaiTi","STKaiti",serif;font-size:30px}.brand small{display:block;font:11px "Microsoft YaHei",sans-serif;letter-spacing:3px;margin-top:3px}.brand-stones{font:32px Georgia;color:var(--ink);letter-spacing:-10px;padding-right:12px}.brand-stones i{font-style:normal;color:var(--accent)}.header-right{display:flex;align-items:center;gap:20px;font-size:12px;color:var(--muted)}main{max-width:1280px;margin:auto;padding:30px 42px 42px}h1,h2,p{margin:0}h1{font:32px "KaiTi","STKaiti","Songti SC",serif;font-weight:600;letter-spacing:2px}h2{font-size:18px;font-weight:600}.eyebrow{font-size:11px;letter-spacing:3px;color:var(--muted);margin-bottom:12px}.room-heading{display:flex;justify-content:space-between;align-items:center;margin:6px 0 28px}.layout{display:grid;grid-template-columns:minmax(0,760px) minmax(240px,1fr);gap:40px}.play-area{min-width:0}.players{display:flex;align-items:center;justify-content:space-between;padding:0 6px 18px}.players>div{display:flex;align-items:center;gap:12px}.players b{font-size:16px}.players small{display:block;font-size:11px;color:var(--muted);margin-top:5px}.opponent{text-align:right}.stone{display:inline-block;width:30px;height:30px;border-radius:50%;box-shadow:1px 3px 4px #152d3129}.black{background:radial-gradient(circle at 35% 25%,#555e5b,#15201d 75%)}.white{background:radial-gradient(circle at 35% 25%,#fff,#e4e9e3 75%);border:1px solid #d4dad1}.versus{font-size:11px;color:var(--muted)}.board-wrap{position:relative;border-radius:10px;padding:8px;background:var(--wood);box-shadow:0 12px 30px #243e3218,inset 0 0 0 1px #b49361;overflow:hidden}#board{width:100%;display:block;aspect-ratio:1;touch-action:manipulation;background:repeating-linear-gradient(92deg,#dbb67d 0,#dbb67d 24px,#d8b279 25px,#ddb980 26px,#dbb67d 55px);border-radius:5px}#board .hit{fill:transparent;cursor:pointer}#board .grid{stroke:#755b34;stroke-width:1.1}#board .coord{fill:#77603c;font-size:12px;text-anchor:middle;dominant-baseline:middle}#empty-board{position:absolute;inset:0;background:#dbb67dd9;display:flex;align-items:center;justify-content:center;flex-direction:column;text-align:center;padding:22px}#empty-board strong{font:32px "KaiTi",serif}#empty-board p{font-size:13px;margin:18px 0 26px}.status-row{display:flex;align-items:center;gap:8px;margin:20px 0 16px;font-size:13px;min-height:24px}.status-dot{width:7px;height:7px;background:var(--green);border-radius:50%;flex-shrink:0}#saved{margin-left:auto;color:var(--muted);font-size:11px;white-space:nowrap}.actions{display:flex;gap:8px;flex-wrap:wrap}.actions .primary{flex:1}.game-note{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:26px}.game-note dl{margin:20px 0}.game-note dl>div{display:flex;justify-content:space-between;gap:12px;padding:11px 0;border-bottom:1px solid #e7ede8;font-size:13px}.game-note dt{color:var(--muted)}.game-note dd{margin:0}.hint{color:var(--muted);font-size:12px;line-height:1.9}.download{display:block;font-size:13px;margin:20px 0;padding:13px 0;border-bottom:1px solid var(--line)}.history{padding:28px 0}.section-title{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.history-item{display:block;width:100%;background:transparent;border:0;border-bottom:1px solid var(--line);border-radius:0;text-align:left;padding:15px 0}.history-item b{display:block;font-size:13px;font-weight:500}.history-item small{display:block;color:var(--muted);font-size:11px;margin-top:8px}.history-item.active b{color:#a2652e}.notice{background:var(--panel);border:1px solid var(--line);padding:22px;margin-top:20px;border-radius:10px}.notice p{font-size:13px;line-height:1.8;margin:10px 0 18px}.notice button{margin:3px}footer{max-width:1280px;margin:auto;padding:22px 42px;border-top:1px solid var(--line);font-size:11px;color:var(--muted);display:flex;justify-content:space-between}dialog{width:min(440px,calc(100vw - 32px));padding:30px;border:1px solid var(--line);border-radius:16px;background:var(--panel);color:var(--ink);box-shadow:0 30px 100px #12332b40}dialog::backdrop{background:#12332b70;backdrop-filter:blur(3px)}.dialog-title{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}label{display:block;font-size:13px;margin:18px 0 8px}input,select{width:100%;padding:13px;background:white;border:1px solid var(--line);border-radius:7px;color:var(--ink);min-height:46px}#new-form .hint{margin:8px 0}.welcome{min-height:65vh;display:grid;grid-template-columns:1fr 360px;align-items:center;gap:64px;max-width:940px;margin:auto}.welcome h1{font-size:58px;line-height:1.4}.welcome>div>p:last-child{line-height:2;color:var(--muted);margin-top:22px}.welcome form{border:1px solid var(--line);background:var(--panel);padding:32px;border-radius:14px}.welcome form .primary{width:100%;margin:24px 0 14px;display:flex;justify-content:space-between}#message{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:#183b37;color:white;padding:15px 22px;box-shadow:0 8px 30px #0003;border-radius:9px;max-width:calc(100% - 32px);z-index:10;font-size:13px;line-height:1.7}#resign-dialog p{margin:18px 0 24px;line-height:1.8}
@media(min-width:1200px){.layout{grid-template-columns:minmax(0,690px) 290px;justify-content:space-between}}@media(max-width:800px){header{height:76px;padding:0 20px}main{padding:24px 20px}.layout{grid-template-columns:1fr;gap:20px}aside{display:grid;grid-template-columns:1fr 1fr;gap:20px}.history{padding:4px 0}.room-heading h1{font-size:27px}.room-heading{margin:0 0 25px}.welcome{gap:32px;grid-template-columns:1fr;max-width:440px;padding:24px 0}.welcome h1{font-size:44px}.welcome form{padding:26px}.header-right{gap:10px}footer{padding:22px 20px}}@media(max-width:480px){main{padding:22px 12px}.room-heading{padding:0 6px}.room-heading h1{font-size:25px}.room-heading>.primary{padding:11px 13px;font-size:13px}.eyebrow{font-size:10px}.board-wrap{padding:3px;border-radius:7px}.players{padding:0 7px 15px}.players b{font-size:14px}.players>div{gap:8px}.players small{font-size:10px}.stone{width:26px;height:26px}.versus{font-size:10px}.status-row{margin:16px 5px;font-size:12px}.actions{gap:6px}.actions button{padding:11px 12px;font-size:13px}aside{grid-template-columns:1fr}.game-note{padding:20px}.game-note dl{display:grid;grid-template-columns:1fr 1fr;gap:0 24px}.history{padding:0 8px}.header-right>span{display:none}footer span{display:none}}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}}
/* Touch layout: the enlarged board scrolls natively; dragging never confirms. */
.board-tools{display:flex;align-items:center;gap:12px;margin-top:14px}.board-tools .hint{flex:1}.board-wrap.zoomed{overflow:auto;max-height:75vh;overscroll-behavior:contain}.board-wrap.zoomed #board{min-width:900px;touch-action:pan-x pan-y}.quiet{min-height:44px;min-width:44px}button,a,input,select{touch-action:manipulation}dialog{max-height:calc(100dvh - 32px);overflow:auto;box-sizing:border-box}body{padding-bottom:env(safe-area-inset-bottom)}.status-row{flex-wrap:wrap}.status-row #status{flex:1;min-width:160px}.status-row #saved{margin-left:auto}.history-item{overflow-wrap:anywhere}.board-tools button{flex-shrink:0}#message{box-sizing:border-box;bottom:max(16px,env(safe-area-inset-bottom))}
@media(max-width:480px){header{padding-left:max(12px,env(safe-area-inset-left));padding-right:max(12px,env(safe-area-inset-right))}.welcome h1{font-size:38px}.welcome form{padding:20px}.welcome{padding:8px 0;gap:24px}.players small{max-width:110px;line-height:1.6}.board-tools{align-items:flex-start}.board-tools .hint{font-size:11px}.status-row #saved{width:100%;padding-left:15px}.game-note dl{gap:0 12px}.board-wrap.zoomed #board{min-width:900px}footer{padding:20px 12px}}
.review-nav{display:flex;flex-wrap:wrap;gap:6px;margin:16px 0}.review-nav input{width:80px;min-width:64px;padding:8px}.notice textarea{width:100%;resize:vertical;min-height:90px;font:inherit;border:1px solid var(--line);border-radius:8px;padding:10px;box-sizing:border-box}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}#history-page{align-self:center;font-size:12px}.history select{margin-bottom:10px}.notice .actions{margin-bottom:12px}.notice button{padding:10px 12px}.notice .section-title{gap:12px}.notice h2{line-height:1.6}
.analysis-panel{border-bottom:1px solid var(--line);margin-bottom:22px;padding-bottom:20px}.analysis-panel h3{font-size:17px;line-height:1.6;margin:0 0 12px}.analysis-controls{display:flex;gap:12px;flex-wrap:wrap}.analysis-controls label{flex:1;min-width:100px;margin:8px 0}.analysis-controls input,.analysis-controls select{margin-top:6px;padding:10px}.mistake-card{padding:18px 0;border-top:1px solid var(--line)}.mistake-card p{overflow-wrap:anywhere}.mistake-card h3{color:var(--green)}#variation-label{overflow-wrap:anywhere}.analysis-panel .hint{line-height:1.8}
#admin-dialog{width:min(620px,calc(100vw - 24px))}#admin-dialog section,#settings-form{border-top:1px solid var(--line);padding:18px 0;margin-top:18px}#admin-dialog h3{font-size:16px;margin:4px 0 14px}#admin-dialog p,#admin-dialog li{font-size:13px;line-height:1.8;overflow-wrap:anywhere}#admin-dialog input[type=file]{box-sizing:border-box;font-size:12px}.admin-job{display:flex;align-items:center;justify-content:space-between;gap:10px;border-bottom:1px solid var(--line);padding:10px 0}.admin-job button{flex-shrink:0}#restore-summary{margin:14px 0}.room-heading>.primary{flex-shrink:0}.room-heading{gap:16px}
