:root{--ink:#173f3b;--pine:#176c61;--pine-dark:#0d4a43;--cream:#fffaf0;--gold:#ffc44d;--coral:#f36d58;--sky:#c9e9e6;--wood:#bd7d43}
*{box-sizing:border-box}
html,body{margin:0;width:100%;height:100%;overflow:hidden;font-family:"Microsoft YaHei","Segoe UI",sans-serif;color:var(--ink);background:#f1f7f5;overscroll-behavior:none}
button,input{font:inherit}button{cursor:pointer;border:0;-webkit-tap-highlight-color:transparent;touch-action:manipulation}button:focus-visible,input:focus-visible{outline:4px solid #ffe27d;outline-offset:3px}button:disabled{opacity:.38;cursor:default}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.startup-tip{position:fixed;left:50%;top:18px;z-index:95;transform:translateX(-50%);padding:12px 18px;border:3px solid #fff;border-radius:16px;background:#fff4ce;color:#67420d;box-shadow:0 8px 24px #173f3b45;font-weight:800}.startup-tip[hidden]{display:none}
.game-shell{position:fixed;inset:0;padding:max(10px,env(safe-area-inset-top)) max(10px,env(safe-area-inset-right)) max(10px,env(safe-area-inset-bottom)) max(10px,env(safe-area-inset-left));background:radial-gradient(circle at 50% 20%,#3d7e6f 0,#1c554c 48%,#123e38 100%)}
.boardwrap{position:absolute;inset:10px;border:5px solid #f5d08a;border-radius:32px;background:#dbe8c9;overflow:hidden;box-shadow:0 18px 40px #06241f99,inset 0 0 0 3px #75491e55}
.boardwrap:after{content:"";position:absolute;inset:0;pointer-events:none;border-radius:25px;box-shadow:inset 0 0 34px #173e2f38}
.board{display:block;width:100%;height:100%;touch-action:none;user-select:none;-webkit-user-select:none}.bar{position:absolute;top:max(25px,calc(env(safe-area-inset-top) + 15px));left:128px;right:max(25px,calc(env(safe-area-inset-right) + 15px));height:64px;display:flex;align-items:center;gap:10px;z-index:10;pointer-events:none}.bar>*{pointer-events:auto}.spacer{flex:1}
.iconbutton{width:58px;height:58px;border-radius:19px;display:grid;place-items:center;color:var(--pine-dark);background:linear-gradient(145deg,#fffef9,#e7efe7);border:3px solid #fff;box-shadow:0 5px 0 #946338,0 9px 17px #173e3440;flex:none;transition:transform .14s ease,filter .14s ease}.iconbutton:active{transform:translateY(4px);box-shadow:0 1px 0 #946338,0 4px 10px #173e3440}.iconbutton svg{width:30px;height:30px}.iconbutton.primary{background:linear-gradient(145deg,#ffd96c,#ffac35);color:#64400b;border-color:#fff0b4}.iconbutton.playbutton{background:linear-gradient(145deg,#55bca8,#16776c);color:#fff;border-color:#bceee2}.local-save-mode #submit{width:auto;min-width:145px;padding:0 13px;display:flex;gap:7px}.local-save-mode #submit .local-save-copy{font-size:14px;font-weight:900;white-space:nowrap}
.stagepips,.pips{display:flex;align-items:center;background:#fff9eccc;border:3px solid #fff9ef;border-radius:99px;box-shadow:0 5px 0 #87603e99,0 8px 18px #173e3433;backdrop-filter:blur(7px)}.stagepips{gap:7px;padding:13px 15px}.stagepips b{width:12px;height:12px;border-radius:4px;transform:rotate(45deg);background:#b7c7b8;box-shadow:inset 0 1px 2px #49675b55}.stagepips b.on{background:var(--gold);box-shadow:0 0 0 3px #fff2ad,inset 0 1px 1px #fff}.pips{gap:7px;padding:11px 14px}.pips i{width:15px;height:15px;border:3px solid #76a89c;border-radius:50%;background:#e7efe6}.pips i.on{background:#27a78e;border-color:#126e61;box-shadow:0 0 0 3px #bff5df}
.toolbox{position:absolute;left:max(24px,calc(env(safe-area-inset-left) + 14px));top:112px;bottom:27px;width:86px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:13px;padding:17px 8px;z-index:12;border:4px solid #f6bd69;border-radius:26px;background:linear-gradient(90deg,#cc8142,#efad5c 48%,#bc7036);box-shadow:0 7px 0 #77421f,0 16px 28px #12352e66,inset 4px 0 #ffd997,inset -4px 0 #9b552e}.toolbox:before,.toolbox:after{content:"";position:absolute;left:14px;right:14px;height:5px;border-radius:5px;background:#8d4e29aa;box-shadow:0 2px 0 #ffd58b88}.toolbox:before{top:9px}.toolbox:after{bottom:9px}
.toolbox .railtool{position:relative;width:66px;min-height:68px;flex:1;max-height:82px;border-radius:19px;display:grid;place-items:center;color:#214e47;background:linear-gradient(145deg,#fffdf5,#e9e5cf);border:3px solid #fff8df;box-shadow:0 4px 0 #704829,0 7px 12px #6536153b;transition:transform .12s ease,filter .12s ease}.toolbox .railtool svg{width:57px;height:57px;pointer-events:none}.toolbox .railtool:active{transform:translateY(3px);box-shadow:0 1px 0 #704829}.toolbox .railtool.active{background:linear-gradient(145deg,#fff7b6,#ffcb51);border-color:#fff4bd;filter:saturate(1.08);transform:scale(1.05)}.toolbox .stock-count{position:absolute;right:-4px;top:-6px;min-width:24px;height:24px;padding:0 5px;border-radius:12px;display:grid;place-items:center;background:#17483f;color:#fff;font:bold 14px/1 sans-serif;box-shadow:0 2px 0 #fff8df;pointer-events:none}.toolbox .railtool.depleted .stock-count{background:#a33d32}
.counter{display:flex;align-items:flex-end;gap:3px;flex-wrap:wrap-reverse;justify-content:flex-end;width:min(22vw,235px);max-height:49px;padding:7px 9px;border-radius:15px;background:#6d432ccc;box-shadow:inset 0 0 0 3px #f2b56299}.counter:empty{display:none}.counter i{width:8px;height:15px;border-radius:4px 4px 2px 2px;background:linear-gradient(90deg,#d3e2d6,#fff,#afc5b6);box-shadow:0 2px 0 #6f4630;transition:opacity .15s ease,transform .15s ease}.counter i.used{opacity:.14;transform:translateY(3px)}
.station-photo{pointer-events:none}.route-cell{cursor:pointer;touch-action:none}.snap-dot{pointer-events:none}.toast{position:fixed;left:50%;top:48%;transform:translate(-50%,-50%) scale(.82);width:104px;height:104px;display:grid;place-items:center;border-radius:50%;z-index:40;background:#fffdf3eb;border:6px solid #fff;box-shadow:0 14px 45px #173d4a4f;opacity:0;visibility:hidden;transition:opacity .15s ease,transform .2s cubic-bezier(.2,.9,.25,1.4),visibility 0s .22s}.toast.show{opacity:1;visibility:visible;transform:translate(-50%,-50%) scale(1);transition-delay:0s}.toast.good{color:#168c75;background:#e6fff3ed}.toast.bad{color:#e45545;background:#fff0e8ed}.toast svg{width:65px;height:65px}
.join{position:fixed;inset:0;display:grid;place-items:center;background:radial-gradient(circle,#4f9f8c,#17483f);z-index:50}.join form{width:min(88vw,360px);padding:34px;border-radius:35px;background:#fff9e9;text-align:center;border:6px solid #f4c672;box-shadow:0 12px 0 #754a25,0 28px 70px #0a312a88}.join-mark{width:84px;height:64px;margin:0 auto 24px;border:8px solid #1b7569;border-radius:23px 23px 15px 15px;position:relative;background:#e3f5e9;box-shadow:inset 0 -12px #b9dfcf}.join-mark:before,.join-mark:after{content:"";position:absolute;bottom:-19px;width:17px;height:17px;border-radius:50%;background:#244a45;border:5px solid #e3f5e9}.join-mark:before{left:9px}.join-mark:after{right:9px}.join input{font-size:34px;width:220px;text-align:center;padding:13px;border:4px solid #8bbdb0;border-radius:18px;letter-spacing:10px;background:#fff;color:#17483f}.join button{display:block;width:82px;height:58px;margin:22px auto 0;border-radius:18px;background:var(--gold);box-shadow:0 5px 0 #98622a;position:relative}.join button:after{content:"";position:absolute;left:28px;top:16px;width:18px;height:18px;border-top:6px solid #65410e;border-right:6px solid #65410e;transform:rotate(45deg)}.join p{min-height:1.2em;margin:14px 0 0;color:#d84c3c;font-weight:700}.lesson .teacher-only{display:none!important}
@media(max-width:850px){.boardwrap{inset:6px;border-width:4px;border-radius:24px}.bar{left:91px;right:13px;top:14px;height:52px;gap:6px}.iconbutton{width:47px;height:47px;border-radius:15px;border-width:2px;box-shadow:0 4px 0 #946338,0 7px 12px #173e3433}.iconbutton svg{width:25px;height:25px}.stagepips{padding:10px 11px;gap:5px}.stagepips b{width:9px;height:9px}.pips{padding:8px 10px;gap:4px}.pips i{width:11px;height:11px;border-width:2px}.toolbox{left:13px;top:79px;bottom:15px;width:67px;padding:14px 5px;gap:8px;border-radius:20px;border-width:3px}.toolbox .railtool{width:52px;min-height:50px;border-radius:15px;border-width:2px}.toolbox .railtool svg{width:46px;height:46px}.counter{width:105px;gap:2px;padding:5px}.counter i{width:5px;height:10px}}
@media(max-height:560px){.toolbox{top:78px;gap:6px;padding-block:12px}.toolbox .railtool{min-height:44px}.toolbox .railtool svg{width:43px;height:43px}.bar{top:14px}.counter{max-height:40px}}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
.teacher{overflow:auto;padding:35px;max-width:1400px;min-height:100vh;margin:auto;background:#f1f7f5}.teacher h1{font-size:32px;margin:0 0 12px}.teacher p{line-height:1.7}.teacher .panel{background:white;padding:24px;border-radius:20px;margin:20px 0}.teacher button,.teacher .link{padding:12px 20px;border-radius:12px;background:#e3f5ed;color:#155b57;margin:5px;text-decoration:none;display:inline-block}.teacher button.selected{background:#168c85;color:white}.teacher .works{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:18px}.teacher .work{background:white;border:2px solid #dbe9e2;border-radius:16px;overflow:hidden;text-decoration:none;color:inherit}.teacher .work img{width:100%;display:block}.teacher .work footer{padding:12px}.modal{position:fixed;inset:0;background:#f1f7f5;z-index:70;display:none}.modal.show{display:block}.modal>.iconbutton{position:absolute;right:24px;top:18px;z-index:80}.thumbrail{fill:none;stroke:#e3a542;stroke-width:8;stroke-linecap:round}.floating-arrow{position:absolute;bottom:22px;right:25px;display:flex;gap:12px;z-index:5}
@media(max-width:650px){.bar{left:85px;right:10px;gap:4px}.bar .iconbutton{width:38px;height:42px}.bar .iconbutton svg{width:23px}.stagepips{padding:8px;gap:4px}.pips{padding:8px;gap:3px}.pips i{width:9px;height:9px}.counter{max-width:70px}}
