#gptlab{--brand:#2f6bff;          
  --brand-2:#5b8bff;        
  --brand-deep:#1e4fd6;     
  --brand-soft:#e8f0ff;     
  --brand-line:#cfddfc;     
  --accent:#ffd021;         
  --accent-2:#ffb020;       
  --accent-soft:#fff7da;
  --accent-line:#ffe6a3;
  --pink:#f2559d;           
  --pink-soft:#ffe9f2;
  --purple:#8a5cf6;         
  --purple-soft:#f0ebff;
  --mint:#12c98c;           
  --mint-soft:#e3f9f0;
  --ink:#0d2259;            
  --ink-2:#384f82;          
  --ink-3:#8496bb;          
  --ok:#16c784; --err:#f0446a; --warn:#ff9f1c;
  --surface:#ffffff;
  --line:#e2eafb;
  --shadow:0 16px 40px -20px rgba(47,107,255,.20);
  --shadow-sm:0 6px 18px -6px rgba(47,107,255,.16);
  --r-lg:22px; --r-md:16px;}
#gptlab *{margin:0; padding:0; box-sizing:border-box; -webkit-tap-highlight-color:transparent;}
#gptlab,
#gptlab{height:100%;}
#gptlab{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  color:var(--ink-2);
  min-height:100%; overflow-x:hidden;
  background:
    radial-gradient(1100px 460px at 92% -8%, #d9e8ff 0%, rgba(217,232,255,0) 60%),
    radial-gradient(900px 460px at -6% 6%, #e5f3ff 0%, rgba(229,243,255,0) 55%),
    radial-gradient(760px 460px at 8% 112%, #fff3d6 0%, rgba(255,243,214,0) 55%),
    linear-gradient(180deg,#e9f0ff 0%, #f4f8ff 55%, #fbfdff 100%);
  background-attachment:fixed;}
#gptlab .bg{position:fixed; inset:0; pointer-events:none; z-index:0; overflow:hidden;}
#gptlab .bg::before,
#gptlab .bg::after{content:''; position:absolute; border-radius:50%; filter:blur(6px); opacity:.55;}
#gptlab .bg::before{width:340px; height:340px; top:-120px; right:-90px;
  background:radial-gradient(circle at 35% 35%, rgba(140,180,255,.55), rgba(140,180,255,0) 70%);}
#gptlab .bg::after{width:300px; height:300px; left:-110px; bottom:8%;
  background:radial-gradient(circle at 60% 40%, rgba(255,208,33,.32), rgba(255,208,33,0) 70%);}
#gptlab .bg .sun,
#gptlab .bg .stars,
#gptlab .bg .cloud,
#gptlab .bg .balloon,
#gptlab .stars2,
#gptlab .stars{display:none;}
#gptlab #app,
#gptlab .page{position:relative; z-index:1; max-width:1100px; margin:0 auto; padding:14px 16px 80px;}
#gptlab .topbar{display:flex; align-items:center; justify-content:space-between; gap:10px;
  background:rgba(255,255,255,.9); backdrop-filter:blur(10px); border:1px solid rgba(255,255,255,.9);
  box-shadow:0 8px 26px -12px rgba(47,107,255,.28); border-radius:20px; padding:10px 16px; margin-bottom:18px;}
#gptlab .topbar .t{flex:1; color:#0d2259; font-weight:800; font-size:17px; white-space:nowrap;
  overflow:hidden; text-overflow:ellipsis;}
#gptlab .topbar .pr{color:#1e4fd6; font-size:12px; font-weight:800; white-space:nowrap; background:#e8f0ff;
  border:1px solid #cfddfc; padding:4px 12px; border-radius:30px;}
#gptlab .topbar .right{display:flex; align-items:center; gap:8px;}
#gptlab .logo{color:#0d2259; font-weight:800; font-size:19px; letter-spacing:.3px;
  display:flex; align-items:center; gap:7px; text-decoration:none;}
#gptlab .logo small{font-size:12px; color:#1e4fd6; font-weight:700; margin-left:2px;
  background:#e8f0ff; border:1px solid #cfddfc; padding:2px 10px; border-radius:30px; white-space:nowrap;}
#gptlab .logo-ic{font-size:26px; line-height:1; display:inline-block;}
#gptlab .logo-name{position:relative;}
#gptlab .logo-num{font-style:italic; background:linear-gradient(135deg,#2f6bff,#1e4fd6); color:#fff;
  padding:2px 10px; border-radius:14px; font-size:13px; transform:rotate(-3deg);
  box-shadow:0 4px 10px rgba(47,107,255,.35);}
#gptlab .back{display:inline-flex; align-items:center; gap:4px; background:#e8f0ff;
  border:1px solid #cfddfc; color:#1e4fd6; font-size:13px; font-weight:800; padding:8px 14px;
  border-radius:30px; cursor:pointer; transition:.15s; white-space:nowrap; text-decoration:none;}
#gptlab .back:hover{background:#dce8ff; transform:translateY(-1px);}
#gptlab .back:active{transform:scale(.96);}
#gptlab .btn-guide,
#gptlab .backbtn{display:inline-flex; align-items:center; gap:4px;
  background:linear-gradient(135deg,#ffd021,#ffb020); color:#7a4a00; font-size:13px; font-weight:800;
  padding:7px 15px; border-radius:30px; text-decoration:none;
  box-shadow:0 6px 16px -6px rgba(255,176,32,.65); transition:.15s;}
