:root{--ink:#263730;--muted:#7a837d;--green:#20483e;--accent:#4e7560;--paper:#f5f5ef;--line:#e5e8df;--wood:#e9c997;--white:#fff;--sans:ui-sans-serif,system-ui,-apple-system,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif}
*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font:14px/1.6 var(--sans)}button,input,select{font:inherit}button,select,input[type=checkbox]{cursor:pointer}button{color:inherit;border:1px solid var(--line);background:white;border-radius:9px;padding:9px 13px;touch-action:manipulation}button:hover:not(:disabled){border-color:#94ac9d;background:#f2f6f0}button:disabled{opacity:.4;cursor:not-allowed}button:focus-visible,a:focus-visible,select:focus-visible,input:focus-visible{outline:3px solid #699783;outline-offset:3px}a{color:inherit;text-decoration:none}input[type=checkbox]{accent-color:var(--green);width:14px;height:14px;margin:0}select{width:100%;background:#fafbf8;border:1px solid var(--line);border-radius:9px;padding:11px 12px;color:var(--ink)}[hidden]{display:none!important}
.room{max-width:1192px;margin:0 auto;padding:0 34px}.masthead{height:91px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #dfe4da}.brand{display:flex;gap:12px;align-items:center;font-size:20px;letter-spacing:3px;font-weight:650}.brand small{display:block;font-size:9px;font-weight:500;letter-spacing:1.7px;color:var(--muted);line-height:1.2;margin-top:4px}.brand-mark{width:38px;height:38px;position:relative;background:var(--green);border-radius:11px;flex:none}.brand-mark i{position:absolute;width:6px;height:6px;background:#f4f0db;border-radius:50%;left:9px;top:9px}.brand-mark i:nth-child(2){left:16px;top:16px}.brand-mark i:nth-child(3){left:23px;top:23px}.brand-mark i:nth-child(4){left:23px;top:9px;background:#8cab94}.brand-mark i:nth-child(5){left:9px;top:23px;background:#8cab94}.top-actions{display:flex;gap:22px;align-items:center;color:#617069;font-size:12px}.text-button{background:none;border:none;padding:8px 0;font-size:12px}.text-button span{border:1px solid #9ba99c;border-radius:50%;width:15px;height:15px;display:inline-flex;justify-content:center;align-items:center;font-size:10px;margin-right:4px}.offline-badge{font-size:11px;border:1px solid #d9e2d7;background:#eef3eb;border-radius:20px;padding:6px 11px;color:#4d6b55;white-space:nowrap}.offline-badge i{display:inline-block;width:5px;height:5px;border-radius:50%;background:#729174;margin-right:6px}.intro{display:flex;align-items:center;justify-content:space-between;padding:29px 0 24px}.eyebrow{font-size:9px;letter-spacing:3px;color:#8a927f;margin:0 0 6px;font-weight:600}.intro h1{font:500 30px/1.4 "Noto Serif CJK SC","Songti SC",SimSun,serif;letter-spacing:2px;margin:0}.intro-copy{color:var(--muted);font-size:12px;margin:9px 0 0}.intro-meta{text-align:right;color:#586957}.intro-meta>span{display:block;font:400 28px/1.2 Georgia,serif;letter-spacing:2px}.intro-meta small{display:block;font-size:10px;color:#8b9385;margin-top:7px;letter-spacing:1px}.play-layout{display:grid;grid-template-columns:minmax(0,1fr) 310px;gap:24px;align-items:start}.board-panel{background:#fff;border:1px solid #e6e9e0;border-radius:18px;padding:23px 24px 14px;min-width:0;box-shadow:0 4px 18px #203e2b03}.players{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:19px}.player{display:flex;align-items:center;gap:10px;flex:1;min-width:0;padding:8px 10px;border:1px solid transparent;border-radius:10px;position:relative}.player.active{border-color:#d6e5d8;background:#f4f8f2}.piece-avatar{display:block;width:34px;height:34px;border-radius:50%;flex:none;box-shadow:0 2px 3px #0002}.black{background:radial-gradient(circle at 34% 28%,#4b504d 0,#252b27 42%,#0e1712 100%)}.white{background:radial-gradient(circle at 32% 25%,#fff 0,#f5f5ef 54%,#dcdfd4 100%);border:1px solid #d7d8cc}.player strong{font-size:13px;font-weight:650;white-space:nowrap}.player div>span{display:block;font-size:10px;color:#939c90;letter-spacing:.3px}.turn-label{font-size:9px;color:#79936e;margin-left:auto;display:none;white-space:nowrap}.active .turn-label{display:block}.versus{font:italic 13px Georgia,serif;color:#bdc4b8}.board-frame{padding:10px;background:#d9b983;border-radius:9px;box-shadow:inset 0 0 0 1px #cfa970,inset 0 1px 3px #f7e5c7}.board-surface{position:relative;aspect-ratio:1;background:linear-gradient(110deg,#e6c591,#efd3a5 47%,#e7c38e);border-radius:3px;isolation:isolate}.board-grid,.win-overlay{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.board-grid line{stroke:#917950;stroke-width:.8;opacity:.72}.board-grid text{fill:#977d52;font-size:10px;font-family:var(--sans);text-anchor:middle;dominant-baseline:middle}.board-grid circle{fill:#927b52}.intersections{position:absolute;inset:3.125%;display:grid;grid-template-columns:repeat(15,minmax(0,1fr));grid-template-rows:repeat(15,minmax(0,1fr))}.board-row{display:contents}.intersection{border:none;border-radius:0;background:none!important;padding:0;position:relative;display:grid;place-items:center;min-width:0;min-height:0;touch-action:manipulation;outline-offset:-2px!important;opacity:1!important}.intersection .stone{width:80%;height:80%;border-radius:50%;display:flex;align-items:center;justify-content:center;position:relative;pointer-events:none;font-size:clamp(9px,1vw,12px);font-weight:500;color:white;font-variant-numeric:tabular-nums}.intersection[data-piece="0"] .stone{visibility:hidden}.intersection[data-piece="1"] .stone{background:radial-gradient(circle at 32% 25%,#51524c,#282c25 40%,#151b14 85%);box-shadow:1px 2px 3px #3a2b3950,inset 0 0 1px #000c}.intersection[data-piece="2"] .stone{color:#41483c;background:radial-gradient(circle at 32% 20%,#fffef5,#f7f7e9 50%,#e2e3cf 95%);box-shadow:1px 2px 3px #3a2b3945,inset 0 0 1px #918e6e}.intersection.last .stone:after{content:"";width:20%;height:20%;position:absolute;inset:40%;border:1.5px solid #dedfc5;border-radius:2px}.intersection.last[data-piece="2"] .stone:after{border-color:#668562}.show-numbers .intersection.last .stone:after{width:100%;height:100%;inset:0;border-radius:50%;border:2px solid #87a176}.intersection.winning .stone{outline:2px solid #5d8d67;outline-offset:2px}.intersection.hint:after,.intersection.pending:after{content:"";position:absolute;inset:15%;border:2px dashed #2e705b;border-radius:50%;pointer-events:none}.intersection.hint:after{border-style:solid;background:#5983681c}.intersection.pending:after{border-style:dashed}.intersections:not(.locked) .intersection[data-piece="0"]:hover .stone{visibility:visible;background:#263d3133;width:55%;height:55%}.intersections.locked .intersection{cursor:default}.win-overlay line{stroke:#3d8364;stroke-width:3;stroke-linecap:round;opacity:.65}.game-status{display:flex;justify-content:space-between;align-items:center;padding:18px 2px 12px;min-height:83px}.status-dot{display:inline-block;width:7px;height:7px;background:#56794e;border-radius:50%;margin-right:8px}.game-status strong{font-size:14px;font-weight:600;vertical-align:middle}.game-status p{font-size:11px;color:#8c9687;margin:4px 0 0 19px}.move-counter{text-align:center;border-left:1px solid #e7ebdf;padding-left:22px;padding-right:5px}.move-counter b{font:normal 24px/1.2 Georgia,serif;display:block;color:#5b6a54;font-variant-numeric:tabular-nums}.move-counter span{font-size:9px;color:#919d88;letter-spacing:1px}.board-toolbar{border-top:1px solid var(--line);display:flex;align-items:center;gap:8px;padding-top:13px}.tool-button{border:none;background:none;display:flex;align-items:center;gap:5px;font-size:12px;padding:8px}.tool-button svg{width:16px;height:16px;stroke:#65775e;stroke-width:1.6;fill:none;stroke-linecap:round;stroke-linejoin:round}.toolbar-divider{height:15px;width:1px;background:var(--line);margin:0 4px}.inline-switch{display:flex;align-items:center;gap:6px;color:#809077;font-size:11px;cursor:pointer;white-space:nowrap}.sound-button{border:none;background:none;font-size:11px;color:#809077;padding:6px;margin-left:auto;white-space:nowrap}.pending-bar{display:flex;align-items:center;gap:8px;background:#f1f6ed;border:1px solid #dfe8d9;padding:8px 10px;border-radius:8px;margin-bottom:8px;font-size:12px}.pending-bar span{flex:1}.small-button{padding:5px 10px;font-size:11px}.hint-note{font-size:11px;color:#597956;padding:10px 12px;margin:10px 0 0;background:#f1f6ed;border-radius:6px}.sidebar{display:grid;gap:16px}.panel{background:white;border:1px solid var(--line);border-radius:15px;padding:21px 22px}.section-title{display:flex;align-items:center;justify-content:space-between;margin-bottom:15px;gap:8px}.section-title h2{font-size:14px;font-weight:650;letter-spacing:1px;margin:0}.section-index{font:11px Georgia,serif;color:#b7c0af;letter-spacing:1px}.segmented{display:flex;background:#f1f3ed;border:1px solid #eef0e8;border-radius:8px;padding:3px;margin-bottom:19px;gap:4px}.segmented button{flex:1;white-space:nowrap;background:none;border:0;padding:7px 4px;border-radius:6px;font-size:11px;color:#7c8777}.segmented button.selected{background:white;color:var(--green);box-shadow:0 1px 3px #2b4a2920}.field-title{display:flex;align-items:center;justify-content:space-between;margin:14px 0 9px;font-size:11px;color:#718266}.field-title h3{font-size:11px;font-weight:500;margin:0}.field-title span{font-size:9px;color:#9ba28f}.difficulty-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px}.difficulty-grid button{position:relative;padding:10px 12px;text-align:left;background:#fcfcfa;border-color:#e8eadd;border-radius:8px;min-height:68px}.difficulty-grid button strong{font-size:12px;font-weight:600;display:block}.difficulty-grid button small{font-size:10px;color:#93a088;display:block;margin-top:3px}.level-mark{position:absolute;right:12px;top:10px;font:16px Georgia,serif;color:#c5cfbb}.difficulty-grid button.selected{background:#f0f5ea;border-color:#8fab80}.difficulty-grid button.selected strong{color:#365732}.difficulty-grid button.selected .level-mark{color:#547c43}.muted-note{font-size:10px;color:#909b87;line-height:1.7;margin:10px 0 12px;min-height:34px}.primary{background:var(--green);color:#fafbef;border-color:var(--green)}.primary:hover:not(:disabled){background:#2c5b4a;color:white;border-color:#2c5b4a}.new-game{display:flex;align-items:center;justify-content:space-between;width:100%;padding:12px 16px;margin-top:13px;font-size:12px;border-radius:9px;letter-spacing:1px}.new-game span{font-size:19px;line-height:1}.setup-note{font-size:9px;color:#9aa18f;margin:8px 0 0}.record-last{font-size:10px;color:#8b9a7f;font-variant-numeric:tabular-nums}.record-head{display:grid;grid-template-columns:30px 1fr 1fr;gap:5px;font-size:10px;color:#8b9980;padding:0 6px 9px;border-bottom:1px solid #edf0e5;align-items:center}.record-head>span{display:flex;align-items:center;gap:5px}.mini-stone{width:9px;height:9px;display:inline-block;border-radius:50%;flex:none}.move-history{max-height:168px;min-height:72px;overflow-y:auto;overscroll-behavior-y:auto;scrollbar-width:thin;scrollbar-color:#d5deca transparent}.history-row{display:grid;grid-template-columns:30px 1fr 1fr;gap:5px;padding:6px;font-size:11px;border-bottom:1px solid #f3f5ed;font-variant-numeric:tabular-nums}.history-row>span:first-child{font-size:10px;color:#afb7a4}.history-row.latest{background:#f5f8f0}.empty-record{font-size:11px;color:#9ca78f;text-align:center;margin:21px 0 19px;line-height:1.9}.empty-record small{font-size:9px;color:#b2baa6}.search-info{font-size:9px;color:#9aa68b;margin:11px 0;min-height:15px}.record-actions{display:flex;gap:8px;border-top:1px solid var(--line);padding-top:11px}.record-actions button{flex:1;border:none;background:#f6f8f1;font-size:10px;padding:6px 4px;color:#6f8260}.preferences{padding:0 7px;color:#8a977e;font-size:10px}.preferences>label{display:flex;align-items:center;gap:7px;cursor:pointer}.save-row{display:flex;align-items:center;justify-content:space-between;margin-top:8px;font-size:9px}.save-row button{border:none;background:none;padding:3px;font-size:9px;color:#9d9d8b}.save-row .failed{color:#aa6546}footer{display:flex;justify-content:space-between;gap:15px;padding:26px 0 24px;font-size:9px;color:#a7ae9e}footer span:first-child{letter-spacing:2px;color:#89957c}.busy .status-dot{animation:blink 1.1s ease-in-out infinite;background:#ab975b}dialog{border:1px solid var(--line);border-radius:16px;padding:0;max-width:500px;width:calc(100% - 32px);color:var(--ink);box-shadow:0 20px 70px #10271530}dialog::backdrop{background:#18352c65}.dialog-content{padding:26px}.dialog-content h2{font-size:18px}.dialog-content p{font-size:13px;line-height:1.85;color:#71816a}.close-dialog{border:none;padding:0 6px;font-size:24px}.dialog-ok{width:100%;margin-top:10px}.dialog-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:20px}.toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);z-index:10;padding:11px 19px;border:1px solid #496052;border-radius:10px;background:#233d31;color:#f6f6e8;font-size:12px;box-shadow:0 4px 16px #17392520;max-width:calc(100% - 32px);white-space:normal}.noscript{position:fixed;top:0;background:#fff0d8;color:#7a4a24;width:100%;margin:0;padding:20px;text-align:center}@keyframes blink{50%{opacity:.3}}
@media(min-width:1400px){.room{max-width:1250px}.play-layout{grid-template-columns:minmax(0,1fr) 320px;gap:30px}.board-frame{max-width:690px;margin:auto}.board-panel{padding:24px 28px 15px}}
@media(max-width:1000px){.room{padding:0 24px}.play-layout{grid-template-columns:minmax(0,1fr) 270px;gap:18px}.panel{padding:18px}.board-panel{padding:17px}.turn-label{display:none!important}.players{gap:4px}.player{gap:7px;padding:6px}.piece-avatar{width:28px;height:28px}.player strong{font-size:11px}.board-toolbar{gap:2px}.tool-button{font-size:11px;padding:7px 4px}.sound-button{font-size:10px}.toolbar-divider{margin:0 3px}}
@media(max-width:760px){.room{padding:0 18px;max-width:620px}.masthead{height:73px}.top-actions{gap:12px}.offline-badge{display:none}.brand{font-size:18px}.intro{padding:24px 0 20px}.intro h1{font-size:27px}.intro-copy{font-size:11px}.intro-meta>span{font-size:23px}.intro-meta small{font-size:9px}.play-layout{grid-template-columns:1fr;gap:18px}.board-panel{padding:15px 16px 12px}.players{margin-bottom:14px}.player strong{font-size:13px}.piece-avatar{width:31px;height:31px}.turn-label{display:block!important}.sidebar{grid-template-columns:1fr 1fr;gap:12px}.panel{padding:17px}.record-panel{align-self:start}.preferences{grid-column:1/-1}.board-toolbar{gap:8px}.tool-button{padding:7px;font-size:12px}.inline-switch{font-size:11px}.sound-button{font-size:11px}.new-game{padding:11px}.record-actions{flex-direction:column}.record-head{grid-template-columns:22px 1fr 1fr}.history-row{grid-template-columns:22px 1fr 1fr}.section-title h2{font-size:13px}.record-last{font-size:9px}.difficulty-grid{gap:7px}.difficulty-grid button{padding:10px}.level-mark{right:9px}.muted-note{min-height:0}footer span:nth-child(2){display:none}.board-frame{padding:7px}.game-status{padding-top:15px}.move-counter{padding-left:19px}}
@media(max-width:440px){.room{padding:0 12px}.masthead{height:68px}.intro{padding:20px 3px 17px}.intro h1{font-size:24px}.eyebrow{font-size:8px}.intro-meta small{max-width:98px;font-size:8px;letter-spacing:0}.intro-meta>span{font-size:22px}.intro-copy{margin-top:6px}.board-panel{padding:13px 10px 11px;border-radius:12px}.players{gap:5px;margin-bottom:12px}.player{padding:6px;gap:7px}.player strong{font-size:11px}.player div>span{font-size:9px}.piece-avatar{width:26px;height:26px}.turn-label{font-size:8px}.game-status strong{font-size:13px}.game-status p{font-size:10px;max-width:245px}.board-toolbar{gap:2px}.tool-button{padding:7px 5px;font-size:11px}.tool-button svg{width:14px}.inline-switch{font-size:10px;gap:4px}.sound-button{font-size:10px}.toolbar-divider{margin:0 3px}.sidebar{grid-template-columns:1fr}.settings-panel{padding:20px}.record-panel{padding:20px}.difficulty-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:7px}.difficulty-grid button{padding:9px 8px;min-height:70px}.difficulty-grid button strong{font-size:11px;margin-top:14px}.difficulty-grid button small{font-size:8px}.level-mark{top:6px;right:8px;font-size:13px}.muted-note{font-size:10px}.segmented{margin-bottom:17px}.record-actions{flex-direction:row}.move-history{max-height:130px}.board-toolbar input{width:12px;height:12px}.board-grid text{font-size:10px}.intersection .stone{font-size:8px}.board-frame{padding:6px}footer{padding:19px 0}.preferences{padding:2px 8px}.player.active{border-color:#c9d9c5}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;scroll-behavior:auto!important}}

/* Only the active player owns a turn badge, including narrow layouts. */
.player:not(.active) .turn-label{display:none!important}

/* Keep the complete playing board within ordinary desktop viewport heights. */
@media(min-width:1001px){
 .masthead{height:76px}.intro{padding:18px 0 16px}.intro h1{font-size:28px;line-height:1.3}.intro-copy{margin-top:7px}
 .board-panel{padding:20px 22px 12px}.board-frame{width:min(100%,max(330px,calc(100dvh - 440px)));margin-inline:auto}
 .sidebar{gap:12px}.settings-panel{padding:18px}.section-title{margin-bottom:12px}.segmented{margin-bottom:14px}.field-title{margin:11px 0 8px}
 .difficulty-grid button{min-height:60px;padding:8px 11px}.muted-note{min-height:0;margin:8px 0 10px}.new-game{padding:10px 14px;margin-top:10px}
 .record-panel{padding:16px 18px}.move-history{min-height:45px;max-height:108px}
}
