/* 《计算机图形学》实验五 · 三维模型观察台 · 页面样式 */
:root{
  --bg:#f4f7fb;
  --panel:#ffffff;
  --ink:#1d2738;
  --muted:#6b7a8f;
  --line:#dbe3ee;
  --blue:#2563c9;
  --blue-soft:#e8f0ff;
  --warn:#c2410c;
}
*{box-sizing:border-box;}
html,body{margin:0;padding:0;}
body{
  background:var(--bg);color:var(--ink);
  font-family:"Segoe UI","Microsoft YaHei","PingFang SC",system-ui,sans-serif;
  font-size:14px;line-height:1.6;
}
a{color:var(--blue);text-decoration:none;}
.header{
  display:flex;justify-content:space-between;align-items:flex-start;gap:24px;
  padding:20px 28px 16px;background:#fff;border-bottom:1px solid var(--line);
}
.eyebrow{font-size:12px;letter-spacing:.12em;color:var(--blue);text-transform:uppercase;margin-bottom:4px;}
.header h1{margin:0;font-size:22px;font-weight:600;}
.header p{margin:6px 0 0;color:var(--muted);max-width:760px;}
.return{white-space:nowrap;font-size:13px;padding:6px 12px;border:1px solid var(--line);border-radius:6px;}
.return:hover{background:var(--blue-soft);}
.workbench{
  display:flex;gap:20px;padding:20px 28px 40px;align-items:flex-start;
}
.viewport{flex:1 1 auto;min-width:0;}
.controls{width:300px;flex:0 0 300px;display:flex;flex-direction:column;gap:14px;}
.canvas-head{
  display:flex;justify-content:space-between;align-items:center;
  background:#fff;border:1px solid var(--line);border-bottom:none;border-radius:8px 8px 0 0;
  padding:10px 14px;font-size:13px;
}
.canvas-head span{color:var(--muted);font-size:12px;}
canvas#gl-canvas{
  display:block;width:100%;height:min(62vh,620px);min-height:360px;
  background:#f8fbfe;border:1px solid var(--line);border-radius:0 0 8px 8px;
  outline:none;cursor:grab;touch-action:none;
}
canvas#gl-canvas:active{cursor:grabbing;}
canvas#gl-canvas:focus{box-shadow:0 0 0 2px var(--blue-soft);}
.canvas-note{
  margin-top:10px;font-size:12px;color:var(--muted);background:#fff;border:1px dashed var(--line);
  border-radius:6px;padding:8px 12px;
}
.message{
  margin-top:10px;padding:9px 12px;border-radius:6px;font-size:13px;
  background:var(--blue-soft);color:#1b4ba3;border:1px solid #c9dcff;
}
.message.warn{background:#fff1e8;color:var(--warn);border-color:#f3c9ae;}
.stat-grid{
  margin-top:12px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;
  background:var(--line);border:1px solid var(--line);border-radius:8px;overflow:hidden;
}
.stat-grid>div{background:#fff;padding:9px 12px;min-width:0;}
.stat-grid span{display:block;font-size:11px;color:var(--muted);letter-spacing:.04em;}
.stat-grid strong{display:block;font-weight:500;font-size:12.5px;word-break:break-word;}
.panel{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:14px;}
.panel h2{margin:0 0 10px;font-size:14px;font-weight:600;color:#243b5e;letter-spacing:.02em;}
.fields{display:grid;grid-template-columns:1fr 1fr;gap:8px;}
.field{display:flex;flex-direction:column;gap:3px;font-size:12px;color:var(--muted);}
.field input[type=number]{
  width:100%;padding:6px 8px;border:1px solid var(--line);border-radius:5px;
  font-size:13px;color:var(--ink);background:#fbfdff;
}
.field input[type=number]:focus{outline:none;border-color:var(--blue);background:#fff;}
.block-label{display:block;font-size:12px;color:var(--muted);margin-bottom:10px;}
.block-label select,.block-label input[type=file]{
  display:block;width:100%;margin-top:5px;padding:6px 8px;border:1px solid var(--line);
  border-radius:5px;background:#fbfdff;font-size:12.5px;color:var(--ink);
}
.preset-row{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-bottom:10px;}
.preset-row button,.action-panel button{
  padding:7px 6px;border:1px solid var(--line);border-radius:6px;background:#f7faff;
  font-size:12.5px;color:#243b5e;cursor:pointer;
}
.preset-row button:hover,.action-panel button:hover{border-color:var(--blue);color:var(--blue);}
.check{display:flex;align-items:center;gap:7px;font-size:12.5px;color:#33465f;margin-top:6px;cursor:pointer;}
.small{font-size:11.5px;color:var(--muted);margin:10px 0 0;line-height:1.65;}
.action-panel{display:grid;grid-template-columns:1fr 1fr;gap:8px;}
.action-panel button.primary{background:var(--blue);border-color:var(--blue);color:#fff;}
.action-panel button.primary:hover{background:#1e51a8;}
.action-panel .help-link{
  grid-column:span 2;text-align:center;font-size:12px;padding:6px;border:1px dashed var(--line);border-radius:6px;
}
kbd{
  display:inline-block;padding:1px 5px;border:1px solid #c7d3e2;border-bottom-width:2px;border-radius:4px;
  background:#f6f9fe;font-family:inherit;font-size:11px;color:#2c4364;
}
/* 首页 */
.hero{padding:34px 28px 10px;}
.hero h1{font-size:26px;margin:0 0 8px;}
.hero p{color:var(--muted);max-width:820px;margin:0;}
.formula{
  margin:18px 0 0;padding:14px 18px;background:#fff;border:1px solid var(--line);border-left:4px solid var(--blue);
  border-radius:6px;font-family:"Cascadia Mono",Consolas,"Courier New",monospace;font-size:14px;color:#243b5e;
}
.cards{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:16px;padding:22px 28px 10px;
}
.card{
  background:#fff;border:1px solid var(--line);border-radius:10px;padding:16px 18px;
  display:flex;flex-direction:column;gap:8px;transition:box-shadow .15s,border-color .15s;
}
.card:hover{border-color:#bcd1f4;box-shadow:0 6px 18px rgba(31,74,143,.08);}
.card .tag{display:flex;justify-content:space-between;align-items:center;}
.card .tag b{font-size:15px;color:#1b3560;}
.card .tag em{font-style:normal;font-size:11.5px;color:var(--blue);background:var(--blue-soft);padding:2px 8px;border-radius:20px;}
.card p{margin:0;color:var(--muted);font-size:12.5px;flex:1;}
.card a.go{font-size:12.5px;font-weight:600;}
.footer{padding:16px 28px 40px;color:var(--muted);font-size:12px;}
.checklist{margin:8px 28px 0;background:#fff;border:1px solid var(--line);border-radius:10px;padding:16px 20px;}
.checklist h2{font-size:14px;margin:0 0 8px;}
.checklist ul{margin:0;padding-left:18px;color:#3a4d68;font-size:12.5px;}
@media(max-width:980px){
  .workbench{flex-direction:column;}
  .controls{width:100%;flex:1 1 auto;}
  .stat-grid{grid-template-columns:1fr 1fr;}
}