#gptlab .btn-guide:hover,
#gptlab .backbtn:hover{transform:translateY(-2px); box-shadow:0 8px 20px -6px rgba(255,176,32,.75);}
#gptlab .btn-guide:active,
#gptlab .backbtn:active{transform:scale(.96);}
#gptlab .btn-gh{display:inline-flex; align-items:center; gap:4px;
  background:linear-gradient(135deg,#0d2259,#1a2c5e); color:#fff; font-size:13px; font-weight:800;
  padding:7px 15px; border-radius:30px; text-decoration:none;
  box-shadow:0 6px 16px -6px rgba(13,34,89,.5); transition:.15s;}
#gptlab .btn-gh:hover{transform:translateY(-2px);}
#gptlab .btn-gh:active{transform:scale(.96);}
#gptlab .btn{border:none; border-radius:30px; padding:10px 20px; font-size:13px; font-weight:800; cursor:pointer;
  transition:.15s; color:#fff; font-family:inherit; box-shadow:0 6px 18px -6px rgba(47,107,255,.16);}
#gptlab .btn:active{transform:scale(.96);}
#gptlab .btn-primary{background:linear-gradient(135deg,#2f6bff,#1e4fd6);}
#gptlab .btn-success{background:linear-gradient(135deg,#12c98c,#0ea876);}
#gptlab .btn-danger{background:linear-gradient(135deg,#ff8a9c,#f0446a);}
#gptlab .btn-warning{background:linear-gradient(135deg,#ffd021,#ffb020); color:#7a4a00;}
#gptlab .btn-ghost{background:#eef1fa; color:#5a638a; box-shadow:none;}
#gptlab .btn-outline{background:transparent; border:2px solid #cfddfc; color:#1e4fd6; box-shadow:none;}
#gptlab .btn:disabled{opacity:.5; cursor:default;}
#gptlab .hero{text-align:center; padding:26px 10px 10px; position:relative;}
#gptlab .hero .big{font-size:72px; line-height:1; display:inline-block; animation:float 3.4s ease-in-out infinite;
  filter:drop-shadow(0 10px 22px rgba(47,107,255,.22));}
@keyframes float { 0%,100%{transform:translateY(0)} 50%{transform:translateY(-10px)} }
#gptlab .hero h1{color:#0d2259; font-size:30px; margin:10px 0 6px; letter-spacing:.3px;}
#gptlab .hero .tagline{color:#5469a0; font-size:16px;}
#gptlab .hero .meta{display:flex; gap:10px; justify-content:center; flex-wrap:wrap; margin-top:16px;}
#gptlab .kicker{display:inline-flex; align-items:center; gap:6px; margin-bottom:14px;
  background:linear-gradient(135deg,#2f6bff,#1e4fd6); color:#fff; font-size:12px; font-weight:800;
  letter-spacing:.5px; padding:5px 16px; border-radius:30px;
  box-shadow:0 6px 16px -6px rgba(47,107,255,.6);}
#gptlab .chip{display:inline-flex; align-items:center; gap:6px; background:rgba(255,255,255,.92);
  border:1px solid #cfddfc; color:#335099; font-size:12px; font-weight:800;
  padding:7px 15px; border-radius:30px; box-shadow:0 6px 18px -6px rgba(47,107,255,.16);}
#gptlab .card{background:#fff; border-radius:22px; padding:20px; box-shadow:0 16px 40px -20px rgba(47,107,255,.2);
  margin:16px 0; border:1px solid #eef2fc;}
#gptlab .card h3{font-size:16px; color:#0d2259; margin-bottom:10px; display:flex; align-items:center; gap:8px; flex-wrap:wrap;}
#gptlab .card p,
#gptlab .card li{font-size:14px; line-height:1.85; color:#384f82;}
#gptlab .card ul{padding-left:20px;}
#gptlab .badge{display:inline-block; background:#e8f0ff; color:#1e4fd6; padding:2px 11px; border-radius:30px; font-size:11px; font-weight:800;}
#gptlab .muted{color:#8496bb; font-size:12px;}
#gptlab .tl{position:relative; margin-top:10px; padding-bottom:10px;}
#gptlab .tl::before{content:''; position:absolute; left:26px; top:8px; bottom:8px; width:4px;
  background:linear-gradient(180deg,#2f6bff,#8a5cf6,#f2559d); border-radius:4px; opacity:.9;}
#gptlab .node{position:relative; padding-left:64px; margin-bottom:18px;}
#gptlab .node .dot{position:absolute; left:12px; top:14px; width:34px; height:34px; border-radius:50%;
  background:#fff; border:3px solid #2f6bff; display:flex; align-items:center; justify-content:center;
  font-size:16px; z-index:1; box-shadow:0 6px 14px -4px rgba(47,107,255,.4);}
#gptlab .node .ncard{background:#fff; border-radius:16px; padding:14px 16px; cursor:pointer;
  box-shadow:0 16px 40px -20px rgba(47,107,255,.2); border:1px solid #eef2fc; transition:.18s;}
#gptlab .node .ncard:hover{transform:translateY(-2px); border-color:#cfddfc;}
#gptlab .node .ncard:active{transform:scale(.98);}
#gptlab .node .ncard.done{border-color:#12c98c; background:linear-gradient(180deg,#ffffff,#f2fcf7);}
#gptlab .node .ncard.cur{border-color:#ffd021; box-shadow:0 12px 26px -12px rgba(255,176,32,.5);}
#gptlab .node .year{display:inline-block; background:linear-gradient(135deg,#2f6bff,#1e4fd6); color:#fff;
  font-size:12px; font-weight:800; padding:3px 11px; border-radius:30px; margin-bottom:6px;}
