
:root{
  --bg:#0a0e13; --bg2:#0f151c; --panel:rgba(12,18,25,.82); --line:#22303d; --line2:#33475a;
  --text:#e9eef3; --muted:#8ea0b2; --dim:#5d6f81;
  --accent:#ff6a2b; --cyan:#38d6ff; --ok:#4ade80; --warn:#ff3b5c; --amber:#ffb000;
  --mono:"JetBrains Mono",ui-monospace,Consolas,monospace;
  --sans:Pretendard,"Malgun Gothic",system-ui,sans-serif;
  --nav-h:60px;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:var(--nav-h)}
body{margin:0;background:var(--bg);color:var(--text);font-family:var(--sans);line-height:1.6;-webkit-font-smoothing:antialiased;overflow-x:hidden}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
.mono{font-family:var(--mono);font-size:12px;letter-spacing:.04em;color:var(--muted)}
.nav{position:fixed;inset:0 0 auto 0;height:var(--nav-h);z-index:50;display:flex;align-items:center;gap:24px;padding:0 24px;background:rgba(10,14,19,.78);backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}
.brand{display:flex;align-items:center;gap:10px}
.brand-name{font-weight:800;font-size:18px;letter-spacing:-.01em}
.brand-sub{font-family:var(--mono);font-size:10px;letter-spacing:.18em;color:var(--dim);padding-left:10px;border-left:1px solid var(--line2)}
.nav-links{margin-left:auto;display:flex;gap:22px;font-size:14px;color:var(--muted);min-width:0;white-space:nowrap}
.nav-links a{position:relative;padding:4px 0}
.nav-links a:hover{color:var(--text)}
.nav-links a.on{color:var(--text)}
.nav-links a.on::after{content:"";position:absolute;left:0;right:0;bottom:-2px;height:2px;background:var(--accent)}
.nav-cta{background:var(--accent);color:#0a0e13;font-weight:700;font-size:14px;padding:8px 16px;flex:none}
.nav-pages{display:flex;flex:none;border:1px solid var(--line2);background:rgba(12,18,25,.7)}
.nav-pages a{position:relative;padding:7px 14px 7px 26px;font-size:13.5px;font-weight:700;color:var(--muted);white-space:nowrap;transition:color .15s,background .15s}
.nav-pages a+a{border-left:1px solid var(--line2)}
.nav-pages a::before{content:"";position:absolute;left:11px;top:50%;width:7px;height:7px;margin-top:-3.5px;border:1px solid var(--dim);transform:rotate(45deg)}
.nav-pages a:hover{color:var(--text)}
.nav-pages a.on{color:var(--text);background:rgba(255,106,43,.12);box-shadow:inset 0 -2px 0 var(--accent)}
.nav-pages a.on::before{background:var(--accent);border-color:var(--accent)}
.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}
.eyebrow{font-family:var(--mono);font-size:11px;letter-spacing:.22em;color:var(--cyan);margin:0 0 14px;display:flex;align-items:center;gap:10px}
.eyebrow::before{content:"";width:28px;height:1px;background:var(--cyan)}
h1{word-break:keep-all;font-size:clamp(32px,4vw,58px);line-height:1.12;letter-spacing:-.03em;margin:0 0 16px;font-weight:800}
h1 em{font-style:normal;color:var(--accent)}
.lead{color:#b9c6d2;font-size:16px;margin:0 0 20px;max-width:30em}
.cta-row{display:flex;gap:10px;flex-wrap:wrap}
.btn{display:inline-flex;align-items:center;padding:11px 18px;border:1px solid var(--line2);font-weight:700;font-size:14px;background:rgba(12,18,25,.6)}
.btn:hover{border-color:var(--text)}
.btn-primary{background:var(--accent);border-color:var(--accent);color:#0a0e13}
.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;color:var(--dim);margin-right:auto;margin-left:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.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}
.deck-ctrl button{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 (max-width:1320px){ .brand-sub{display:none} .nav{gap:18px} .nav-links{gap:18px;font-size:13.5px} }
@media (max-width:1100px){ .nav{gap:14px} .nav-links{gap:14px;font-size:13px;overflow-x:auto;scrollbar-width:none} .nav-links::-webkit-scrollbar{display:none} .nav-pages a{padding:7px 10px 7px 22px} .nav-pages a::before{left:9px} }
@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){
  .nav{padding:0 16px;gap:10px} .brand-sub{display:none} .nav-cta{margin-left:auto;padding:7px 12px;font-size:13px}
  .brand-name{font-size:16px} .brand{gap:8px}
  .nav-pages a{padding:6px 9px 6px 20px;font-size:12.5px} .nav-pages a::before{left:8px;width:6px;height:6px;margin-top:-3px}
  .nav-links a.on::after{bottom:0}
  .nav-links{position:absolute;top:var(--nav-h);left:0;right:0;margin:0;height:40px;align-items:center;gap:22px;padding:0 16px;overflow-x:auto;white-space:nowrap;background:rgba(10,14,19,.92);border-bottom:1px solid var(--line);scrollbar-width:none}
  .nav-links::-webkit-scrollbar{display:none}
  html{scroll-padding-top:calc(var(--nav-h) + 40px)}
  .stage{height:auto;min-height:0;max-height:none;padding-top:calc(var(--nav-h) + 40px);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}
  .lead{font-size:15px}
  .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 (max-width:380px){ .nav-cta{display:none} }
@media (prefers-reduced-motion:reduce){ html{scroll-behavior:auto} .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} }
@media (prefers-reduced-motion:reduce){ .proj.swap *{animation:none} }
.deck-info .chip{display:none} .deck-info{align-self:center}
