:root{--ink: #14241b;--muted: #68746c;--paper: #e9e7de;--card: #faf8f2;--line: #d1d0c7;--green: #236c49;--lime: #c7e35c;--orange: #df7b4b;--blue: #4f8fb9;color-scheme:light;font-family:Inter,PingFang SC,Microsoft YaHei,system-ui,sans-serif}*{box-sizing:border-box}html,body{min-height:100%;margin:0}body{color:var(--ink);background-color:var(--paper);background-image:radial-gradient(rgba(30,70,47,.07) 1px,transparent 1px);background-size:16px 16px}a{color:inherit}button{color:inherit;font:inherit}.sandbox-shell{min-height:100vh;display:grid;grid-template-rows:minmax(72px,auto) auto 1fr}.topbar{z-index:20;display:flex;align-items:center;gap:24px;padding:0 22px;border-bottom:1px solid var(--line);background:#faf8f2f0;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.brand{display:flex;align-items:center;gap:10px;min-width:275px;text-decoration:none}.brand-mark{width:36px;height:36px;display:grid;place-items:center;border-radius:50%;background:var(--ink);color:#fff;font:800 15px ui-monospace,monospace}.brand-copy{display:flex;flex-direction:column}.brand-copy b{font-size:17px;letter-spacing:.08em}.brand-copy small{color:var(--muted);font-size:12px;letter-spacing:.04em}.world-status{flex:1;display:flex;justify-content:center;gap:8px}.world-status>span{padding:7px 10px;border:1px solid var(--line);border-radius:999px;background:#ffffff73;color:var(--muted);font-size:14px}.online{display:inline-block;width:6px;height:6px;margin-right:6px;border-radius:50%;background:#59a66f;box-shadow:0 0 0 4px #59a66f21}.top-progress{display:flex;align-items:center;gap:6px}.drone-chip{display:flex;align-items:center;min-height:44px;padding:8px 12px;border:1px solid #b7cfc6;border-radius:8px;background:#e7f0ec;color:#245746;font-size:14px;font-weight:750;text-decoration:none;white-space:nowrap}.drone-chip:hover{border-color:#6f9a8b;background:#dceae4}.math-chip{display:flex;align-items:center;gap:8px;padding:8px 10px;border:1px solid #cad3b0;border-radius:8px;background:#eff2dc;color:#4c6534;text-decoration:none}.math-chip span{font-size:14px}.math-chip b{font:800 16px ui-monospace,monospace}.math-chip:hover{border-color:#849b52;background:#e6edc3}.progress-chip{display:flex;align-items:center;gap:10px;padding:8px 11px;border-radius:8px;background:var(--ink);color:#fff}.progress-chip span{color:#b9c3bc;font-size:14px}.progress-chip b{color:var(--lime);font:800 17px ui-monospace,monospace}.mission-bar{display:grid;grid-template-columns:minmax(340px,.9fr) minmax(360px,1.15fr) auto;align-items:center;gap:28px;padding:13px 22px 12px;border-bottom:1px solid var(--line)}.eyebrow{display:block;color:var(--green);font:800 13px ui-monospace,monospace;letter-spacing:.06em}.mission-bar h1{margin:4px 0 0;font:700 clamp(22px,2.2vw,31px)/1.08 Georgia,"Songti SC",serif}.mission-bar>p{margin:0;color:var(--muted);font-size:15px;line-height:1.65}.legend{display:flex;gap:9px;white-space:nowrap}.legend span{color:var(--muted);font-size:14px}.dot{display:inline-block;width:7px;height:7px;margin-right:4px;border-radius:50%}.dot.live{background:var(--orange);box-shadow:0 0 0 3px #df7b4b21}.dot.done{background:#57a36d}.dot.idle{border:1px solid #9ba59e}.sandbox-layout{min-height:0;display:grid;grid-template-columns:minmax(720px,2.5fr) minmax(275px,.72fr);gap:12px;padding:12px}.panel{min-height:0;overflow:hidden;border:1px solid var(--line);border-radius:15px;background:#faf8f2f7;box-shadow:0 8px 24px #24372b0f}.map-panel{display:grid;grid-template-rows:48px 1fr}.map-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 12px 0 15px;border-bottom:1px solid var(--line)}.map-title{display:flex;align-items:center;gap:8px;min-width:0}.map-title b{font-size:15px;white-space:nowrap}.map-title small{color:var(--muted);font-size:14px;white-space:nowrap}.pulse{flex:none;width:7px;height:7px;border-radius:50%;background:#55a26b;box-shadow:0 0 0 4px #55a26b24}.camera-tools{display:flex;align-items:center;gap:5px}.camera-tools button{height:40px;padding:0 12px;border:1px solid #c9ccc5;border-radius:7px;background:#fff;color:#4d5c53;font-size:14px;font-weight:700;cursor:pointer}.camera-tools button:hover,.camera-tools button:focus-visible{border-color:#71897a;background:#edf3ec;outline:none}.camera-readout{display:flex;align-items:center;gap:5px;margin-right:2px;color:var(--muted);font:12px ui-monospace,monospace;white-space:nowrap}.camera-readout i{width:20px;height:20px;display:grid;place-items:center;border:1px solid #9aa79e;border-radius:50%;color:#325b43;font-style:normal;transition:transform .2s}.ranch-map{position:relative;min-height:620px;overflow:hidden;isolation:isolate;background:#68835f;outline:none}.ranch-map:focus-visible{box-shadow:inset 0 0 0 3px #dfff7c}#ranchCanvas{position:absolute;inset:0;z-index:1;display:block;width:100%;height:100%;touch-action:none;cursor:grab}.scene-vignette{position:absolute;inset:0;z-index:2;pointer-events:none;background:linear-gradient(180deg,rgba(19,40,30,.22),transparent 22%,transparent 68%,rgba(15,31,23,.31)),radial-gradient(circle at 50% 42%,transparent 38%,rgba(12,29,20,.22) 115%)}.scene-tooltip{position:absolute;z-index:60;max-width:190px;padding:7px 10px;border:1px solid rgba(255,255,255,.25);border-radius:7px;opacity:0;transform:translate(-50%,-100%);background:#0f1f17e6;color:#f3f7f2;font-size:14px;pointer-events:none;transition:opacity .12s;-webkit-backdrop-filter:blur(7px);backdrop-filter:blur(7px)}.scene-tooltip.show{opacity:1}.zone{--scene-scale: 1;position:absolute;z-index:10;width:188px;min-height:48px;display:grid;grid-template-columns:30px 1fr;align-items:center;column-gap:7px;padding:7px 8px;border:1px solid rgba(241,249,240,.45);border-radius:9px;background:#13271ce0;box-shadow:0 8px 25px #09191047;color:#fff;text-decoration:none;transform:translate(-50%,-100%) scale(var(--scene-scale));transform-origin:50% 100%;transition:opacity .15s,filter .15s,border-color .15s;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.zone:after{content:"";position:absolute;left:50%;top:100%;width:1px;height:22px;background:linear-gradient(rgba(236,255,216,.65),transparent)}.zone:before{content:"";position:absolute;left:calc(50% - 3px);top:calc(100% + 18px);width:7px;height:7px;border:1px solid #fff;border-radius:50%;background:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 32%,transparent)}.zone:hover,.zone:focus-visible{border-color:#e4ff8d;filter:brightness(1.17);outline:none}.zone[data-offscreen]{opacity:0;pointer-events:none}.zone-no{grid-row:1 / 3;display:grid;place-items:center;width:30px;height:30px;border:1px solid color-mix(in srgb,var(--accent) 65%,#fff);border-radius:50%;color:#f1ffd3;font:800 13px ui-monospace,monospace}.zone-copy{min-width:0;display:flex;flex-direction:column;gap:2px}.zone-copy small{overflow:hidden;color:#9fb2a5;font:600 12px ui-monospace,monospace;letter-spacing:.07em;text-overflow:ellipsis;white-space:nowrap}.zone-copy strong{overflow:hidden;font:700 15px Georgia,Songti SC,serif;text-overflow:ellipsis;white-space:nowrap}.zone-state{grid-column:2;width:fit-content;padding:2px 5px;border-radius:999px;background:#ffffff1c;color:#c6d1c9;font-size:12px}.zone.done{border-color:#a6eba1bf}.zone.done .zone-state{background:#73be693d;color:#caffc4}.zone.focus{animation:zonePulse 2s ease-in-out infinite}.map-hint{position:absolute;z-index:55;left:50%;bottom:14px;display:grid;grid-template-columns:auto auto;gap:2px 10px;padding:9px 14px;border:1px solid rgba(255,255,255,.18);border-radius:11px;transform:translate(-50%);background:#14241be8;color:#fff;box-shadow:0 10px 25px #0003;-webkit-backdrop-filter:blur(9px);backdrop-filter:blur(9px)}.map-hint span{grid-row:1 / 3;color:#91a399;font-size:12px;letter-spacing:.1em;writing-mode:vertical-lr}.map-hint b{font-size:15px}.map-hint small{color:#bdc7c0;font-size:12px}.interaction-hint{position:absolute;z-index:50;left:14px;bottom:14px;display:flex;align-items:center;gap:8px;color:#edf3ed;pointer-events:none}.interaction-hint>i{width:25px;height:35px;border:1px solid rgba(255,255,255,.65);border-radius:13px;background:#1021174d}.interaction-hint>i:before{content:"";display:block;width:2px;height:8px;margin:6px auto;border-radius:2px;background:#dfff7c;animation:scrollHint 1.8s ease-in-out infinite}.interaction-hint span{display:flex;flex-direction:column;gap:2px}.interaction-hint b{font-size:14px}.interaction-hint small{color:#edf3eda6;font-size:12px}.dispatch{padding:15px;display:flex;flex-direction:column;gap:12px}.side-heading,.side-heading>div,.section-label,.event-top{display:flex;align-items:center;justify-content:space-between}.side-heading>div{justify-content:flex-start;gap:8px}.side-heading h2{margin:0;font-size:16px}.step{width:23px;height:23px;display:grid;place-items:center;border:1px solid var(--line);border-radius:6px;color:var(--green);font:800 14px ui-monospace,monospace}.day-badge{color:var(--muted);font:14px ui-monospace,monospace}.event-card{position:relative;overflow:hidden;padding:13px;border:1px solid #d3c9b5;border-radius:11px;background:#e9e3d4}.event-top span,.section-label span{font-size:14px;font-weight:750}.event-top i{padding:4px 6px;border-radius:999px;background:#f5dfd2;color:#9d4f32;font-size:12px;font-style:normal;font-weight:800}.weather-icon{position:absolute;right:13px;top:40px;font-size:34px;filter:saturate(.75)}.event-card h3{margin:11px 45px 4px 0;font:700 18px Georgia,Songti SC,serif}.event-card p{margin:0 35px 10px 0;color:#5e655f;font-size:14px;line-height:1.55}.event-impact{display:flex;gap:5px}.event-impact span{padding:4px 6px;border-radius:5px;background:#ffffff8c;color:#6d5b4e;font-size:12px}.resource-block{padding:12px;border:1px solid var(--line);border-radius:11px;background:#f8f6ef}.section-label small{color:var(--muted);font:12px ui-monospace,monospace}.resource{display:grid;grid-template-columns:1fr auto;align-items:center;margin-top:9px}.resource span{color:var(--muted);font-size:14px}.resource b{font:800 15px ui-monospace,monospace}.resource>div{grid-column:1 / -1;height:5px;overflow:hidden;margin-top:4px;border-radius:99px;background:#deddd5}.resource i{display:block;height:100%;border-radius:99px;background:var(--green);transition:width .5s}.resource[data-resource=water] i{background:var(--blue)}.resource[data-resource=energy] i{background:#d8ad43}.resource[data-resource=biodiversity] i{background:#7da755}.route-card{padding:12px;border:1px solid #c7d8ca;border-radius:11px;background:#dfeae1}.route-card h3{margin:9px 0 4px;font:700 17px Georgia,Songti SC,serif}.route-card p{margin:0;color:#546157;font-size:14px;line-height:1.55}.route-card a{display:flex;justify-content:space-between;margin-top:10px;padding:9px 10px;border-radius:7px;background:var(--green);color:#fff;font-size:14px;font-weight:750;text-decoration:none}.math-route-card,.drone-route-card{display:flex;align-items:center;justify-content:space-between;gap:9px;padding:11px 12px;border:1px solid #d6d5a9;border-radius:11px;background:#f0f0d8}.math-route-card>div,.drone-route-card>div{min-width:0;display:flex;flex-direction:column;gap:2px}.math-route-card span,.drone-route-card>div>span{color:#718042;font:800 12px ui-monospace,monospace;letter-spacing:.06em}.math-route-card b,.drone-route-card b{font:700 16px Georgia,Songti SC,serif}.math-route-card small,.drone-route-card small{color:var(--muted);font-size:12px}.math-route-card>a{flex:none;width:44px;height:44px;display:grid;place-items:center;border-radius:50%;background:var(--ink);color:var(--lime);font-size:18px;text-decoration:none}.drone-route-card{border-color:#b7cfc6;background:#e7f0ec;color:inherit;text-decoration:none}.drone-route-card>div>span{color:#3d6a5c}.drone-route-card>span{flex:none;width:44px;height:44px;display:grid;place-items:center;border-radius:50%;background:var(--ink);color:#d7f3e4;font-size:18px}.dispatch-actions{margin-top:auto;display:flex;gap:7px}.advance{flex:1;display:flex;align-items:center;justify-content:space-between;padding:11px 12px;border:0;border-radius:9px;background:var(--ink);color:#fff;cursor:pointer}.advance span{font-size:15px;font-weight:750}.advance small{color:#99a69e;font-size:12px}.advance:hover{transform:translateY(-1px);box-shadow:0 8px 18px #14241b2e}.reset-world{width:42px;border:1px solid var(--line);border-radius:9px;background:#f7f5ee;font-size:19px;cursor:pointer}.toast{position:fixed;z-index:80;top:78px;left:50%;padding:9px 13px;border-radius:8px;opacity:0;transform:translate(-50%,-12px);background:var(--ink);color:#fff;font-size:14px;pointer-events:none;transition:.2s}.toast.show{opacity:1;transform:translate(-50%)}@keyframes zonePulse{50%{border-color:#ecff9e;box-shadow:0 0 0 5px #ddff7c26,0 12px 30px #09191059}}@keyframes scrollHint{0%,to{opacity:.35;transform:translateY(0)}50%{opacity:1;transform:translateY(8px)}}@media(max-width:1120px){.mission-bar{grid-template-columns:1fr 1fr}.legend{grid-column:1 / -1}.sandbox-layout{grid-template-columns:1fr}.dispatch{display:grid;grid-template-columns:1fr 1fr;align-items:start}.side-heading,.dispatch-actions{grid-column:1 / -1}.ranch-map{min-height:650px}}@media(max-width:720px){.sandbox-shell{display:block}.topbar{min-height:66px;padding:9px 13px;flex-wrap:wrap}.brand{min-width:0}.world-status{order:3;flex-basis:100%;justify-content:flex-start;overflow-x:auto;padding-bottom:2px}.world-status>span{flex:none;white-space:nowrap}.top-progress{margin-left:auto}.math-chip span{display:none}.mission-bar{grid-template-columns:1fr;padding:14px}.mission-bar>p,.event-card p,.route-card p,#forecastPanel>p{font-size:16px;line-height:1.6}.camera-tools button{min-height:44px}.legend{grid-column:auto;overflow-x:auto}.sandbox-layout{padding:8px}.map-panel{grid-template-rows:auto 1fr}.map-toolbar{min-height:82px;align-items:flex-start;flex-direction:column;padding:10px 12px}.map-title small{display:none}.camera-tools{width:100%}.camera-readout{margin-right:auto}.ranch-map{min-height:570px}.zone{width:176px;min-height:58px;grid-template-columns:28px 1fr;column-gap:6px;padding:8px}.zone-no{width:28px;height:28px;font-size:12px}.zone-copy small{display:none}.zone-copy strong{font-size:16px}.zone-state{font-size:13px}.zone:after{height:14px}.zone:before{top:calc(100% + 11px)}.map-hint{left:auto;right:10px;bottom:10px;max-width:68%;transform:none}.interaction-hint{left:10px;bottom:10px}.interaction-hint span{display:none}.dispatch{display:flex}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important}}