#gptlab .node .row{display:flex; align-items:center; gap:8px;}
#gptlab .node .row .em{font-size:26px;}
#gptlab .node .row .tt{flex:1;}
#gptlab .node .row .tt b{font-size:16px; color:#0d2259; display:block;}
#gptlab .node .row .tt span{font-size:12px; color:#8496bb;}
#gptlab .node .state{font-size:15px;}
#gptlab .node .ncard.done .state::after{content:'完成'; font-size:10px; color:#fff; background:#12c98c;
  border-radius:12px; padding:2px 8px; margin-left:4px; font-weight:800; vertical-align:middle;}
@media (min-width:720px){#gptlab .tl::before{left:50%; margin-left:-2px;}
#gptlab .node{width:50%; padding-left:0;}
#gptlab .node:nth-child(odd){left:0; padding-right:44px; text-align:right;}
#gptlab .node:nth-child(even){left:50%; padding-left:44px;}
#gptlab .node .dot{left:auto; right:-17px; top:14px;}
#gptlab .node:nth-child(even) .dot{left:-17px; right:auto;}
#gptlab .node .row{justify-content:flex-start;}
#gptlab .node:nth-child(odd) .row{justify-content:flex-end;}
#gptlab .node:nth-child(odd) .ncard .state::after{margin-left:0; margin-right:4px;}}
#gptlab #modal{position:fixed; inset:0; z-index:30; background:rgba(13,24,54,.68); backdrop-filter:blur(8px);
  display:none; align-items:flex-start; justify-content:center; overflow-y:auto; padding:22px 10px 60px;}
#gptlab #modal.open{display:flex;}
#gptlab .lesson{background:#fff; border-radius:26px; max-width:660px; width:100%; padding:24px 22px 22px;
  position:relative; animation:up .35s ease; box-shadow:0 30px 80px -20px rgba(13,24,54,.5);}
@keyframes up { from{opacity:0; transform:translateY(26px)} to{opacity:1; transform:none} }
#gptlab .lesson .l-head{text-align:center; margin-bottom:14px;}
#gptlab .lesson .l-head .lemo{font-size:58px; display:block;}
#gptlab .lesson .l-head .lyear{display:inline-block; background:linear-gradient(135deg,#2f6bff,#1e4fd6);
  color:#fff; font-size:12px; font-weight:800; padding:3px 13px; border-radius:30px;}
#gptlab .lesson .l-head h2{font-size:23px; color:#0d2259; margin:8px 0 3px;}
#gptlab .lesson .l-head .ltag{font-size:13px; color:#8496bb;}
#gptlab .sec{border-radius:16px; padding:14px 16px; margin-top:12px;}
#gptlab .sec h4{font-size:14px; font-weight:800; margin-bottom:8px; display:flex; align-items:center; gap:6px;}
#gptlab .sec p,
#gptlab .sec li{font-size:14px; line-height:1.9; color:#46587d;}
#gptlab .sec.story{background:#fff8e6;}
#gptlab .sec.story h4{color:#9a6b00;}
#gptlab .sec.teach{background:#eaf2ff;}
#gptlab .sec.teach h4{color:#1e4fd6;}
#gptlab .sec.act{background:#e7faf2;}
#gptlab .sec.act h4{color:#0d9d6a;}
#gptlab .sec.act ol{padding-left:20px;}
#gptlab .sec.act li{margin:4px 0;}
#gptlab .sec.think{background:#f3edff;}
#gptlab .sec.think h4{color:#6d3fbd;}
#gptlab .sec.quiz{background:#fff0f7;}
#gptlab .sec.quiz h4{color:#c0448e;}
#gptlab .sec.person{background:#fff4e8;}
#gptlab .sec.person h4{color:#b96a1e;}
#gptlab .sec.struct{background:#e7f7f5;}
#gptlab .sec.struct h4{color:#147a6e;}
#gptlab .quiz-q{font-size:15px; font-weight:800; color:#0d2259; margin-bottom:12px; line-height:1.7;}
#gptlab .opt{display:block; width:100%; text-align:left; background:#fff; border:2px solid #e8eefc;
  border-radius:14px; padding:11px 15px; margin-top:9px; font-size:14px; color:#46587d; cursor:pointer;
  transition:.15s; font-family:inherit;}
#gptlab .opt:hover{border-color:#2f6bff; background:#f5f8ff;}
#gptlab .opt.right{border-color:#12c98c; background:#e7faf2; color:#0d7a51; font-weight:800;}
#gptlab .opt.wrong{border-color:#f0446a; background:#fff0f3; color:#c02b4e;}
#gptlab .opt:disabled{cursor:default;}
#gptlab .quiz-fb{display:none; margin-top:12px; font-size:13px; line-height:1.7; border-radius:14px; padding:10px 14px;}
#gptlab .quiz-fb.show{display:block;}
#gptlab .quiz-fb.ok{background:#e7faf2; color:#0d7a51;}
#gptlab .quiz-fb.no{background:#fff0f3; color:#c02b4e;}
#gptlab .l-nav{display:flex; gap:10px; margin-top:18px;}
#gptlab .l-nav button{flex:1; border:none; border-radius:16px; padding:13px; font-size:15px; font-weight:800;
  cursor:pointer; transition:.15s;}
