@font-face{font-family:CableDisplay;src:url('entry-assets/CableDisplay.woff2') format('woff2');font-weight:400;font-display:swap}
@font-face{font-family:CableText;src:url('entry-assets/CableText.woff2') format('woff2');font-weight:400 600;font-display:swap}
@font-face{font-family:CableKai;src:local('LXGW WenKai'),local('霞鹜文楷'),local('KaiTi'),local('楷体');font-display:swap}
:root{font-family:CableText,'Microsoft YaHei','PingFang SC',sans-serif;color-scheme:dark;--ink:#f1fcff;--muted:#c3e7fa;--edge:#5ac9f1;--ease:cubic-bezier(.23,1,.32,1);--display:CableDisplay,CableText,'Microsoft YaHei',sans-serif;scrollbar-color:#68c9ed #12568c;scrollbar-width:thin}
*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden;background:#08549a;color:var(--ink)}button,input{font:inherit}button{cursor:pointer}button:focus-visible,summary:focus-visible{outline:3px solid #d7faff;outline-offset:5px}button:disabled{cursor:wait;opacity:.55}[hidden]{display:none!important}::selection{background:#55ddf0;color:#073e72}
#unity-canvas{display:block;width:100vw;height:100vh;height:100dvh;background:#08549a;outline:none;touch-action:none;visibility:hidden}
.entry{position:fixed;inset:0;isolation:isolate;background:radial-gradient(ellipse at 24% 40%,#3c9fc7 0%,#177cb6 34%,#0c5593 72%,#124578 100%);overflow:auto}
.entry:before{content:'';position:absolute;inset:0;z-index:-1;background:linear-gradient(155deg,#9de9ff12 0%,transparent 40%,#062a641f 100%);pointer-events:none}
.entry-header{height:108px;display:flex;align-items:center;justify-content:space-between;padding:0 4.5vw;position:relative;z-index:2}
.entry-header:after{content:'';position:absolute;bottom:0;left:4.5vw;right:4.5vw;height:1px;background:linear-gradient(90deg,#62c6ec99,transparent 45%,#62c6ec77)}
.entry-school{width:250px;height:auto;max-height:76px;object-fit:contain}.entry-tools{display:flex;gap:14px}.tool-button{background:#0a579b88;border:1px solid #83d0e9aa;color:#effcff;padding:10px 19px;border-radius:3px;font-size:17px;transition:background 160ms ease}.tool-button:hover{background:#168ac0bb}.tool-button:active{transform:translateY(1px)}
.entry-main{min-height:calc(100dvh - 190px);display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);align-items:center;gap:3vw;padding:24px 6vw 24px 3vw;max-width:2560px;margin:auto}
.entry-content{width:100%;max-width:680px;justify-self:center;padding:16px 0}.entry h1{font-family:var(--display);font-weight:400;line-height:1.2;letter-spacing:.045em;margin:0 0 26px;color:#fff;text-shadow:0 4px 18px #073f7240}.title-main{display:block;font-size:clamp(48px,4.7vw,96px)}.title-sub{display:block;font-size:clamp(30px,2.65vw,56px);letter-spacing:.1em;color:#c0f3ff;margin-top:16px}.entry-lead{font-size:clamp(17px,1.2vw,24px);color:#e1f5ff;line-height:1.7;letter-spacing:.04em;margin:0 0 38px}
.mode-list{display:flex;flex-direction:column;gap:18px}.mode-button{position:relative;text-align:left;color:#fff;border:0;background:none;padding:22px 72px 22px 30px;min-height:112px;isolation:isolate;transition:transform 180ms var(--ease)}
.mode-button:before,.mode-button:after{content:'';position:absolute;inset:0;z-index:-1;clip-path:polygon(20px 0,100% 0,100% calc(100% - 20px),calc(100% - 20px) 100%,0 100%,0 20px)}
.mode-button:before{background:linear-gradient(125deg,#b5f5ff,#58bcdf 45%,#9eecfa)}.mode-button:after{inset:1px;background:linear-gradient(110deg,#dbf8ff,#91daef);transition:filter 180ms ease}
.mode-button{color:#084579}.mode-button.secondary{color:#f3fcff}.mode-button.secondary:before{background:linear-gradient(125deg,#8bd5ecbb,#42a6d3aa)}.mode-button.secondary:after{background:linear-gradient(110deg,#1169a5,#177aaf)}.mode-button:hover{transform:translateX(4px)}.mode-button:hover:after{filter:brightness(1.08)}.mode-button:active{transform:translateX(1px)}
.mode-title{display:block;font-family:var(--display);font-size:32px;letter-spacing:.12em;margin-bottom:9px;font-weight:400}.mode-description{display:block;color:#245b7b;font-size:17px;line-height:1.5}.secondary .mode-description{color:#d6f1ff}.mode-arrow{position:absolute;right:30px;top:calc(50% - 14px);width:28px;height:28px;stroke:currentColor;fill:none;stroke-width:1.6}
.home-links{margin-top:26px;display:flex;align-items:center;gap:25px;flex-wrap:wrap}.text-button{border:0;background:none;color:#d7f2ff;font-size:18px;padding:8px 0;text-underline-offset:6px}.text-button:hover{text-decoration:underline;color:#fff}.home-note{font-size:17px;line-height:1.8;color:#d7efff;margin:8px 0 0}
.entry-footer{min-height:72px;padding:16px 4.5vw;display:flex;align-items:center;justify-content:space-between;gap:24px;color:#d2ebf9;font-size:16px;letter-spacing:.05em;border-top:1px solid #9ed7ee33}.entry-footer span:last-child{font-size:15px}
.loading-card{position:relative;padding:26px 0;min-height:230px}.loading-row{display:flex;justify-content:space-between;align-items:baseline;gap:20px;margin-bottom:21px;font-size:22px}.loading-number{font-size:32px;font-variant-numeric:tabular-nums;color:#a3f3ff}.loading-track{position:relative;height:6px;background:#043c78;border:1px solid #59b8df55;overflow:hidden}.loading-fill{position:absolute;inset:0;background:linear-gradient(90deg,#208ed1,#8ef6ff);transform-origin:left;transform:scaleX(0);transition:transform 200ms linear}.loading-track:after{content:'';position:absolute;inset:0;width:70px;background:linear-gradient(90deg,transparent,#e3ffff88,transparent);animation:scan 2s linear infinite}.loading-caption{color:#c3e5f5;font-size:18px;margin-top:22px;line-height:1.6}.ready-enter{animation:enter 300ms var(--ease) both}@keyframes scan{from{left:-70px}to{left:100%}}@keyframes enter{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:translateY(0)}}
#failure{position:fixed;inset:0;display:grid;place-content:center;background:#08518fef;padding:40px;text-align:center;font-size:24px;z-index:5}#failure details{max-width:760px;font-size:17px;line-height:1.7;color:#d4eaff;margin:18px 0}#failure-detail{overflow-wrap:anywhere}#retry{justify-self:center;margin-top:20px}
#entry-home-link{position:fixed;left:24px;top:8px;width:225px;height:42px;border:0;background:transparent;z-index:3;color:transparent}#entry-home-link:focus-visible{outline-offset:0}#entry-home-link:hover{background:#69c8e91a}#entry-home-link span{position:absolute;left:5px;top:48px;white-space:nowrap;background:#125d95;color:#fff;font-size:16px;padding:7px 13px;opacity:0;pointer-events:none}#entry-home-link:hover span,#entry-home-link:focus-visible span{opacity:1}
.exam-page{max-width:1100px;margin:35px auto 50px;padding:30px 42px 34px;background:linear-gradient(150deg,#095994ed,#087fa5ed);border:1px solid #77d7f0;box-shadow:0 18px 40px #002d5b55;position:relative;min-height:540px}.exam-page:before{content:'';height:3px;width:100px;background:#87f6ff;position:absolute;left:0;top:0}.exam-header{display:flex;align-items:flex-start;justify-content:space-between;gap:25px;border-bottom:1px solid #8bddf055;padding-bottom:20px}.exam-page h2{font-size:32px;font-weight:400;margin:0 0 9px}.exam-meta{color:#c5ecfc;font-size:18px;margin:0;line-height:1.8}.exam-nav{display:flex;gap:11px;flex-wrap:wrap;margin:26px 0}.question-index{border:1px solid #83cee4;background:#09659b;color:#f1fcff;width:42px;height:38px;font-size:19px;border-radius:2px}.question-index.answered{background:#168caa}.question-index[aria-current=true]{background:#c7f8ff;color:#064b80;border-color:#fff}.exam-page fieldset{border:0;padding:0;margin:25px 0}.exam-page legend{font-size:24px;line-height:1.7;margin-bottom:24px;max-width:900px}.answer-option{display:flex;align-items:flex-start;gap:13px;padding:14px 18px;margin:12px 0;border:1px solid #61b7d480;background:#034d833d;font-size:20px;line-height:1.6;cursor:pointer;border-radius:2px}.answer-option:has(input:checked){border-color:#a2f6ff;background:#138eaf99}.answer-option:hover{background:#168bb36b}.answer-option input{width:18px;height:18px;margin:7px 0 0;accent-color:#87edff;flex-shrink:0}.exam-actions{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:24px;padding-top:22px;border-top:1px solid #8bddf055}.exam-status{font-size:18px;color:#d4f6ff;min-height:29px;margin:10px 0}.exam-primary{background:#b9f7ff;color:#064d7b;border-color:#bcf7ff}.exam-primary:hover{background:#e0fcff}.exam-result-head{font-size:28px;margin:22px 0}.result-row{padding:22px 0;border-top:1px solid #90d9eb66}.result-row h3{font-weight:400;font-size:21px;line-height:1.6;margin:0 0 12px}.result-row p{font-size:18px;line-height:1.7;margin:5px 0;color:#d6effa}.result-row .result-verdict{color:#b9f9f7}.result-row .result-wrong{color:#ffe1ae}.help-copy{max-width:780px;font-size:22px;line-height:2;color:#e0f5ff}.help-copy p{margin:14px 0}
.cable-stage{position:relative;min-width:0;width:100%;align-self:center;text-align:center;padding:0 0 12px}
.cable-viewport{height:clamp(260px,38vw,600px);max-height:calc(100dvh - 490px);min-height:220px;position:relative}
#cable-canvas{width:100%;height:100%;display:block;cursor:grab;touch-action:none;position:relative;outline-offset:-6px;border-radius:8px}#cable-canvas.dragging{cursor:grabbing}#cable-canvas:focus-visible{outline:2px solid #b8f6ff}
.cable-fallback{display:none;position:absolute;inset:0;background:url('entry-background.png') 18% center/220% auto no-repeat;mask-image:linear-gradient(180deg,transparent,#000 18%,#000 80%,transparent)}
.cable-stage[data-state=fallback] .cable-fallback{display:block}.cable-stage[data-state=fallback] canvas{visibility:hidden}.cable-stage[data-state=fallback] .cable-hint{visibility:hidden}
.cable-status{position:absolute;left:0;right:0;top:45%;font-size:18px;color:#fff}.cable-stage[data-state=fallback] .cable-status{top:auto;bottom:6px}
.cable-type-row{display:flex;align-items:center;justify-content:center;gap:14px;margin:0 auto 8px;padding:0 16px;color:#e1f5ff;max-width:620px}.cable-type-row label{font-size:16px;white-space:nowrap}.cable-type-row select{font:inherit;font-size:16px;min-width:0;max-width:100%;width:300px;min-height:44px;padding:8px 34px 8px 15px;border:1px solid #8ad7edaa;border-radius:3px;background:#0e6197;color:#fff;cursor:pointer}.cable-type-row select:focus-visible{outline:3px solid #d7faff;outline-offset:3px}.cable-type-row option{background:#125d92;color:#fff}
.cable-inspector{max-width:640px;margin:0 auto 12px;padding:0 16px;text-align:left}.cable-layers{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}.cable-layers button{font-size:14px;min-width:0;min-height:38px;padding:8px 6px;border:1px solid #a8e2f16b;border-radius:3px;background:#07538566;color:#f3fbff;display:flex;align-items:center;justify-content:center;gap:6px;line-height:1.4;transition:background 140ms}.cable-layers button:hover{background:#92ddef33}.cable-layers button[aria-pressed=true]{background:#c8f4ff;color:#084776;border-color:#dbfaff}.layer-swatch{width:7px;height:7px;border-radius:50%;flex-shrink:0;box-shadow:0 0 0 1px #e4faff55}.cable-detail{padding-top:14px;min-height:98px}.cable-detail strong{display:block;font-size:17px;font-weight:600;line-height:1.5;color:#fff}.cable-detail p{font-size:14px;line-height:1.65;color:#d8f2ff;margin:5px 0 0;min-height:46px}
.cable-callout{position:absolute;pointer-events:none;z-index:1;width:1px;height:1px}.callout-dot{display:block;position:absolute;width:7px;height:7px;left:-3px;top:-3px;border:1px solid white;border-radius:50%;background:#28a8d8}.cable-callout:before{content:'';position:absolute;left:3px;top:0;width:23px;height:1px;background:#c3f3ff}.cable-callout>span:last-child{position:absolute;left:25px;top:0;transform:translateY(-50%);background:#e1f9ff;color:#124b70;padding:7px 10px;border-radius:3px;white-space:nowrap;font-size:14px;line-height:1.4;box-shadow:0 4px 12px #10477525}.cable-callout.align-left:before{left:auto;right:3px}.cable-callout.align-left>span:last-child{left:auto;right:25px}
.cable-controls{display:flex;justify-content:center;gap:0;margin:auto;max-width:540px;border-block:1px solid #a4e7ff66;background:linear-gradient(100deg,transparent,#064d8340,transparent)}
.cable-controls button{border:0;background:transparent;color:#effcff;font-size:16px;display:flex;align-items:center;justify-content:center;gap:9px;padding:14px 17px;min-height:48px;transition:background 160ms}.cable-controls button:hover{background:#8bdeff26}.cable-controls button[aria-pressed=true]#cable-expand{background:#beefff;color:#094b78}.cable-controls svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linejoin:round;stroke-linecap:round;flex-shrink:0}.cable-controls .motion-play{display:none}#cable-motion[aria-pressed=false] .motion-pause{display:none}#cable-motion[aria-pressed=false] .motion-play{display:block}
.cable-hint{font-size:15px;color:#d2ecfb;margin:14px 0 0;letter-spacing:.05em}
@media(min-width:2100px){.entry-header{height:132px}.entry-school{width:300px}.entry-main{min-height:calc(100dvh - 230px);gap:4vw}.mode-button{min-height:148px;padding:28px 80px 28px 36px}.mode-title{font-size:42px}.mode-description{font-size:22px}.entry-content{max-width:820px}.entry-lead{margin-bottom:48px}.cable-viewport{height:650px;max-height:calc(100dvh - 540px)}.cable-type-row select{font-size:20px;width:360px}.cable-type-row label{font-size:20px}.cable-inspector{max-width:780px}.cable-layers button{font-size:18px;min-height:46px}.cable-detail strong{font-size:22px}.cable-detail p{font-size:18px}.cable-detail{min-height:120px}.cable-callout>span:last-child{font-size:18px}.cable-controls{max-width:640px}.cable-controls button{font-size:20px;padding:18px 22px}.cable-hint{font-size:18px}.exam-page{max-width:1350px;margin-top:65px;padding:42px 55px}.exam-page legend{font-size:29px}.answer-option{font-size:25px}.exam-page h2{font-size:38px}}
@media(max-width:1100px){.entry-header{height:90px;padding:0 28px}.entry-school{width:210px}.entry-main{gap:2vw;padding:24px 4vw 24px 1vw;min-height:calc(100dvh - 170px);grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.title-main{font-size:clamp(38px,4.7vw,52px)}.title-sub{font-size:29px}.entry-lead{font-size:16px;margin-bottom:26px}.mode-title{font-size:28px}.mode-description{font-size:16px}.mode-button{padding:19px 40px 19px 21px;min-height:106px}.mode-arrow{right:15px;width:22px}.cable-controls button{font-size:14px;padding:12px 10px;gap:6px}.cable-controls svg{width:17px}.cable-caption p{font-size:14px}.exam-page{margin:26px 25px;padding:25px}.entry-tools{gap:8px}.tool-button{font-size:16px;padding:9px 13px}}
@media(max-width:700px){.entry-header{height:78px;padding:0 18px}.entry-school{width:158px}.entry-tools{gap:5px}.entry-tools .tool-button{font-size:14px;padding:8px}.entry-main{display:flex;flex-direction:column;gap:10px;padding:24px 24px 30px;min-height:0}.entry-content{max-width:480px;order:0;padding:0}.entry h1{margin-bottom:18px}.title-main{font-size:clamp(42px,9.8vw,62px)}.title-sub{font-size:clamp(26px,6vw,36px);margin-top:10px}.entry-lead{font-size:16px;letter-spacing:0;margin-bottom:24px}.mode-list{gap:14px}.mode-button{min-height:98px}.mode-title{font-size:30px}.mode-description{font-size:15px}.cable-stage{order:1;margin-top:20px;max-width:480px}.cable-viewport{height:300px;max-height:none;min-height:240px}.cable-type-row{padding:0;gap:10px}.cable-type-row label{font-size:14px}.cable-type-row select{font-size:14px;width:230px}.cable-inspector{padding:0}.cable-layers{grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}.cable-layers button{font-size:14px;min-height:44px}.cable-detail{min-height:112px}.cable-callout>span:last-child{font-size:12px;padding:7px 8px}.cable-controls button{padding:14px 10px;font-size:14px}.cable-hint{font-size:14px}.entry-footer{padding:18px 24px;align-items:flex-start;flex-direction:column;gap:8px;font-size:14px}.entry-footer span:last-child{font-size:14px}.exam-page{margin:18px 14px;padding:22px 20px;min-height:550px}.exam-header{gap:12px}.exam-page h2{font-size:25px}.exam-meta{font-size:16px}.exam-page legend{font-size:21px}.answer-option{font-size:18px;padding:12px}.exam-actions{flex-wrap:wrap}.help-copy{font-size:19px}.question-index{width:36px;height:36px}.home-links{gap:20px}}
@media(max-width:360px){.entry-header{padding:0 12px}.entry-school{width:136px}.entry-tools .tool-button{padding:8px 6px;font-size:13px}.entry-main{padding-inline:18px}.cable-controls button{font-size:13px;padding:12px 8px}.cable-controls svg{width:15px}}
@media(min-width:701px) and (max-height:850px){.entry-header{height:90px}.cable-viewport{height:300px;min-height:300px;max-height:none}.entry-main{align-items:start}.entry-content{padding-top:44px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}

/* 实验空间 user badge and network check */
.ilab-user{align-self:center;margin-right:12px;padding:6px 12px;border:1px solid rgba(140,225,250,.55);border-radius:16px;background:rgba(10,70,120,.55);color:#e8f8ff;font-size:14px;white-space:nowrap}
.ilab-user.error{border-color:rgba(255,180,130,.8);color:#ffe2cf}
.network-check{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin-top:18px;padding-top:14px;border-top:1px solid rgba(140,225,250,.25)}
.network-check p{margin:0;flex:1 1 280px}

/* Longer course name: keep both title lines inside the content column */
.title-main{font-size:clamp(40px,3.6vw,72px)}.title-sub{font-size:clamp(24px,2.2vw,46px)}
@media(max-width:1100px){.title-main{font-size:clamp(34px,3.9vw,46px)}.title-sub{font-size:24px}}
@media(max-width:700px){.title-main{font-size:clamp(28px,7.6vw,48px)}.title-sub{font-size:clamp(20px,5vw,30px)}}

/* ---- Calm landing: flat surfaces, no shimmer ---- */
.entry{background:radial-gradient(ellipse at 24% 42%,#2b8bbd 0%,#13659e 44%,#0b4e8a 100%)}
.entry:before{display:none}
.entry-header:after{background:#ffffff26}
.entry h1{text-shadow:none}
.mode-button{min-height:104px;padding:22px 72px 22px 28px;transition:none}
.mode-button:before{display:none}
.mode-button:after{inset:0;clip-path:none;border-radius:6px;background:#f2faff;transition:background-color 160ms ease}
.mode-button.secondary:after{background:#ffffff12;box-shadow:inset 0 0 0 1px #ffffff55}
.mode-button:hover,.mode-button:active{transform:none}
.mode-button:hover:after{filter:none;background:#fff}
.mode-button.secondary:hover:after{background:#ffffff21}
.mode-description{color:#3f6d8d}
.mode-arrow{transition:transform 160ms ease}.mode-button:hover .mode-arrow{transform:translateX(4px)}
.loading-fill{background:#9fe2ff}
.loading-track:after{display:none}
.exam-page{background:#0a5893f2;border-color:#ffffff33;box-shadow:0 10px 28px #002d5b40}
.cable-controls{background:none}
.ilab-user{border-radius:4px}
/* Three modes: compact tiles so the column still fits a laptop screen */
.mode-list{gap:12px}.mode-button{min-height:86px;padding:16px 72px 16px 28px}.mode-title{font-size:28px;margin-bottom:6px}.mode-description{font-size:16px}
.entry-lead{margin-bottom:28px}
