
.stage{position:relative;height:100vh;min-height:760px;max-height:1100px;overflow:hidden;border-bottom:1px solid var(--line)}
.stage-view{position:absolute;inset:0}
#gl{width:100%;height:100%;display:block;cursor:grab;touch-action:pan-y}
#gl.grabbing{cursor:grabbing}
.stage-shade{position:absolute;inset:0;pointer-events:none;background:
  linear-gradient(90deg,rgba(10,14,19,.9) 0%,rgba(10,14,19,.5) 24%,rgba(10,14,19,0) 42%),
  linear-gradient(0deg,rgba(10,14,19,.95) 0%,rgba(10,14,19,0) 34%)}
.stage.swap .stage-view{animation:swap .7s ease}
.stage.frozen .stage-view{animation:none}
@keyframes swap{from{opacity:.0;filter:blur(6px)}to{opacity:1;filter:none}}
.stage-copy{position:absolute;left:24px;top:calc(var(--nav-h) + 4vh);width:min(600px,44vw);z-index:3}
.panel{position:absolute;z-index:3;background:var(--panel);border:1px solid var(--line);backdrop-filter:blur(8px);padding:14px 16px}
.panel-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}
.panel-head.sub{margin-top:12px;padding-top:10px;border-top:1px solid var(--line)}
.panel-label{font-family:var(--mono);font-size:11px;letter-spacing:.1em;color:var(--muted)}
.chip{font-family:var(--mono);font-size:11px;letter-spacing:.08em;color:#0a0e13;background:var(--cyan);padding:2px 8px;font-weight:700}
.deck-info h2{font-size:19px;margin:0 0 2px;letter-spacing:-.01em}
.panel-summary{margin:0 0 8px;color:var(--muted);font-size:13px}
.product-chips{list-style:none;margin:0 0 10px;padding:0;display:flex;flex-wrap:nowrap;overflow:hidden;gap:5px}
.product-chips li{font-family:var(--mono);font-size:10.5px;border:1px solid var(--line2);padding:2px 6px;color:#c8d5e0;white-space:nowrap;flex:0 0 auto}
.step-box{border-left:2px solid var(--accent);padding:2px 0 2px 12px}
.step-box h3{margin:0;font-size:16px}
.step-box p{margin:2px 0 0;color:#b9c6d2;font-size:13px;min-height:3.1em}
.panel-data{right:24px;top:calc(var(--nav-h) + 20px);width:300px;max-height:calc(100% - var(--nav-h) - 20px - var(--deck-h,300px) - 28px);overflow:hidden}
.live{font-family:var(--mono);font-size:10px;color:var(--ok);display:flex;align-items:center;gap:6px;letter-spacing:.14em}
.live i{width:6px;height:6px;border-radius:50%;background:var(--ok);animation:blink 1.4s infinite}
@keyframes blink{50%{opacity:.25}}
.stat{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:6px 0;border-top:1px solid var(--line);font-size:13px}
.stat-label{color:var(--muted)}
.stat-value{font-family:var(--mono);font-weight:700;font-size:15px;font-variant-numeric:tabular-nums;white-space:nowrap}
.stat-value small{font-weight:400;font-size:11px;color:var(--muted);margin-left:4px}
.stat.warn .stat-value{color:var(--warn)} .stat.ok .stat-value{color:var(--ok)} .stat.accent .stat-value{color:var(--accent)} .stat.cyan .stat-value{color:var(--cyan)}
.issues{list-style:none;margin:0;padding:0;display:grid;gap:5px}
.issue{display:grid;grid-template-columns:auto 1fr;gap:8px;font-size:12.5px;align-items:start;color:#c8d5e0}
.issue b{font-family:var(--mono);font-size:10px;padding:1px 6px;border:1px solid currentColor;font-weight:700;margin-top:2px}
.issue.warn b{color:var(--warn)} .issue.ok b{color:var(--ok)} .issue.info b{color:var(--cyan)}
.demo-note{font-size:11px;line-height:1.4;color:var(--dim);margin-right:auto;margin-left:14px;min-width:0;word-break:keep-all}
.deck{position:absolute;left:24px;right:24px;bottom:16px;z-index:4}
.scene-tabs{display:flex;gap:2px}
.scene-tab{flex:1;display:grid;grid-template-columns:auto 1fr;grid-template-areas:"no tag" "no title";column-gap:10px;text-align:left;padding:8px 12px;background:rgba(12,18,25,.7);border:1px solid var(--line);border-bottom:0;color:var(--muted);min-width:0}
.scene-tab-no{grid-area:no;font-family:var(--mono);font-size:18px;font-weight:700;align-self:center;color:var(--dim)}
.scene-tab-tag{grid-area:tag;font-family:var(--mono);font-size:10px;letter-spacing:.1em}
.scene-tab-title{grid-area:title;font-size:13.5px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.scene-tab.on{background:var(--panel);color:var(--text);border-color:var(--line2);box-shadow:inset 0 2px 0 var(--accent)}
.scene-tab.on .scene-tab-no{color:var(--accent)}
.deck-body{background:var(--panel);border:1px solid var(--line2);backdrop-filter:blur(8px);padding:10px 14px 12px;display:grid;grid-template-columns:minmax(280px,400px) 1fr;gap:18px}
.deck-info{border-right:1px solid var(--line);padding-right:18px;min-width:0}
.deck-plan{min-width:0;align-self:center}
.deck-bar{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px;min-width:0}
#gantt-head{white-space:nowrap}
.deck-ctrl{display:flex;gap:4px;flex:none}
.deck-ctrl button{white-space:nowrap;font-size:12px;border:1px solid var(--line2);padding:3px 9px;color:#c8d5e0;font-family:var(--mono)}
.deck-ctrl button:hover{border-color:var(--text)}
.gantt{position:relative;display:grid;gap:1px;--gl:206px;--gr:50px}
.g-row{display:grid;grid-template-columns:24px 170px 1fr 44px;gap:6px;align-items:center;text-align:left;font-size:12.5px;color:var(--dim);padding:1px 0}
.g-no{font-family:var(--mono);font-size:11px}
.g-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.g-track{position:relative;height:9px;background:repeating-linear-gradient(90deg,transparent 0 calc(5% - 1px),var(--line) calc(5% - 1px) 5%)}
.g-bar{position:absolute;top:0;bottom:0;background:#1b2733;border:1px solid var(--line2)}
.g-fill{display:block;height:100%;width:0;background:var(--cyan)}
.g-state{font-family:var(--mono);font-size:11px;text-align:right}
.g-row.on{color:var(--text)} .g-row.on .g-fill{background:var(--accent)} .g-row.on .g-state{color:var(--accent)}
.g-row.done{color:#9fb2c4} .g-row.done .g-state{color:var(--ok)}
.g-playhead{position:absolute;top:-3px;bottom:-3px;width:1px;background:var(--accent);left:calc(var(--gl) + (100% - var(--gl) - var(--gr)) * var(--p,0));pointer-events:none;box-shadow:0 0 8px var(--accent)}
.g-playhead::before{content:"";position:absolute;top:-4px;left:-4px;border:4px solid transparent;border-top-color:var(--accent)}
.scene-progress{height:2px;background:var(--line);margin-top:8px}
.scene-progress i{display:block;height:100%;width:0;background:var(--accent)}
.fallback{display:none}
.stage.no-webgl .fallback{display:block;position:absolute;right:24px;top:40%;width:min(420px,40vw);color:var(--muted);border:1px dashed var(--line2);padding:20px}
.stage.no-webgl .panel,.stage.no-webgl .deck{display:none}
@media (min-width:900px) and (max-width:1199px){ .deck-bar{flex-wrap:wrap;row-gap:2px} .demo-note{order:3;flex-basis:100%;margin:0} }
@media (max-width:1180px){ .panel-data{width:250px} .g-row{grid-template-columns:22px 130px 1fr 40px} .gantt{--gl:164px;--gr:46px} }
@media (max-width:899px){
  .stage{height:auto;min-height:0;max-height:none;padding-top:var(--nav-h);display:flex;flex-direction:column}
  .stage-view{position:relative;inset:auto;height:min(56vh,460px);min-height:320px;order:2}
  .stage-shade{display:none}
  .stage-copy,.panel,.deck{position:relative;left:auto;right:auto;top:auto;bottom:auto;width:auto;margin:0 16px}
  .stage-copy{order:1;margin-top:20px;margin-bottom:12px}
  .deck{order:4;margin-top:0}
  .deck-body{grid-template-columns:1fr;gap:10px}
  .deck-info{border-right:0;padding-right:0;border-bottom:1px solid var(--line);padding-bottom:10px}
  .panel-data{order:5;margin-top:10px;margin-bottom:20px;max-height:none}
  .product-chips{flex-wrap:wrap}
  .demo-note{display:none}
  .scene-tabs{display:grid;grid-template-columns:1fr 1fr}
  .scene-tab{border-bottom:1px solid var(--line)}
  .g-row{grid-template-columns:20px 1fr 70px 38px} .gantt{--gl:0px;--gr:0px} .g-playhead{display:none}
  .step-box p{min-height:0}
}
@media (prefers-reduced-motion:reduce){ .stage.swap .stage-view{animation:none} .live i{animation:none} }
.scene-groups{display:flex;gap:2px;margin-bottom:2px}
.scene-group{flex:1;display:flex;align-items:baseline;gap:8px;padding:6px 12px;background:rgba(12,18,25,.55);border:1px solid var(--line);color:var(--muted);font-size:13px;font-weight:700;text-align:left;min-width:0;white-space:nowrap}
.scene-group-count{font-family:var(--mono);font-size:10px;font-weight:400;color:var(--dim)}
.scene-group:hover{color:var(--text)}
.scene-group.on{color:#0a0e13;background:var(--accent);border-color:var(--accent)}
.scene-group.on .scene-group-count{color:rgba(10,14,19,.7)}
@media (max-width:899px){
  .scene-groups{overflow-x:auto;scrollbar-width:none}
  .scene-groups::-webkit-scrollbar{display:none}
  .scene-group{flex:0 0 auto}
  .stage.grouped .scene-tabs{grid-template-columns:1fr 1fr}
}
.anno-layer{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:1}
.anno{position:absolute;left:0;top:0;width:0;height:0;will-change:transform}
.anno-mark{position:absolute;left:-5px;top:-5px;width:10px;height:10px;box-sizing:border-box;border:1px solid #fff;opacity:0;transition:opacity .15s}
.anno-mark::after{content:"";position:absolute;left:2.5px;top:2.5px;width:3px;height:3px;background:#fff}
.anno-leader{position:absolute;left:-.5px;width:1px;height:52px;bottom:5px;background:rgba(255,255,255,.85);transform:scaleY(0);transform-origin:50% 100%;transition:transform .28s ease-out .08s}
.anno.below .anno-leader{bottom:auto;top:5px;transform-origin:50% 0}
.anno-plate{position:absolute;left:0;top:0;white-space:nowrap;padding:.32em 1.05em .36em;background:rgba(24,28,34,.62);color:#fff;font:400 13px/1.35 Pretendard,"Malgun Gothic",sans-serif;letter-spacing:.04em;
  border-left:2px solid var(--anno-c,rgba(255,255,255,.9));clip-path:inset(0 0 0 100%);transition:clip-path .45s cubic-bezier(.2,.7,.2,1) .3s}
.anno-text{display:block}
.anno.in .anno-mark{opacity:1}
.anno.in .anno-leader{transform:scaleY(1)}
.anno.in .anno-plate{clip-path:inset(0 0 0 0)}
.anno-lg .anno-plate{font-size:15.5px;font-weight:500}
.anno-sm .anno-plate{font-size:11.5px}
.anno-warn .anno-plate{background:rgba(198,40,40,.82);border:1px solid rgba(255,255,255,.6)}
.anno-ok .anno-plate{background:rgba(52,128,58,.8);border:1px solid rgba(255,255,255,.6)}
.anno-amber .anno-plate{background:rgba(231,177,20,.9);color:#16181b;border:1px solid rgba(255,255,255,.6);font-weight:600}
.anno-warn .anno-mark,.anno-warn .anno-mark::after{border-color:#ff6b6b}
.anno-warn .anno-mark::after{background:#ff6b6b}
.stage.frozen .anno-mark,.stage.frozen .anno-leader,.stage.frozen .anno-plate{transition:none}
@media (max-width:899px){ .anno-leader{height:34px} .anno-plate{font-size:11.5px} .anno-lg .anno-plate{font-size:13px} }
@media (prefers-reduced-motion:reduce){ .anno-mark,.anno-leader,.anno-plate{transition:none} }
.proj{max-width:440px}
.proj-meta{display:flex;align-items:center;gap:10px;margin:0 0 10px;font-family:var(--mono);font-size:11px;letter-spacing:.12em;color:var(--muted)}
.proj-no{color:var(--accent);font-weight:700}
.proj-group:empty,.proj-tag:empty{display:none}
.proj-group::before,.proj-tag::before{content:"";display:inline-block;width:14px;height:1px;background:var(--line2);vertical-align:middle;margin-right:10px}
.proj-title{font-size:clamp(24px,2.3vw,34px);line-height:1.22;letter-spacing:-.02em;font-weight:700;margin:0 0 10px;word-break:keep-all}
.proj-desc{margin:0 0 12px;color:#b9c6d2;font-size:14.5px;line-height:1.7;word-break:keep-all}
.proj-chips{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px}
.proj-chips li{font-family:var(--mono);font-size:10.5px;letter-spacing:.04em;color:#c8d5e0;border:1px solid var(--line2);padding:2px 8px}
.proj.swap .proj-title,.proj.swap .proj-desc,.proj.swap .proj-chips{animation:projIn .6s cubic-bezier(.2,.7,.2,1) both}
.proj.swap .proj-desc{animation-delay:.08s} .proj.swap .proj-chips{animation-delay:.16s}
@keyframes projIn{from{opacity:0;transform:translateY(8px);clip-path:inset(0 0 100% 0)}to{opacity:1;transform:none;clip-path:inset(0 0 0 0)}}
.stage.frozen .proj.swap *{animation:none}
.deck-info h2,.deck-info .panel-summary,.deck-info .product-chips{display:none}
.deck-info .panel-head{margin-bottom:6px}
@media (max-width:899px){ .proj{max-width:none} .proj-title{font-size:22px} .proj-desc{font-size:14px} .proj-meta{font-family:var(--sans);letter-spacing:.02em} }
@media (prefers-reduced-motion:reduce){ .proj.swap *{animation:none} }
.deck-info .chip{display:none} .deck-info{align-self:center}
.stage.theme-light .stage-view{background:linear-gradient(180deg,#fbfcfd 0%,#e6eaee 62%)}
.stage.theme-light .anno-plate{background:rgba(255,255,255,.82);color:#1d2630;border-left-color:var(--anno-c,#5b6774);box-shadow:0 1px 3px rgba(20,30,40,.12),inset 0 0 0 1px rgba(60,75,90,.14)}
.stage.theme-light .anno-leader{background:rgba(40,52,64,.6)}
.stage.theme-light .anno-mark{border-color:#3a4652}
.stage.theme-light .anno-mark::after{background:#3a4652}
.stage.theme-light .anno-warn .anno-mark,.stage.theme-light .anno-warn .anno-mark::after{border-color:#d32f2f}
.stage.theme-light .anno-warn .anno-mark::after{background:#d32f2f}
@media (min-width:900px){
  .stage.theme-light{--panel:rgba(255,255,255,.8);--line:#d5dbe1;--line2:#b8c1ca;--text:#17202a;--muted:#55616d;--dim:#8a95a0;--cyan:#0b84b0;--ok:#21894a;--warn:#d32f2f;--accent:#e2561a;color:var(--text)}
  .stage.theme-light .stage-shade{background:
    linear-gradient(90deg,rgba(246,248,250,.92) 0%,rgba(246,248,250,.55) 24%,rgba(246,248,250,0) 42%),
    linear-gradient(0deg,rgba(236,240,243,.96) 0%,rgba(236,240,243,0) 34%)}
  .stage.theme-light .lead,.stage.theme-light .proj-desc,.stage.theme-light .step-box p{color:#3f4b57}
  .stage.theme-light .btn{background:rgba(255,255,255,.7);color:var(--text)}
  .stage.theme-light .btn-primary{background:var(--accent);color:#fff}
  .stage.theme-light .proj-chips li,.stage.theme-light .product-chips li,.stage.theme-light .issue,.stage.theme-light .deck-ctrl button{color:#3a4652}
  .stage.theme-light .panel,.stage.theme-light .deck-body{box-shadow:0 2px 14px rgba(30,45,60,.08)}
  .stage.theme-light .chip{color:#fff}
  .stage.theme-light .scene-tab{background:rgba(255,255,255,.62)}
  .stage.theme-light .scene-tab.on{background:var(--panel)}
  .stage.theme-light .scene-group{background:rgba(255,255,255,.55)}
  .stage.theme-light .scene-group.on{color:#fff;background:var(--accent)}
  .stage.theme-light .scene-group.on .scene-group-count{color:rgba(255,255,255,.8)}
  .stage.theme-light .g-bar{background:#eef1f4}
  .stage.theme-light .g-row.done{color:#55616d}
  .stage.theme-light .g-row:not(.on):not(.done){color:#5a6672}   
  .stage.theme-light .g-playhead{box-shadow:none}
}
@media (min-width:900px){
  .stage-view{bottom:calc(var(--deck-h,0px) + 22px)}
  .stage-shade{bottom:calc(var(--deck-h,0px) + 22px)}
  .deck{bottom:12px}
  .deck-body{grid-template-columns:minmax(240px,340px) 1fr;gap:16px;padding:8px 14px 10px;align-items:center}
  .deck-info .panel-head{margin-bottom:2px}
  .deck-info .step-box{padding:0 0 0 10px}
  .deck-info .step-box h3{font-size:14px}
  .deck-info .step-box p{font-size:12.5px;min-height:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .deck-bar{margin-bottom:6px}
  .gantt{display:flex;gap:3px;--gl:0px;--gr:0px}
  .g-row{flex:var(--w,4) 1 0;min-width:0;display:flex;flex-direction:column;gap:3px;padding:0;grid-template-columns:none}
  .g-row .g-no{display:none}
  .g-row .g-name{font-size:11.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .g-row .g-state{display:none}
  .g-row .g-track{height:6px;background:none}
  .g-row .g-bar{left:0 !important;width:100% !important;border:0;background:var(--line2)}
  .g-playhead{top:auto;bottom:-3px;height:12px}
  .scene-progress{margin-top:6px}
}
.stage .anno .anno-plate{background:rgba(10,14,19,.72);border:1px solid var(--anno-line,rgba(255,255,255,.85));color:var(--anno-line,#f2f5f8);box-shadow:none;font-weight:500;padding:.26em .8em .3em}
.stage .anno-plain .anno-plate{--anno-line:rgba(242,245,248,.92)}
.stage .anno-warn .anno-plate{--anno-line:#ff5a6e}
.stage .anno-ok .anno-plate{--anno-line:#4ade80}
.stage .anno-amber .anno-plate{--anno-line:#ffc53d}
.stage .anno-warn .anno-leader{background:rgba(255,90,110,.85)}
.stage .anno-ok .anno-leader{background:rgba(74,222,128,.85)}
.stage .anno-amber .anno-leader{background:rgba(255,197,61,.85)}
.stage .anno-ok .anno-mark,.stage .anno-ok .anno-mark::after{border-color:#4ade80}
.stage .anno-ok .anno-mark::after{background:#4ade80}
.stage .anno-amber .anno-mark,.stage .anno-amber .anno-mark::after{border-color:#ffc53d}
.stage .anno-amber .anno-mark::after{background:#ffc53d}
.stage.theme-light .anno .anno-plate{background:rgba(255,255,255,.85);box-shadow:0 1px 3px rgba(20,30,40,.1)}
.stage.theme-light .anno-plain .anno-plate{--anno-line:#2b3640}
.stage.theme-light .anno-warn .anno-plate{--anno-line:#d32f2f}
.stage.theme-light .anno-ok .anno-plate{--anno-line:#2e7d32}
.stage.theme-light .anno-amber .anno-plate{--anno-line:#b7791f}