#gptlab .l-nav button:active{transform:scale(.97);}
#gptlab .btn-next{background:linear-gradient(135deg,#2f6bff,#1e4fd6); color:#fff;
  box-shadow:0 8px 20px -8px rgba(47,107,255,.7);}
#gptlab .btn-prev{background:#eef1fa; color:#5a638a;}
#gptlab .btn-next.done{background:linear-gradient(135deg,#12c98c,#0ea876); box-shadow:0 8px 20px -8px rgba(18,201,140,.6);}
#gptlab .l-close{position:absolute; top:16px; right:16px; background:#eef1fa; border:none;
  color:#5a638a; font-size:13px; padding:8px 14px; border-radius:30px; cursor:pointer; font-weight:700;}
#gptlab .l-close:hover{background:#e1e6f6;}
#gptlab .panel{background:#fff; border-radius:16px; border:1px solid #eef2fc; padding:14px 16px;
  box-shadow:0 6px 18px -6px rgba(47,107,255,.16);}
#gptlab .panel-title{font-size:14px; font-weight:800; color:#0d2259; margin-bottom:12px; display:flex; align-items:center; gap:8px;}
#gptlab .panel-title .badge{font-size:11px; background:#e8f0ff; color:#1e4fd6; padding:0 10px; border-radius:30px; font-weight:800;}
#gptlab .ctrl-group{display:flex; flex-wrap:wrap; gap:8px; align-items:center; margin-top:4px;}
#gptlab .ctrl-label{font-size:13px; color:#46587d; font-weight:700;}
#gptlab .ctrl-input{width:60px; padding:5px 8px; border-radius:12px; border:2px solid #cfddfc; font-size:13px;
  text-align:center; font-weight:700; outline:none; font-family:inherit;}
#gptlab .ctrl-input:focus{border-color:#2f6bff; box-shadow:0 0 0 3px rgba(47,107,255,.15);}
#gptlab .status-bar{background:#f7f9ff; border:1px solid #e8eefb; border-radius:14px; padding:10px 14px;
  font-size:13px; color:#46587d; display:flex; flex-wrap:wrap; gap:10px 24px; margin-top:10px;}
#gptlab .status-item{display:flex; align-items:center; gap:6px;}
#gptlab .status-item .dot{width:8px; height:8px; border-radius:50%; display:inline-block;}
#gptlab .dot.green{background:#12c98c;}
#gptlab .dot.blue{background:#2f6bff;}
#gptlab .dot.orange{background:#ff9f1c;}
#gptlab .data-row{display:grid; grid-template-columns:64px 1fr; gap:4px 12px; padding:4px 0; font-size:13px;
  align-items:baseline; border-bottom:1px solid #eef3fc;}
#gptlab .data-row .label{color:#5a6d99; font-weight:700; white-space:nowrap;}
#gptlab .data-row .value{font-family:Consolas,Menlo,monospace; font-size:13px; color:#0d2259; word-break:break-all;}
#gptlab .data-row .value.highlight{background:#fff7da; padding:0 6px; border-radius:6px;}
#gptlab .data-row .value.fw{font-weight:700;}
#gptlab .scroll-data{max-height:400px; overflow-y:auto; padding-right:4px;}
#gptlab .scroll-data::-webkit-scrollbar{width:5px;}
#gptlab .scroll-data::-webkit-scrollbar-thumb{background:#c9d6f2; border-radius:10px;}
#gptlab .fmt{background:#e8f0ff; border:1px solid #cfddfc; border-radius:14px; padding:12px 15px;
  margin:10px 0; font-family:Consolas,Menlo,monospace; font-size:13px; color:#384f82; line-height:1.9;}
#gptlab .fmt b{color:#f2559d;}
#gptlab .data-list-panel{background:#fff; border:1px solid #cfddfc; border-radius:16px;
  padding:12px 10px; max-height:420px; overflow-y:auto; align-self:stretch; box-shadow:0 6px 18px -6px rgba(47,107,255,.16);}
#gptlab .data-list-panel .panel-title{font-size:13px; font-weight:800; color:#0d2259; margin-bottom:8px;
  display:flex; align-items:center; gap:6px;}
#gptlab .data-list-panel .badge{font-size:11px; background:#e8f0ff; color:#1e4fd6;
  padding:0 10px; border-radius:30px; font-weight:800;}
#gptlab .dl-row{display:flex; gap:6px; align-items:center; font-family:Consolas,Menlo,monospace; font-size:11px;
  padding:5px 8px; border-radius:9px; cursor:pointer; border:1px solid transparent; color:#46587d;}
#gptlab .dl-row:hover{background:#e8f0ff;}
#gptlab .dl-row.active{background:#e8f0ff; border-color:#2f6bff; font-weight:700;}
#gptlab .dl-idx{color:#8496bb;}
#gptlab .dl-out{color:#f2559d; margin-left:auto; white-space:nowrap;}
#gptlab .fs-btn{display:inline-flex; align-items:center; justify-content:center; width:38px; height:38px; border:none;
  border-radius:12px; background:#e8f0ff; color:#1e4fd6; font-size:19px; cursor:pointer;
  transition:.15s; line-height:1; box-shadow:0 6px 18px -6px rgba(47,107,255,.16);}
