@font-face{font-family:"Yu Gothic";src:url("assets/fonts/noto-sans-jp-400.woff2") format("woff2");font-style:normal;font-weight:400;font-display:swap}
@font-face{font-family:"Yu Gothic";src:url("assets/fonts/noto-sans-jp-700.woff2") format("woff2");font-style:normal;font-weight:700;font-display:swap}
@font-face{font-family:"Yu Gothic";src:url("assets/fonts/noto-sans-jp-900.woff2") format("woff2");font-style:normal;font-weight:900;font-display:swap}
@font-face{font-family:"Yu Mincho";src:url("assets/fonts/noto-serif-jp-500.woff2") format("woff2");font-style:normal;font-weight:500;font-display:swap}
@font-face{font-family:"Yu Mincho";src:url("assets/fonts/noto-serif-jp-700.woff2") format("woff2");font-style:normal;font-weight:700;font-display:swap}
@font-face{font-family:"Yu Mincho";src:url("assets/fonts/noto-serif-jp-900.woff2") format("woff2");font-style:normal;font-weight:900;font-display:swap}

:root{
  --bg:#110f0c;--bg2:#1a1712;--panel:#241f18;--panel2:#332b20;--panel3:#17140f;
  --gold:#c8a45c;--gold2:#f2d993;--gold3:#765b2e;--ink:#f4ead3;--muted:#afa48f;
  --red:#9f3e36;--red2:#d36a58;--blue:#477b83;--green:#536b54;--line:rgba(215,180,104,.28);
  --paper:#d9c695;--paper2:#ad9565;--enemy:#5b2424;--enemy2:#281719;--ally:#efe1b7;--ally2:#a88f55;
  --opponent-accent:#c8a45c;--shadow:0 24px 60px rgba(0,0,0,.58);
}
*{box-sizing:border-box}
html{min-height:100%;background:var(--bg);scroll-behavior:smooth}
body{margin:0;min-height:100%;font-family:"Hiragino Kaku Gothic ProN","Yu Gothic",Meiryo,sans-serif;color:var(--ink);background:
  radial-gradient(circle at 14% -10%,rgba(120,70,34,.22),transparent 36%),
  radial-gradient(circle at 90% 10%,rgba(97,34,30,.18),transparent 30%),
  linear-gradient(135deg,#17130f,#0d0c0a 62%,#17110f);overflow-x:hidden}
body:before{content:"";position:fixed;inset:0;z-index:-2;opacity:.2;background:
  repeating-linear-gradient(90deg,transparent 0 59px,rgba(255,231,171,.025) 60px),
  repeating-linear-gradient(0deg,transparent 0 59px,rgba(255,231,171,.02) 60px)}
button{font:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent}
button:focus-visible{outline:2px solid var(--gold2);outline-offset:3px}
.hidden{display:none!important}
.atmosphere{position:fixed;inset:0;z-index:200;pointer-events:none;opacity:.12;mix-blend-mode:soft-light;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.86' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.35'/%3E%3C/svg%3E")}

/* Header */
.top{height:72px;display:flex;align-items:center;justify-content:space-between;padding:8px clamp(12px,2vw,28px);border-bottom:1px solid var(--line);background:linear-gradient(90deg,rgba(12,10,8,.97),rgba(29,23,17,.96),rgba(12,10,8,.97));position:sticky;top:0;z-index:50;box-shadow:0 8px 30px #0008;backdrop-filter:blur(14px)}
.top:after{content:"";position:absolute;left:0;right:0;bottom:2px;height:1px;background:linear-gradient(90deg,transparent,var(--gold3),transparent)}
.brand{display:flex;align-items:center;gap:11px;text-align:left;min-width:0}.brand-seal{width:43px;height:43px;display:grid;place-items:center;flex:none;transform:rotate(45deg);border:1px solid var(--gold);background:linear-gradient(145deg,#3d301e,#16120d);box-shadow:inset 0 0 0 3px #130f0a,0 6px 16px #0007;color:transparent}.brand-seal:before{content:"軍";transform:rotate(-45deg);color:var(--gold2);font:900 22px "Yu Mincho","Hiragino Mincho ProN",serif}.brand small{display:block;color:var(--gold);font-size:9px;letter-spacing:.17em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.brand strong{display:block;margin-top:3px;font:800 clamp(15px,2vw,19px) "Yu Mincho","Hiragino Mincho ProN",serif;letter-spacing:.1em;white-space:nowrap}.icon{width:44px;height:44px;display:grid;place-items:center;flex:none;border-radius:4px;border:1px solid var(--line);background:linear-gradient(145deg,#30271c,#17130e);color:var(--gold2);box-shadow:inset 0 0 0 2px #0e0c09,0 6px 15px #0007}.icon span{font-weight:900;font-size:18px}.icon:hover{border-color:var(--gold);background:#3b2e1e}

/* Title screen */
.menu{min-height:calc(100vh - 72px);padding:clamp(14px,3vw,36px)}
.menu-shell{width:min(1480px,100%);margin:auto;display:grid;gap:24px}
.hero{height:clamp(360px,43vw,570px);position:relative;overflow:hidden;border:1px solid var(--line);background:linear-gradient(90deg,#1a1712 0 48%,#17130f 70%);box-shadow:var(--shadow);isolation:isolate}
.hero:before,.hero:after{content:"";position:absolute;z-index:4;pointer-events:none}.hero:before{inset:10px;border:1px solid rgba(222,183,101,.28)}.hero:after{left:0;right:0;bottom:0;height:38%;background:linear-gradient(transparent,#0c0b09e8)}
.hero-officer{position:absolute;z-index:1;inset:-14% -2% -35% 38%;background-image:linear-gradient(90deg,#17130f 0,transparent 27%),linear-gradient(0deg,#17130f 0,transparent 22%),url("assets/characters/kiryu-yuzuru.png");background-position:center,center,center 22%;background-size:cover,cover,cover;background-repeat:no-repeat;filter:saturate(.82) contrast(1.04)}
.hero-map{position:absolute;z-index:2;inset:0;background:
  radial-gradient(circle at 75% 35%,transparent 0 28%,rgba(8,7,5,.46) 67%),
  linear-gradient(90deg,#15120f 1%,rgba(21,18,15,.92) 22%,rgba(21,18,15,.25) 58%,rgba(21,18,15,.68) 100%)}
.hero-copy{position:absolute;z-index:7;left:clamp(28px,6vw,90px);top:50%;transform:translateY(-51%);width:min(620px,56%)}
.eyebrow{display:inline-flex;align-items:center;gap:10px;color:var(--gold2);font-size:clamp(10px,1vw,13px);letter-spacing:.24em;font-weight:800}.eyebrow:before{content:"";width:44px;height:1px;background:var(--gold)}
.hero h1{margin:17px 0 14px;line-height:.95;text-shadow:0 4px 18px #000}.hero h1 span{display:block;font:900 clamp(48px,7.3vw,104px) "Yu Mincho","Hiragino Mincho ProN",serif;letter-spacing:.07em}.hero h1 b{display:block;margin-top:12px;color:var(--gold2);font:700 clamp(24px,3vw,46px) "Yu Mincho","Hiragino Mincho ProN",serif;letter-spacing:.2em}
.hero-copy p{font-family:"Yu Mincho","Hiragino Mincho ProN",serif;font-size:clamp(13px,1.35vw,18px);line-height:2;color:#d7ccb7;text-shadow:0 2px 8px #000;margin:18px 0}
.hero-badges{display:flex;gap:7px;flex-wrap:wrap}.hero-badges span{padding:6px 9px;border:1px solid rgba(214,177,96,.42);background:#110e0bbd;color:#d9c595;font-size:10px;letter-spacing:.07em}
.hero-version{position:absolute;z-index:7;right:22px;bottom:17px;color:#b5a88e;font-size:9px;letter-spacing:.16em}.hero-version b{color:var(--gold2);font-size:16px}
.selection-room,.mode-room{position:relative;padding:clamp(18px,2.4vw,34px);border:1px solid var(--line);background:linear-gradient(135deg,rgba(49,40,28,.92),rgba(23,19,14,.96) 58%,rgba(44,27,22,.9));box-shadow:var(--shadow)}
.selection-room:before,.mode-room:before{content:"";position:absolute;inset:6px;border:1px solid rgba(205,165,83,.12);pointer-events:none}
.section-heading{position:relative;z-index:1;display:flex;justify-content:space-between;align-items:end;gap:20px;margin-bottom:20px}.section-heading>div{display:flex;align-items:center;gap:13px}.section-number{width:50px;height:50px;display:grid;place-items:center;flex:none;border:1px solid var(--gold3);color:var(--gold2);font:800 24px "Yu Mincho",serif;background:#110e0c}.section-heading small{color:var(--gold);font-size:9px;letter-spacing:.2em}.section-heading h2{margin:3px 0 0;font:800 clamp(21px,2.2vw,31px) "Yu Mincho",serif;letter-spacing:.07em}.section-heading>p{margin:0;color:var(--muted);font-size:12px;line-height:1.6;text-align:right}
.roster-stage{position:relative;z-index:1;display:grid;grid-template-columns:minmax(0,1.65fr) minmax(360px,.8fr);gap:18px}
.opponent-roster{display:grid;grid-template-columns:repeat(4,minmax(135px,1fr));gap:9px;align-content:start}
.opponent-card{position:relative;min-width:0;padding:0;border:1px solid rgba(210,175,98,.2);background:#15120f;color:var(--ink);text-align:left;overflow:hidden;transition:transform .18s,border-color .18s,box-shadow .18s}.opponent-card:hover{transform:translateY(-3px);border-color:var(--opponent-card-accent,var(--gold));box-shadow:0 12px 24px #0007}.opponent-card[aria-selected="true"]{border-color:var(--opponent-card-accent,var(--gold));box-shadow:inset 0 0 0 2px #0c0a08,0 0 0 2px var(--opponent-card-accent,var(--gold)),0 13px 28px #0009}.opponent-card[aria-selected="true"]:after{content:"選択中";position:absolute;z-index:4;right:5px;top:5px;padding:3px 5px;background:var(--opponent-card-accent,var(--gold));color:#120f0b;font-size:8px;font-weight:900;letter-spacing:.08em}
.card-portrait{width:100%;aspect-ratio:1/1;background-color:#231e17;background-repeat:no-repeat;filter:saturate(.72);transition:filter .18s,transform .25s}.opponent-card:hover .card-portrait,.opponent-card[aria-selected="true"] .card-portrait{filter:saturate(.96);transform:scale(1.025)}
.card-meta{position:relative;padding:9px 10px 10px;background:linear-gradient(#201a14,#100e0b);min-height:84px}.card-rank{display:flex;justify-content:space-between;gap:5px;color:var(--gold);font-size:9px}.card-rank b{font-size:7px;letter-spacing:0;color:var(--opponent-card-accent,var(--gold))}.card-meta strong{display:block;margin:5px 0 2px;font:800 15px "Yu Mincho",serif;white-space:normal;overflow-wrap:anywhere}.card-meta small{display:block;color:#9e9585;font-size:9px;line-height:1.35;white-space:normal;min-height:24px}
.opponent-brief{display:block;align-self:start;border:1px solid rgba(215,179,100,.3);background:#100e0bcc;overflow:hidden}.brief-portrait{width:100%;aspect-ratio:1/1;min-height:0;background-color:#211a15;background-repeat:no-repeat;filter:saturate(.84);position:relative}.brief-portrait:after{content:"";position:absolute;inset:0;background:linear-gradient(0deg,#100e0bd9,transparent 46%)}.brief-body{min-width:0;padding:22px 20px 18px;align-self:center}.brief-rank{display:flex;justify-content:space-between;gap:10px;color:var(--gold);font-size:12px}.brief-rank b{font-size:9px;color:var(--opponent-accent)}.brief-body h3{margin:8px 0 0;font:900 clamp(24px,2.4vw,36px) "Yu Mincho",serif;letter-spacing:.07em;overflow-wrap:anywhere}.brief-body>small{display:block;margin-top:3px;color:#8e8576;font-size:9px;letter-spacing:.12em}.brief-epithet{margin:10px 0;color:var(--opponent-accent);font:700 13px "Yu Mincho",serif}.brief-tags{display:flex;flex-wrap:wrap;gap:5px}.brief-tags span{padding:4px 6px;border:1px solid rgba(214,176,97,.26);color:#c9b995;background:#ffffff08;font-size:9px}.brief-text{font-size:11px;line-height:1.75;color:#c8bfaf}.brief-body blockquote{margin:14px 0 0;padding:10px 0 0;border-top:1px solid var(--line);font:600 13px/1.75 "Yu Mincho",serif;color:#e7d9bd}
.modes{position:relative;z-index:1;display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.mode{position:relative;min-height:190px;text-align:left;padding:24px 20px 18px;border:1px solid rgba(210,175,98,.24);background:linear-gradient(150deg,#30271d,#15120e 65%);color:var(--ink);overflow:hidden;box-shadow:0 15px 34px #0005;transition:.2s}.mode:before{content:"";position:absolute;inset:6px;border:1px solid rgba(214,178,96,.09);pointer-events:none}.mode:hover{transform:translateY(-4px);border-color:var(--gold);background:linear-gradient(150deg,#413221,#18130e 68%)}.mode-index{position:absolute;right:12px;top:6px;color:#ffffff0e;font:900 70px/1 Georgia,serif}.mode strong{display:block;margin-top:18px;color:var(--gold2);font:800 23px "Yu Mincho",serif;letter-spacing:.06em}.mode small{position:relative;display:block;max-width:88%;margin-top:10px;line-height:1.75;color:#bcb3a3;font-size:11px;white-space:normal}.badge{display:inline-block;position:absolute;left:20px;top:16px;padding:4px 8px;background:var(--gold);color:#15110c;font-size:8px;font-weight:900;letter-spacing:.08em}.mode-go{position:absolute;left:20px;bottom:14px;color:#d3bb7b;font-size:10px;letter-spacing:.08em}.mode-go b{font-size:17px}.mode.recommended{border-color:#b99955}.menu-footer{position:relative;z-index:1;margin-top:16px;display:flex;justify-content:center;gap:10px;flex-wrap:wrap}.menu-footer button{padding:10px 15px;border:1px solid var(--line);background:#17130f;color:#d6c8ae;font-size:11px}.menu-footer button:hover{border-color:var(--gold);color:var(--gold2)}

/* Shared panels and layouts */
.panel{position:relative;background:linear-gradient(150deg,rgba(51,43,32,.98),rgba(25,21,16,.98));border:1px solid var(--line);padding:17px;box-shadow:var(--shadow)}.panel:before{content:"";position:absolute;inset:5px;border:1px solid rgba(215,180,104,.08);pointer-events:none}.panel-label{position:relative;color:var(--gold);font-size:8px;letter-spacing:.22em;text-align:center}.setup-layout{width:min(1560px,100%);margin:auto;padding:20px;display:grid;grid-template-columns:270px minmax(560px,790px) 320px;gap:17px;align-items:start}.game-layout{width:min(1540px,100%);margin:auto;padding:20px;display:grid;grid-template-columns:270px minmax(560px,790px) 300px;gap:17px;align-items:start}.setup-guide,.preset-panel,.coach,.info{position:sticky;top:92px}.setup-guide h2,.preset-panel h2,.coach h2{position:relative;text-align:center;margin:8px 0;font:800 20px "Yu Mincho",serif;letter-spacing:.05em;overflow-wrap:anywhere}.setup-guide>p,.preset-panel>p,.coach>p{position:relative;font-size:11px;line-height:1.7;color:#c9c0b1}.wide-button{width:100%;min-height:42px;margin-top:10px;border-radius:0!important}
.mini-portrait{position:relative;width:118px;aspect-ratio:1/1;margin:12px auto 9px;border:1px solid var(--line);background-color:#1a1612;background-repeat:no-repeat;box-shadow:0 10px 28px #0008;filter:saturate(.8)}.mini-portrait:after{content:"";position:absolute;inset:0;box-shadow:inset 0 0 22px #000a}.mini-rank,.opponent-titleline{display:flex;justify-content:center;gap:8px;color:var(--gold);font-size:10px}.mini-rank b,.opponent-titleline b{font-size:8px;color:var(--opponent-accent);letter-spacing:0}
.rule-note{position:relative;margin-top:13px;padding:11px;border-left:2px solid var(--gold);background:#09080666;font-size:10px;line-height:1.65;color:#c8beab}.selected-info{position:relative;min-height:64px;padding:10px;margin-top:11px;border:1px solid #ffffff0c;background:#ffffff08;font-size:10px;line-height:1.6}.selected-info h3{margin:0 0 7px;color:var(--gold2);font:800 16px "Yu Mincho",serif}.setup-head{display:flex;align-items:flex-end;justify-content:space-between;gap:14px;margin-bottom:11px}.setup-head h1{font:900 29px "Yu Mincho",serif;margin:2px 0 0;letter-spacing:.09em}.setup-head p{margin:5px 0 0;color:var(--muted);font-size:10px}.kicker{color:var(--gold);letter-spacing:.18em;font-size:9px;font-weight:800}.formation-name{text-align:right;color:var(--gold2);font:800 12px "Yu Mincho",serif;max-width:42%;overflow-wrap:anywhere}

/* Board */
.board-frame{position:relative;padding:9px;background:
  linear-gradient(90deg,transparent 0 2%,rgba(255,225,156,.08) 2.3% 2.5%,transparent 2.8% 97.2%,rgba(255,225,156,.08) 97.5% 97.7%,transparent 98%),
  repeating-linear-gradient(90deg,#3b2c1d 0 10px,#2b2017 10px 20px);border:1px solid #80633a;box-shadow:0 25px 60px #000a,inset 0 0 20px #000b}.board-frame:before{content:"";position:absolute;inset:4px;border:1px solid #b58e4f55;pointer-events:none}.board-corner{position:absolute;z-index:12;width:22px;height:22px;border-color:#d4b367;border-style:solid;pointer-events:none}.board-corner.tl{left:2px;top:2px;border-width:2px 0 0 2px}.board-corner.tr{right:2px;top:2px;border-width:2px 2px 0 0}.board-corner.bl{left:2px;bottom:2px;border-width:0 0 2px 2px}.board-corner.br{right:2px;bottom:2px;border-width:0 2px 2px 0}
.board{position:relative;width:100%;aspect-ratio:8/9;border:1px solid #695232;background:
  linear-gradient(to bottom,transparent 43.9%,rgba(19,48,53,.95) 43.9%,rgba(37,86,91,.96) 49.5%,rgba(20,55,61,.96) 55.9%,transparent 55.9%),
  repeating-linear-gradient(0deg,rgba(79,54,27,.055) 0 1px,transparent 1px 6px),
  repeating-linear-gradient(90deg,rgba(90,61,29,.045) 0 1px,transparent 1px 9px),
  radial-gradient(circle at 48% 45%,#ecddb2,#cbb887 68%,#a28b5d);box-shadow:inset 0 0 35px rgba(63,35,15,.58);touch-action:manipulation;overflow:hidden;isolation:isolate}
.board:before{content:"";position:absolute;z-index:0;inset:0;pointer-events:none;opacity:.18;background:
  radial-gradient(circle at 12% 18%,#6f4b2e 0 1px,transparent 2px),radial-gradient(circle at 71% 72%,#6f4b2e 0 1px,transparent 2px);background-size:37px 41px,53px 47px}
.board:after{content:"";position:absolute;z-index:2;left:0;right:0;top:43.9%;height:12%;pointer-events:none;background:repeating-linear-gradient(105deg,transparent 0 17px,rgba(255,255,255,.06) 18px 19px,transparent 20px 35px);animation:water 7s linear infinite}
@keyframes water{to{background-position:180px 0}}
.route-lines{position:absolute;inset:0;z-index:3;width:100%;height:100%;pointer-events:none}.route-lines path{fill:none;stroke:#e5d4a2;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;filter:drop-shadow(0 2px 0 rgba(29,54,54,.78)) drop-shadow(0 0 3px rgba(250,223,154,.38))}.river{position:absolute;z-index:4;top:48%;left:50%;transform:translateX(-50%);white-space:nowrap;text-align:center;font:800 clamp(10px,1.2vw,14px) "Yu Mincho",serif;letter-spacing:.48em;color:#d6e1d5aa;text-shadow:0 2px 5px #0d2529;pointer-events:none}.enemy-curtain{position:absolute;z-index:10;left:0;right:0;top:0;height:43.9%;display:grid;place-items:center;text-align:center;background:
  linear-gradient(rgba(19,12,12,.91),rgba(39,17,17,.93)),
  repeating-linear-gradient(135deg,transparent 0 12px,#ffffff08 12px 24px);border-bottom:2px solid #9d6b48;color:var(--gold2);font:800 clamp(14px,2vw,20px) "Yu Mincho",serif;letter-spacing:.12em;pointer-events:none;box-shadow:0 15px 30px #0005}.enemy-curtain:before{content:"秘";width:67px;height:67px;display:grid;place-items:center;border:2px solid #b46c5c77;border-radius:50%;position:absolute;color:#be796b55;font-size:37px;transform:rotate(-12deg)}.enemy-curtain>div{position:relative;z-index:2}.enemy-curtain small{display:block;color:#bcb1a0;font:500 9px/1.5 sans-serif;letter-spacing:.03em;margin-top:8px}
.node{position:absolute;z-index:5;border:1px solid rgba(89,62,32,.42);background:rgba(255,255,255,.025);padding:2px;display:grid;place-items:center;transition:filter .16s,box-shadow .16s,background .16s}.node:focus-visible{z-index:16}.node.hq{border:2px solid rgba(129,55,42,.74);background:radial-gradient(circle,#a656421f,transparent 70%)}.node.hq:before{content:"司";position:absolute;color:#84483a36;font:900 clamp(14px,2vw,26px) "Yu Mincho",serif}.node.bridge{z-index:7;border-radius:42%;border:4px double #775e36;background:linear-gradient(90deg,#bca56f,#ead9a5,#bca56f);box-shadow:0 3px 0 #46361f,0 0 0 1px #e5ce8c,inset 0 0 8px #6c5435}.node.setup-node{cursor:pointer}.node.setup-node:hover{background:#fff4}.node.setup-selected{box-shadow:inset 0 0 0 4px var(--gold2),0 0 28px #e7bd5f;z-index:15}.node.forbidden:after{content:"配置不可";position:absolute;z-index:20;inset:auto 1px 1px;padding:1px;background:#d8c294;color:#7c241d;font-size:7px;font-weight:900;white-space:nowrap}.node.legal{z-index:9;box-shadow:inset 0 0 0 3px #7ed3d8,0 0 14px #47abb4;background:#318f965c;animation:legalPulse .8s ease-in-out infinite alternate}.node.capture{box-shadow:inset 0 0 0 3px #f08c77,0 0 17px #bc4b3f;background:#a03e3666}.node.hint{z-index:11;box-shadow:inset 0 0 0 4px #fff0a8,0 0 27px #ffd85c;animation:hintPulse .65s infinite alternate}
@keyframes legalPulse{to{filter:brightness(1.22)}}@keyframes hintPulse{to{transform:scale(.965);filter:brightness(1.25)}}
.piece{position:relative;width:82%;height:89%;clip-path:polygon(18% 0,82% 0,100% 13%,94% 100%,6% 100%,0 13%);display:grid;place-items:center;text-align:center;font:900 clamp(9px,1.45vw,15px) "Yu Mincho","Hiragino Mincho ProN",serif;filter:drop-shadow(0 4px 2px #0008);user-select:none;line-height:.92;white-space:nowrap;overflow:hidden;letter-spacing:-.08em;border:0;transition:transform .17s,filter .17s;color:#2b2317;text-shadow:0 1px rgba(255,255,255,.35)}
.piece:before{content:"";position:absolute;inset:4% 7%;clip-path:inherit;border:1px solid rgba(255,255,255,.35);background:linear-gradient(145deg,rgba(255,255,255,.34),transparent 37%,rgba(42,24,11,.16));mix-blend-mode:soft-light;pointer-events:none}.piece.south{transform:rotate(0deg);background:linear-gradient(145deg,#fff5ce 0,#d8c17c 56%,#a88b4a 100%);box-shadow:inset 0 0 0 2px #7d612e}.piece.north{transform:rotate(180deg);color:#f4dfbb;background:linear-gradient(145deg,#823f3b,#4a2427 54%,#241518);text-shadow:0 1px #000;box-shadow:inset 0 0 0 2px #bb725f}.piece.selected.south{transform:translateY(-4px) rotate(0deg) scale(1.09);filter:drop-shadow(0 7px 4px #0009) brightness(1.1)}.piece.selected.north{transform:translateY(4px) rotate(180deg) scale(1.09);filter:drop-shadow(0 -7px 4px #0009) brightness(1.1)}.piece.revealed{background:linear-gradient(145deg,#bd6d55,#713630 65%,#3a2020);color:#fff1ce}.piece.dragging{opacity:.58}

/* Setup controls */
.setup-actions{display:grid;grid-template-columns:1fr 1.7fr;gap:9px;margin-top:11px}.setup-actions button,.actions button,.tool-row button{min-height:50px;border:1px solid var(--line);font-weight:850}.setup-actions .primary{display:grid;place-items:center;line-height:1.1}.setup-actions .primary small{font-size:8px;margin-top:3px;opacity:.75;letter-spacing:.08em}.primary{background:linear-gradient(180deg,#efd88f,#b78e40);color:#17110b;box-shadow:inset 0 1px #fff8,0 5px 15px #0006}.primary:hover{filter:brightness(1.08)}.secondary{background:linear-gradient(#2d261c,#17130f);color:var(--ink)}.secondary:hover{border-color:var(--gold);color:var(--gold2)}.preset-grid{display:grid;grid-template-columns:1fr 1fr;gap:7px}.preset-btn{min-width:0;padding:9px 8px;text-align:left;border:1px solid var(--line);background:#17130f;color:var(--ink);font-size:9px;line-height:1.45;white-space:normal;overflow-wrap:anywhere}.preset-btn strong{display:block;color:var(--gold);font-size:11px;margin-bottom:2px}.preset-btn.active{border-color:var(--gold);box-shadow:inset 0 0 0 1px #0b0907,0 0 0 1px var(--gold)}.tool-row{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:9px}.tool-row button{font-size:10px}.analysis{position:relative;margin-top:12px;padding:11px;border:1px solid #ffffff0c;background:#09080655}.analysis h3{font-size:12px;margin:0 0 8px;color:var(--gold)}.metric{display:flex;justify-content:space-between;padding:5px 0;border-bottom:1px solid #fff1;font-size:9px}.warnings{margin:8px 0 0;padding-left:16px;color:#e69b8c;font-size:9px;line-height:1.55}.piece-detail{text-align:left}.piece-summary{margin:0 0 9px}.piece-rules{display:grid;gap:5px;margin:0}.piece-rules>div{padding:6px 7px;border-left:2px solid #7d8b80;background:#ffffff08}.piece-rules dt{margin:0 0 2px;color:var(--muted);font-size:8px;font-weight:900}.piece-rules dd{margin:0;color:#e6dfd2;font-size:9px;line-height:1.5;overflow-wrap:anywhere}.piece-rules .loss{border-left-color:#d97061;background:#8b302519}.piece-rules .loss dt{color:#eeb0a4}.piece-rules .win{border-left-color:#79b78b;background:#1f704019}.piece-rules .win dt{color:#a8d9b5}.piece-rules .draw{border-left-color:#c9ac5b;background:#7d682019}.piece-rules .draw dt{color:#e8d38e}.piece-note,.selection-tip{display:block;margin-top:7px;color:#cdbb81;font-size:8px;line-height:1.5}

/* Battle */
.game-opponent-portrait{position:relative;width:calc(100% + 34px);aspect-ratio:1.15/1;margin:12px -17px 10px;background-color:#17130f;background-repeat:no-repeat;filter:saturate(.78);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.game-opponent-portrait:after{content:"";position:absolute;inset:0;background:linear-gradient(0deg,#211b15 0,transparent 48%),radial-gradient(circle at 50% 40%,transparent 40%,#0f0d0ba8 100%)}.opponent-epithet{text-align:center!important;color:var(--opponent-accent)!important;font:700 11px "Yu Mincho",serif}.coach blockquote{position:relative;margin:10px 0 13px;padding:10px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);font:600 11px/1.7 "Yu Mincho",serif;color:#dfd2bc;text-align:center}.coach-message{position:relative;padding:11px;background:#0b090766;border-left:2px solid var(--gold)}.coach-message>span{color:var(--gold);font-size:8px;letter-spacing:.13em}.coach-message h3{margin:4px 0;font:800 14px "Yu Mincho",serif}.coach-message p{margin:0;color:#c8beae;font-size:10px;line-height:1.6}.ai-badge{position:relative;margin-top:9px;padding:10px;border:1px solid #ffffff0b;background:#09080666;font-size:9px;line-height:1.55}.ai-badge b{display:block;color:var(--gold);margin-bottom:4px}.ai-badge span{display:block;overflow-wrap:anywhere;color:#c8bead}.status{display:grid;grid-template-columns:.8fr 1fr .8fr .9fr 1.3fr;border:1px solid var(--line);overflow:hidden;margin-bottom:10px;background:#17130f;box-shadow:0 8px 20px #0005}.status div{text-align:center;padding:8px 4px;border-right:1px solid var(--line);background:linear-gradient(#2d251b,#18140f)}.status div:last-child{border-right:0}.status small{display:block;color:#968b7a;font-size:8px;letter-spacing:.05em}.status strong{display:block;margin-top:2px;font-size:11px;white-space:normal;overflow-wrap:anywhere;color:#eee1ca}.actions{display:grid;grid-template-columns:1.4fr 1fr 1fr;gap:8px;margin-top:10px}.actions button{font-size:11px}.tabs{display:grid;grid-template-columns:repeat(3,1fr);gap:3px;background:#0c0a0766;padding:4px}.tab{border:0;padding:8px 2px;background:transparent;color:var(--muted);font-weight:700;font-size:9px}.tab.active{background:#c79f4f1d;color:var(--gold2);box-shadow:inset 0 -1px var(--gold)}.tab-content{display:none;position:relative;padding-top:12px}.tab-content.active{display:block}.piece-card{text-align:center}.piece-card h3{font:800 17px "Yu Mincho",serif;color:var(--gold2)}.large-piece{position:relative;width:70px;height:78px;margin:8px auto;display:grid;place-items:center;clip-path:polygon(18% 0,82% 0,100% 15%,94% 100%,6% 100%,0 15%);font:900 20px "Yu Mincho",serif;white-space:nowrap;filter:drop-shadow(0 5px 3px #0008)}.large-piece.south{background:linear-gradient(145deg,#fff5ce,#c4a95e);color:#2b2419}.large-piece.north{transform:rotate(180deg);background:linear-gradient(145deg,#873f3b,#371d21);color:#f5dfb8}.combat-side{display:grid;justify-items:center;gap:4px}.combat-side.enemy-label b{color:#e2a89f}.combat-side.ally-label b{color:#ecd690}.piece-card p,.lock,.empty{font-size:10px;line-height:1.65;color:#c4baaa}.force-overview{display:grid;grid-template-columns:1fr 1fr;gap:6px}.force-total{text-align:center;padding:8px;background:#09080666;border:1px solid #ffffff0a}.force-total small{display:block;color:var(--muted);font-size:8px}.force-total strong{font-size:20px;color:var(--gold2)}.force-list{display:grid;grid-template-columns:1fr 1fr;gap:4px;margin-top:8px}.force-item{display:flex;justify-content:space-between;padding:5px;background:#ffffff08;font-size:9px}.log{max-height:540px;overflow:auto;display:grid;gap:6px}.log-entry{font-size:9px;line-height:1.5;padding:7px;border-left:2px solid var(--gold);background:#09080655}

/* Dialogs and effects */
.modal-bg{position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:16px;background:rgba(5,4,3,.9);backdrop-filter:blur(8px)}.modal{position:relative;width:min(760px,100%);max-height:90vh;overflow:auto;padding:26px;border:1px solid var(--line);background:linear-gradient(145deg,#3b3022,#17130f 68%);box-shadow:0 30px 90px #000}.modal:before{content:"";position:absolute;inset:7px;border:1px solid rgba(218,180,98,.14);pointer-events:none}.modal h2{position:relative;font-family:"Yu Mincho",serif;color:var(--gold2);letter-spacing:.08em}.modal h3{color:var(--gold2)}.modal p{position:relative;font-size:12px;line-height:1.75}.modal button{position:relative;padding:11px 18px;border:1px solid var(--line);background:linear-gradient(#e5cc81,#af863d);color:#17110b;font-weight:800}.modal .sub{background:#201a14;color:var(--ink)}.modal-actions{position:relative;display:flex;justify-content:center;gap:8px;flex-wrap:wrap;margin-top:18px}.combat{position:relative;display:grid;grid-template-columns:1fr auto 1fr;gap:12px;align-items:center;text-align:center;padding:15px;background:#09080655}.strategy-cards{position:relative;display:grid;grid-template-columns:1fr 1fr;gap:7px}.strategy-card{padding:10px;border:1px solid #ffffff0b;background:#ffffff07;font-size:10px;line-height:1.55}.strategy-card strong{display:block;color:var(--gold);margin-bottom:3px}.result-opponent{display:grid;grid-template-columns:130px 1fr;gap:16px;align-items:center}.result-portrait{aspect-ratio:1/1;background-repeat:no-repeat;border:1px solid var(--line)}
.toast{position:fixed;z-index:130;left:50%;bottom:20px;transform:translateX(-50%);max-width:min(92vw,620px);padding:10px 16px;border:1px solid #f5db91;background:#d5b461;color:#17110b;font-weight:900;font-size:11px;text-align:center;box-shadow:0 10px 35px #000b}
.thinking-veil{position:fixed;z-index:90;left:50%;top:88px;transform:translateX(-50%);min-width:250px;display:grid;grid-template-columns:48px 1fr;grid-template-rows:auto auto;padding:10px 16px 10px 10px;border:1px solid var(--opponent-accent);background:rgba(19,15,12,.94);box-shadow:0 14px 35px #000b;backdrop-filter:blur(8px)}.thinking-emblem{grid-row:1/3;width:38px;height:38px;display:grid;place-items:center;margin-right:10px;border:1px solid var(--opponent-accent);transform:rotate(45deg);color:var(--opponent-accent)}.thinking-emblem span{transform:rotate(-45deg);font:800 15px "Yu Mincho",serif}.thinking-emblem i{position:absolute;inset:-4px;border:1px solid var(--opponent-accent);animation:think 1.5s linear infinite}.thinking-veil strong{align-self:end;font:800 12px "Yu Mincho",serif;letter-spacing:.06em}.thinking-veil small{align-self:start;color:var(--muted);font-size:8px;margin-top:2px}.thinking-veil:after{content:"";position:absolute;left:58px;right:12px;bottom:6px;height:1px;background:linear-gradient(90deg,var(--opponent-accent),transparent);animation:scan 1.2s ease-in-out infinite}
@keyframes think{to{transform:rotate(180deg)}}@keyframes scan{50%{opacity:.2;transform:scaleX(.45);transform-origin:left}}

/* Responsive */
@media(max-width:1240px){
  .opponent-roster{grid-template-columns:repeat(3,minmax(130px,1fr))}
  .setup-layout,.game-layout{grid-template-columns:230px minmax(520px,1fr)}
  .preset-panel,.info{grid-column:1/-1;position:static}.preset-grid{grid-template-columns:repeat(3,1fr)}
}
@media(max-width:960px){
  .roster-stage{grid-template-columns:1fr}.opponent-roster{grid-template-columns:repeat(4,minmax(120px,1fr))}.opponent-brief{display:grid;grid-template-columns:220px 1fr}.brief-portrait{height:100%;min-height:300px;aspect-ratio:auto}
  .hero-copy{width:65%}.hero-officer{inset:-5% -12% -28% 35%}
}
@media(max-width:760px){
  .top{height:60px}.brand-seal{width:36px;height:36px}.brand-seal:before{font-size:18px}.brand small{font-size:7px}.brand strong{font-size:13px}.icon{width:38px;height:38px}.menu{min-height:calc(100vh - 60px);padding:8px}.menu-shell{gap:12px}.hero{height:480px}.hero-officer{inset:-2% -36% -2% 2%;background-position:center,center,63% 28%}.hero-map{background:linear-gradient(0deg,#15120f 5%,rgba(21,18,15,.42) 58%,rgba(21,18,15,.56))}.hero-copy{left:22px;right:22px;top:auto;bottom:38px;transform:none;width:auto}.hero h1 span{font-size:clamp(42px,14vw,64px)}.hero h1 b{font-size:clamp(22px,7vw,31px)}.hero-copy p{font-size:12px;line-height:1.75}.hero-badges span{font-size:8px}.selection-room,.mode-room{padding:15px 12px}.section-heading{align-items:start}.section-heading>p{display:none}.section-number{width:42px;height:42px;font-size:20px}.section-heading h2{font-size:20px}
  .opponent-roster{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;padding:3px 2px 12px;gap:8px}.opponent-card{flex:0 0 142px;scroll-snap-align:start}.opponent-brief{grid-template-columns:120px 1fr}.brief-portrait{height:100%;min-height:260px}.brief-body{padding:14px 12px}.brief-body h3{font-size:23px}.brief-text{font-size:10px}.brief-body blockquote{font-size:11px}.modes{grid-template-columns:1fr}.mode{min-height:158px}.mode small{max-width:83%}
  .setup-layout,.game-layout{display:flex;flex-direction:column;padding:8px 6px 92px}.setup-board-wrap,.battle{order:1;width:100%}.setup-guide,.coach{order:2;position:static;width:100%}.preset-panel,.info{order:3;width:100%}.board-frame{padding:5px}.setup-head{align-items:start}.setup-head h1{font-size:22px}.formation-name{font-size:9px}.preset-grid{grid-template-columns:1fr 1fr}.status{grid-template-columns:repeat(5,1fr)}.status div{padding:6px 2px}.status small{font-size:7px}.status strong{font-size:9px}.setup-actions,.actions{position:fixed;z-index:60;left:0;right:0;bottom:0;padding:7px 7px calc(7px + env(safe-area-inset-bottom));background:rgba(14,11,8,.96);border-top:1px solid var(--line);box-shadow:0 -10px 24px #0009}.actions{grid-template-columns:1.35fr 1fr 1fr}.panel{padding:13px}.game-opponent-portrait{width:calc(100% + 26px);margin-left:-13px;margin-right:-13px;max-height:310px}.strategy-cards{grid-template-columns:1fr}.thinking-veil{top:70px}.river{left:50%}
}
@media(max-width:480px){
  .brand strong{letter-spacing:.03em}.brand-seal{display:none}.hero{height:440px}.hero-copy{left:16px;right:16px}.eyebrow{font-size:8px}.hero h1{margin-top:12px}.hero-copy p br{display:none}.hero-badges{gap:4px}.hero-version{display:none}.opponent-brief{grid-template-columns:105px 1fr}.brief-portrait{min-height:250px}.brief-body{padding:11px 9px}.brief-rank{font-size:9px}.brief-body h3{font-size:19px}.brief-epithet{font-size:10px}.brief-text{line-height:1.55}.brief-body blockquote{font-size:9px;line-height:1.55}.preset-grid{grid-template-columns:1fr}.status strong{font-size:8px}.status div:nth-child(5){display:none}.status{grid-template-columns:repeat(4,1fr)}
}
/* Smartphone-only piece readability. Text always remains inside the plaque. */
@media(max-width:600px) and (pointer:coarse){.piece{width:94%;height:92%;font-size:clamp(11px,3.35vw,14px);line-height:.88;letter-spacing:-.11em;padding:0 1px;text-rendering:geometricPrecision}.node.hq .piece{width:60%;font-size:clamp(11.5px,3.45vw,14px)}.piece.selected.south{transform:translateY(-2px) rotate(0deg) scale(1.04)}.piece.selected.north{transform:translateY(2px) rotate(180deg) scale(1.04)}}
@media(max-width:380px) and (pointer:coarse){.piece{font-size:clamp(10.5px,3.4vw,13px)}.node.forbidden:after{font-size:6px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}.board:after,.node.legal,.node.hint,.thinking-emblem i,.thinking-veil:after{animation:none!important}.opponent-card,.mode,.piece{transition:none!important}}