#gptlab .fs-btn:hover{background:#dce8ff; transform:scale(1.06);}
#gptlab .fs-btn:active{transform:scale(.94);}
#gptlab .net-legend{display:flex; gap:14px; align-items:center; justify-content:center; font-size:11px;
  color:#384f82; flex-wrap:wrap;}
#gptlab .net-legend .lg{display:inline-block; width:20px; height:5px; border-radius:3px;}
#gptlab .net-legend .lg.red{background:#f0446a;}
#gptlab .net-legend .lg.blue{background:#2f6bff;}
#gptlab #toast{position:fixed; left:50%; bottom:26px; transform:translateX(-50%) translateY(20px);
  background:linear-gradient(135deg,#0d2259,#223a82); color:#fff; padding:12px 22px; border-radius:30px;
  font-size:13px; font-weight:600; z-index:99; opacity:0; pointer-events:none; transition:.3s;
  max-width:86vw; text-align:center; box-shadow:0 16px 40px -12px rgba(13,24,54,.6);}
#gptlab #toast.show{opacity:1; transform:translateX(-50%) translateY(0);}
#gptlab .foot{text-align:center; color:#5a6d99; font-size:12px; margin-top:26px; line-height:1.9;
  background:rgba(255,255,255,.75); border:1px solid #eef2fc; border-radius:16px; padding:14px;}
@media (max-width:640px){#gptlab .topbar{flex-wrap:wrap;}
#gptlab .hero h1{font-size:25px;}
#gptlab .hero .big{font-size:60px;}
#gptlab #app,
#gptlab .page{padding:10px 10px 70px;}}
#gptlab #app{max-width:1100px;}
#gptlab .hero{text-align:center; padding:26px 10px 10px;}
#gptlab .hero .big{font-size:80px; display:inline-block; animation:float 3.4s ease-in-out infinite;
    filter:drop-shadow(0 10px 22px rgba(47,107,255,.22));}
#gptlab .hero h1{color:#0d2259; font-size:28px; margin:8px 0 6px;}
#gptlab .hero .tagline{color:#5469a0; font-size:15px;}
#gptlab .fmt{background:#e8f0ff; border:1px solid #cfddfc; border-radius:14px; padding:12px 15px; margin:10px 0;
    font-family:Consolas,Menlo,monospace; font-size:13px; color:#384f82; line-height:1.9;}
#gptlab .fmt b{color:#f2559d;}
#gptlab .ann-card{position:relative;}
#gptlab .fs-btn{position:absolute; top:12px; right:14px; width:38px; height:38px; border:none; border-radius:12px;
    background:#eef3ff; color:#2f4a8a; font-size:19px; cursor:pointer; transition:.15s; line-height:1;
    box-shadow:0 2px 6px rgba(90,107,255,.15);}
#gptlab .fs-btn:hover{background:#dbe7ff; transform:scale(1.06);}
#gptlab .fs-btn:active{transform:scale(.94);}
#gptlab .ann-card:fullscreen{width:100vw; height:100vh; overflow-y:auto; border-radius:0; border:none; margin:0;
    background:linear-gradient(180deg,#eef4ff 0%,#f7fbff 100%);}
#gptlab .ann-card:fullscreen .trainer-grid{grid-template-columns:280px 1fr 360px;}
#gptlab .ann-card:fullscreen .trainer-side{display:flex;}
#gptlab .trainer-grid{display:grid; grid-template-columns:220px 1fr; gap:16px; margin-top:8px;}
#gptlab .trainer-side{display:none; flex-direction:column; gap:10px; min-width:0;}
@media (max-width:860px){#gptlab .trainer-grid{grid-template-columns:1fr;}}
#gptlab .trainer-main{min-width:0;}
#gptlab .left-col{display:flex; flex-direction:column; gap:16px; min-width:0; max-height:900px;}
#gptlab .data-list-panel{background:#fff; border:2px solid #eaf3ff; border-radius:18px; padding:12px 10px;
    max-height:520px; overflow-y:auto; flex-shrink:0;}
#gptlab .data-list-panel .panel-title{font-size:13px; font-weight:800; color:#2f4a8a; margin-bottom:8px;
    display:flex; align-items:center; gap:6px;}
#gptlab .data-list-panel .badge{font-size:11px; background:#eef3ff; color:#5a6b96; padding:0 10px; border-radius:30px; font-weight:700;}
#gptlab .dl-row{display:flex; gap:6px; align-items:center; font-size:12px;
    padding:5px 8px; border-radius:8px; cursor:pointer; border:1px solid transparent;}
#gptlab .dl-row:hover{background:#f0f6ff;}
#gptlab .dl-row.active{background:#eef3ff; border-color:#7c8bff; font-weight:700;}
#gptlab .dl-idx{color:#8a93b8; width:34px; flex-shrink:0; font-family:Consolas,Menlo,monospace; font-size:10px;}
#gptlab .dl-ctx{color:#3a4470; font-family:Consolas,Menlo,monospace; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
#gptlab .dl-out{color:#c44a8f; margin-left:auto; white-space:nowrap; font-family:Consolas,Menlo,monospace; font-weight:800;}
#gptlab .dict-panel{padding:12px 14px; margin-bottom:0; display:flex; flex-direction:column; min-height:0;}
#gptlab .dict-box{flex:1; min-height:0; overflow-y:auto; background:#f8fafc; border:1px solid #eef3f8;
    border-radius:12px; padding:8px;}
#gptlab .dict-row{display:grid; grid-template-columns:repeat(4,1fr); gap:4px;}
#gptlab .dict-tile{text-align:center; background:#fff; border:1px solid #e6edf4; border-radius:8px;
    padding:3px 2px 2px; cursor:pointer; transition:transform .12s;}
#gptlab .dict-tile:hover{transform:translateY(-2px); border-color:#7c8bff; box-shadow:0 2px 6px rgba(124,139,255,.25);}
#gptlab .dict-tile .c{font-size:16px; font-weight:800; color:#2f4a8a; line-height:1.2;}
#gptlab .dict-tile em{display:block; font-style:normal; font-size:9px; color:#8a93b8; font-weight:600;}
#embTip{position:fixed; z-index:9999; pointer-events:none; background:#2f3557; color:#fff;
    border-radius:12px; padding:10px 12px; font-size:11px; box-shadow:0 6px 20px rgba(31,41,55,.35); width:214px;
    left:0; top:0; display:none;}
#embTip .t-ch{font-size:24px; font-weight:800; color:#ffd76a;}
#embTip .t-id{color:#aab4d0; font-size:10px; margin-left:6px;}
#embTip .t-lbl{font-size:10px; color:#aab4d0; margin:6px 0 4px;}
#embTip .t-bar{display:flex; gap:2px; align-items:flex-end; height:26px;}
#embTip .t-bar i{flex:1; border-radius:3px 3px 0 0;}
#embTip .t-val{display:grid; grid-template-columns:repeat(4,1fr); gap:2px 3px; margin-top:6px;}
#embTip .t-val b{text-align:center; font-family:Consolas,Menlo,monospace; font-size:9.5px; color:#cfd6ea; font-weight:600;}
#gptlab .net-panel{padding:12px 14px;}
#gptlab .gpt-layers{display:flex; flex-direction:row; align-items:flex-start; gap:2px;
    justify-content:flex-start; padding:4px 0; overflow-x:auto;}
#gptlab .layer{flex:0 0 auto; background:#f8fafc; border:2px solid #e6edf4; border-radius:12px; padding:6px 4px;}
#gptlab .layer-col{display:flex; flex-direction:column; gap:4px;}
#gptlab .layer-col .l-down{transform:none;}
#gptlab .layer.merge-layer{background:linear-gradient(180deg,#f3f6ff,#e9efff); border-color:#c7d4ff;}
#gptlab .l-down.plus{font-size:16px; font-weight:800; color:#7c8bff; line-height:1;}
#gptlab .l-down.eq{font-size:16px; font-weight:800; color:#7c8bff; line-height:1;}
#gptlab .layer-title{font-size:11px; font-weight:800; color:#2f4a8a; text-align:center; margin-bottom:5px; line-height:1.35;}
#gptlab .layer-title .ln{display:inline-flex; width:17px; height:17px; border-radius:50%; background:#7c8bff; color:#fff; font-size:10px; align-items:center; justify-content:center; margin-right:4px; vertical-align:middle;}
#gptlab .layer-title.lt7{font-size:10px;}
#gptlab .layer-title em{display:block; font-style:normal; color:#8a93b8; font-weight:600; margin:2px 0 0; font-size:9px;}
#gptlab .layer .sub{font-size:8px; color:#8a93b8;}
#gptlab .l-down{color:#94a3b8; font-size:12px; line-height:1; align-self:center; flex-shrink:0;
    display:inline-block; transform:rotate(-90deg);}
#gptlab .layer .chars{flex-direction:column; align-items:center; min-width:62px;}
#gptlab .layer .cands{align-items:center; min-width:62px;}
#gptlab .layer .char-tile{width:20px; height:20px; font-size:11px;}
#gptlab .layer .cand-row .ch{width:20px; height:20px; font-size:11px;}
#gptlab .layer .cand-row{gap:3px;}
#gptlab .layer .cand-row .p{font-size:8px;}
#gptlab .layer .att-grid{grid-template-columns:repeat(6,20px);}
#gptlab .layer .att-grid .a{width:20px; height:20px; font-size:8px;}
#gptlab .emb-grid{display:flex; flex-direction:column; gap:2px; align-items:center;}
#gptlab .emb-row{display:flex; gap:2px; justify-content:center;}
#gptlab .emb-lbl{width:18px; flex-shrink:0; text-align:center; font-size:10px; font-weight:800; color:#2f4a8a;}
#gptlab .emb-lbl .l-ch{display:block; font-size:11px; line-height:1.1; font-weight:800; color:#2f4a8a;}
#gptlab .emb-lbl .l-pos{display:block; font-size:7px; line-height:1.1; color:#8a93b8; font-weight:600;}
#gptlab .emb-row.emb-col{flex-direction:column;}
#gptlab .emb-cell{width:10px; height:10px; border-radius:3px; border:1px solid rgba(0,0,0,.06);}
#gptlab .heads-row{display:flex; gap:16px; justify-content:center; flex-wrap:wrap;}
#gptlab .layer .heads-row{flex-direction:column; gap:6px;}
#gptlab .layer .att-legend{max-width:134px;}
#gptlab .head-box{display:flex; flex-direction:column; align-items:center; gap:4px;}
#gptlab .head-lbl{font-size:10px; font-weight:800; color:#7c3aed;}
#gptlab .qkv-row{display:flex; gap:5px; justify-content:center;}
#gptlab .head-cols{display:flex; gap:8px; align-items:flex-start; justify-content:center;}
#gptlab .qkv-col{display:flex; flex-direction:column; gap:4px;}
#gptlab .att-mid{display:flex; flex-direction:column; align-items:center; gap:3px;}
#gptlab .att-out{display:flex; flex-direction:column; align-items:center; gap:3px;}
#gptlab .head-lbl-sm{font-size:9px; font-weight:800; color:#7c3aed;}
#gptlab .pred-grid{display:flex; flex-direction:column; gap:3px; align-items:center;}
#gptlab .pred-row{display:flex; gap:2px; align-items:center;}
#gptlab .pred-strip{width:104px; height:14px; border-radius:4px; border:1px solid rgba(0,0,0,.06);}
#gptlab .qkv{display:flex; flex-direction:column; align-items:center; gap:2px;}
#gptlab .qkv-lbl{font-size:9px; font-weight:800; color:#7c3aed;}
#gptlab .qkv-op{font-size:8px; color:#8a93b8; margin:2px 0;}
#gptlab .emb-grid.sm{gap:1px;}
#gptlab .emb-grid.sm .emb-row{gap:1px;}
#gptlab .emb-grid.sm .emb-cell{width:9px; height:9px;}
#gptlab .att-wrap{display:flex; flex-direction:column; gap:1px;}
#gptlab .att-row{display:flex; gap:1px;}
#gptlab .att-lbl{width:15px; flex-shrink:0; text-align:center; font-size:8px; font-weight:700; color:#2f4a8a; line-height:9px;}
#gptlab .att-toplbl{width:9px; flex-shrink:0; text-align:center; font-size:7px; font-weight:700; color:#8a93b8; line-height:9px;}
#gptlab .att-corner{width:15px; flex-shrink:0;}
#gptlab .att-row .a{width:9px; height:9px; border-radius:2px; display:flex; align-items:center; justify-content:center; font-size:6px; color:#fff;}
#gptlab .gpt-box{display:flex; flex-direction:column; align-items:center; gap:6px; background:#f8fafc;
    border:2px solid #e6edf4; border-radius:12px; padding:8px 10px; min-width:0;}
#gptlab .gpt-box .lbl{font-size:11px; font-weight:800; color:#2f4a8a;}
#gptlab .gpt-box .sub{font-size:9px; color:#8a93b8;}
#gptlab .chars{display:flex; gap:4px;}
#gptlab .chars.col{flex-direction:column; gap:3px;}
#gptlab .char-tile{width:34px; height:34px; border-radius:8px; background:#fff; border:2px solid #7c8bff;
    display:flex; align-items:center; justify-content:center; font-size:17px; font-weight:800; color:#2f4a8a;}
#gptlab .char-tile .pos{position:absolute;}
#gptlab .att-grid{display:grid; grid-template-columns:repeat(6,26px); gap:2px; background:#eef1f8; padding:2px; border-radius:6px;}
#gptlab .att-grid .a{width:26px; height:26px; border-radius:4px; display:flex; align-items:center; justify-content:center; font-size:9px; color:#fff;}
#gptlab .att-legend{font-size:9px; color:#8a93b8; margin-top:2px;}
#gptlab .cands{display:flex; flex-direction:column; gap:3px; min-width:66px;}
#gptlab .cand-row{display:flex; align-items:center; gap:5px; font-size:12px; font-weight:700; color:#3a4470;}
#gptlab .cand-row .ch{width:24px; height:24px; border-radius:6px; background:#fff; border:2px solid #ec4899; color:#c44a8f;
    display:flex; align-items:center; justify-content:center; font-size:14px; font-weight:800;}
#gptlab .cand-row .ch.best{background:#ec4899; color:#fff;}
#gptlab .cand-row .bar{height:12px; border-radius:6px; background:linear-gradient(90deg,#ffd76a,#ff9a3d);}
#gptlab .cand-row .p{font-family:Consolas,Menlo,monospace; font-size:10px; color:#8a93b8;}
#gptlab .trainer-side .scroll-data{max-height:none; overflow-y:visible;}
#gptlab .side-panel{padding:12px 14px;}
#gptlab .side-panel .status-bar{background:transparent; border:none; border-top:1px solid #e6edf4; border-radius:0;
    padding:10px 0 0; margin:0;}
#gptlab #lossCanvas{width:100%; height:170px; display:block; border-radius:14px; margin-top:8px; background:#f8fafc;
    border:1px solid #e6edf4;}
#gptlab .gen-wrap{display:flex; flex-wrap:wrap; gap:18px; align-items:flex-start;}
#gptlab .gen-left{flex:1; min-width:300px;}
#gptlab .gen-input{display:flex; gap:8px; flex-wrap:wrap; align-items:center; margin-bottom:12px;}
#gptlab .gen-input input{flex:1; min-width:160px; padding:11px 14px; font-size:16px; font-weight:800; color:#2f4a8a;
    border:3px solid #dbe7ff; border-radius:16px; outline:none; font-family:inherit;}
#gptlab .gen-input input:focus{border-color:#7c8bff;}
#gptlab .gen-btns{display:flex; gap:8px; flex-wrap:wrap;}
#gptlab .poem-box{background:linear-gradient(180deg,#fffdf5,#fff3cf); border:3px solid #ffd76a; border-radius:20px;
    padding:20px 24px; min-height:120px; font-size:22px; font-weight:800; color:#2f4a8a; line-height:2;
    letter-spacing:2px; font-family:"KaiTi","STKaiti","KaiTi_GB2312",serif;}
#gptlab .poem-box .caret{display:inline-block; width:2px; height:22px; background:#ff9a3d; vertical-align:-3px; animation:blink .8s step-end infinite;}
@keyframes blink { 50%{opacity:0} }
#gptlab .gen-side{flex:1; min-width:280px;}
#gptlab .gen-att{margin-top:12px;}
#gptlab .muted{color:#8a93b8; font-size:12px;}

/* ===== 内嵌容器（非作用域） ===== */
#gptlab { background:#eef4ff; border-radius:18px; padding:14px 14px 8px; }
#gptlab .gpt-head { display:flex; align-items:center; flex-wrap:wrap; gap:8px; margin:2px 4px 12px; }
#gptlab .gpt-head .gi { font-size:24px; }
#gptlab .gpt-head b { color:#0d2259; font-size:17px; }
#gptlab .gpt-head .gs { font-size:12px; color:#8496bb; }

/* ===== 布局修整：两列铺满、左列面板均分高度 ===== */
#gptlab .trainer-grid { grid-template-columns: 260px 1fr; }
@media (max-width:900px){ #gptlab .trainer-grid { grid-template-columns:1fr; } }
#gptlab .left-col { align-self: stretch; }
#gptlab .left-col > .data-list-panel,
#gptlab .left-col > .dict-panel { flex: 1 1 0; min-height: 0; max-height: none; overflow-y: auto; }
#gptlab #toast { position: fixed; left: 50%; bottom: 26px; transform: translateX(-50%) translateY(20px);
  background: linear-gradient(135deg,#0d2259,#223a82); color:#fff; padding:12px 22px; border-radius:30px;
  font-size:13px; font-weight:600; z-index:99; opacity:0; pointer-events:none; transition:.3s;
  max-width:86vw; text-align:center; box-shadow:0 16px 40px -12px rgba(13,24,54,.6); }
#gptlab #toast.show { opacity:1; transform: translateX(-50%) translateY(0); }

/* ===== 两列布局：左侧 训练数据集/字典，右侧 网络 7 层（压缩宽度全部可见） ===== */
#gptlab .trainer-grid { grid-template-columns: 188px 1fr; gap: 8px; }
#gptlab .left-col { flex-direction: column; gap: 10px; align-items: stretch; max-height: none; }
#gptlab .left-col > .data-list-panel,
#gptlab .left-col > .dict-panel { flex: 1 1 0; min-width: 0; min-height: 0; max-height: none; overflow-y: auto; }
@media (max-width: 860px) {
  #gptlab .trainer-grid { grid-template-columns: 1fr; }
  #gptlab .left-col { flex-direction: column; }
}
#gptlab .trainer-side { display: none; }
#gptlab .trainer-main { min-width: 0; }
#gptlab .net-panel { width: 100%; padding: 10px 10px; overflow-x: auto; }
#gptlab .gpt-layers { width: max-content; margin: 0 auto; gap: 0; }
#gptlab .gpt-layers > .l-down { font-size: 7px; width: 6px; margin: 0 1px; flex-shrink: 0; }

/* --- 压缩各层单元格/间距，使 7 层在右列内横向全部显示 --- */
#gptlab .layer { padding: 4px 2px; border-width: 1px; }
#gptlab .layer-title { margin-bottom: 3px; }
#gptlab .layer .sub { font-size: 7px; }
#gptlab .layer .chars { min-width: 40px; gap: 2px; }
#gptlab .layer .char-tile { width: 15px; height: 15px; font-size: 9px; border-radius: 5px; }
#gptlab .emb-grid { gap: 2px; }
#gptlab .emb-row { gap: 1px; }
#gptlab .emb-cell { width: 7px; height: 7px; border-radius: 2px; }
#gptlab .emb-lbl { width: 12px; font-size: 9px; }
#gptlab .emb-lbl .l-ch { font-size: 10px; }
#gptlab .emb-lbl .l-pos { font-size: 6px; }
#gptlab .emb-grid.sm { gap: 1px; }
#gptlab .emb-grid.sm .emb-row { gap: 1px; }
#gptlab .emb-grid.sm .emb-cell { width: 6px; height: 6px; }
#gptlab .head-cols { gap: 4px; }
#gptlab .head-box { gap: 3px; }
#gptlab .qkv { gap: 1px; }
#gptlab .qkv-col { gap: 2px; }
#gptlab .att-mid { gap: 2px; }
#gptlab .att-out { gap: 2px; }
#gptlab .att-row { gap: 1px; }
#gptlab .att-lbl { width: 12px; font-size: 7px; line-height: 7px; }
#gptlab .att-toplbl { width: 7px; font-size: 6px; line-height: 7px; }
#gptlab .att-corner { width: 12px; }
#gptlab .att-row .a { width: 6px; height: 6px; border-radius: 1px; }
#gptlab .att-legend { font-size: 8px; }
#gptlab .pred-grid { gap: 2px; }
#gptlab .pred-row { gap: 1px; }
#gptlab .pred-strip { width: 70px; height: 11px; }
#gptlab .layer .cands { min-width: 40px; gap: 2px; }
#gptlab .layer .cand-row { gap: 2px; }
#gptlab .layer .cand-row .ch { width: 15px; height: 15px; font-size: 9px; border-radius: 5px; }
#gptlab .layer .cand-row .p { font-size: 7px; }
#gptlab .head-lbl { font-size: 9px; }
#gptlab .head-lbl-sm { font-size: 8px; }
#gptlab .qkv-op { font-size: 7px; }
