*{box-sizing:border-box}
body{margin:0;background:var(--paper);color:var(--ink);font-family:"Hanken Grotesk","IBM Plex Sans KR",-apple-system,"Apple SD Gothic Neo","Malgun Gothic",sans-serif;font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased}
.arch,.disp{font-family:"Fraunces","IBM Plex Sans KR",serif;font-variation-settings:"opsz" 72,"SOFT" 40;letter-spacing:-.01em}
.mono{font-family:"JetBrains Mono",ui-monospace,Menlo,monospace;font-variant-numeric:tabular-nums}
.lbl{font-family:"Hanken Grotesk","IBM Plex Sans KR",sans-serif;font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--pencil);font-weight:600}
button{font:inherit;color:inherit;cursor:pointer;background:none;border:0;padding:0}
input,select{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--red);outline-offset:2px}
a{color:inherit}
h1,h2,h3{word-break:keep-all}

/* ===== app shell ===== */
.sheet{display:grid;grid-template-columns:60px 1fr;min-height:100vh}
.strip{grid-column:1/-1;position:sticky;top:0;z-index:20;display:grid;grid-template-columns:auto 1fr auto auto auto auto;gap:14px;align-items:center;height:54px;padding:0 18px 0 0;background:color-mix(in srgb,var(--paper) 86%,transparent);backdrop-filter:blur(12px);border-bottom:1px solid var(--rule)}
.brand{display:flex;align-items:center;gap:10px;width:60px;justify-content:center;height:54px;border-right:1px solid var(--rule)}
.brand b{font-family:"Fraunces",serif;font-weight:600;font-size:17px;letter-spacing:-.02em}
.brand span{display:none}
.tabs{display:flex;gap:2px;padding-left:12px}
.tabs button{padding:6px 10px;border-radius:7px;color:var(--ink2);font-weight:500;display:flex;align-items:center;gap:6px;white-space:nowrap}
.tabs button small{font-family:"JetBrains Mono",monospace;font-size:10px;color:var(--pencil)}
.tabs button:hover{background:var(--paper2)}
.tabs button[aria-current="page"]{background:var(--panel);color:var(--ink);box-shadow:0 0 0 1px var(--rule),var(--sh)}
.prof{display:flex;background:var(--paper2);border-radius:999px;padding:3px}
.prof button{padding:4px 12px;border-radius:999px;font-size:12.5px;font-weight:600;color:var(--pencil)}
.prof button[aria-pressed="true"]{background:var(--ink);color:var(--paper)}
.kbtn{display:flex;align-items:center;gap:10px;background:var(--panel);border:1px solid var(--rule);border-radius:8px;padding:6px 8px 6px 12px;color:var(--pencil);min-width:200px}
.kbtn kbd{font-family:"JetBrains Mono",monospace;font-size:10.5px;border:1px solid var(--rule2);border-radius:4px;padding:0 5px;margin-left:auto;color:var(--ink2)}
.tg{display:flex;align-items:center;gap:8px;font-size:11px;letter-spacing:.06em;color:var(--pencil);font-weight:600}
.tg i{width:32px;height:18px;border-radius:999px;background:var(--paper2);border:1px solid var(--rule2);position:relative;display:inline-block}
.tg i::after{content:"";position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:var(--ink);transition:left .2s}
.tg[data-on="1"] i::after{left:16px}
.user{width:30px;height:30px;border-radius:50%;background:var(--red);color:#fff;display:grid;place-items:center;font-size:12px;font-weight:700}
.rail{position:sticky;top:54px;height:calc(100vh - 54px);border-right:1px solid var(--rule);display:flex;flex-direction:column;align-items:center;padding:12px 0;gap:4px;background:var(--paper)}
.rail button{width:40px;height:40px;border-radius:9px;display:grid;place-items:center;color:var(--pencil);position:relative}
.rail button:hover{background:var(--paper2);color:var(--ink)}
.rail button[aria-current="page"]{background:var(--ink);color:var(--paper)}
.rail button svg{width:20px;height:20px;stroke:currentColor;fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.rail .sp{flex:1}
.rail small{font-size:10px;color:var(--pencil);writing-mode:vertical-rl;letter-spacing:.14em;text-transform:uppercase;margin-bottom:8px}
.inner{padding:0 32px 40px;max-width:1440px;width:100%}

/* ===== sections ===== */
.sec{padding:34px 0 10px}
.sec+.sec{border-top:1px solid var(--rule);margin-top:26px}
.sec .no{display:flex;gap:12px;align-items:baseline;margin-bottom:16px}
.sec .no b{font-family:"JetBrains Mono",monospace;font-size:11px;font-weight:600;color:var(--red);background:var(--red-soft);padding:2px 8px;border-radius:5px;letter-spacing:.04em}
.sec .no span{font-size:12px;color:var(--pencil);text-transform:uppercase;letter-spacing:.06em;font-weight:600}

/* ===== hero as viewport ===== */
.hero{position:relative;min-height:560px;border-radius:16px;overflow:hidden;background:var(--panel);border:1px solid var(--rule);box-shadow:var(--sh)}
.hero>div:first-child{position:relative;z-index:2;max-width:600px;padding:44px 44px 36px;background:linear-gradient(90deg,color-mix(in srgb,var(--panel) 94%,transparent) 70%,transparent)}
.hero .axon{position:absolute;inset:0;left:30%;border:0;background:transparent;min-height:0}
.hero h1{font-family:"IBM Plex Sans KR",sans-serif;font-weight:600;font-size:clamp(34px,3.6vw,50px);line-height:1.12;letter-spacing:-.025em;margin:10px 0 16px;max-width:15ch;text-wrap:balance}
.hero h1 u{text-decoration:none;color:var(--red)}
.lede{color:var(--ink2);max-width:46ch;margin:0 0 22px;font-size:15px;word-break:keep-all}
.modesw{display:inline-flex;background:var(--paper2);border-radius:12px;padding:4px;gap:4px;margin:0 0 16px}
.modesw button{text-align:left;padding:8px 14px;border-radius:9px;display:flex;flex-direction:column;gap:0}
.modesw button b{font-weight:600;font-size:13.5px}
.modesw button span{font-size:11.5px;color:var(--pencil)}
.modesw button[aria-pressed="true"]{background:var(--panel);box-shadow:var(--sh)}
.modesw button[aria-pressed="true"] b{color:var(--red)}
.ask{display:grid;grid-template-columns:1fr auto;background:var(--panel);border:1px solid var(--rule2);border-radius:12px;padding:4px;box-shadow:var(--sh)}
.ask input{border:0;background:none;padding:12px 14px;font-size:15px;min-width:0}
.ask input::placeholder{color:var(--pencil)}
.ask button{background:var(--red);color:#fff;border-radius:9px;padding:0 18px;font-weight:600}
.ask button:hover{filter:brightness(.92)}
.sugg{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}
.sugg button{font-size:12.5px;color:var(--ink2);border:1px solid var(--rule);border-radius:999px;padding:5px 11px;background:var(--panel)}
.sugg button:hover{border-color:var(--red);color:var(--red)}
.axon canvas{width:100%;height:100%;display:block;position:absolute;inset:0}
.axon .cap{position:absolute;left:auto;right:16px;top:14px}
.axon .leg{position:absolute;right:16px;top:36px;display:flex;gap:10px}
.axon .leg button{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:600;color:var(--pencil);background:var(--panel);border:1px solid var(--rule);border-radius:999px;padding:3px 9px}
.axon .leg button[aria-pressed="true"]{color:var(--ink);border-color:var(--ink)}
.axon .leg i{width:9px;height:9px;border-radius:50%;display:inline-block}
.axon .tip{position:absolute;right:16px;bottom:14px;left:auto;max-width:46%;font-size:12px;color:var(--ink2);background:color-mix(in srgb,var(--panel) 90%,transparent);border:1px solid var(--rule);border-radius:8px;padding:8px 12px;pointer-events:none}
.axon .tip b{font-family:"JetBrains Mono",monospace;font-weight:600;color:var(--ink)}
.axon .scale{display:none}
.proftab{margin-top:26px;background:var(--panel);border:1px solid var(--rule);border-radius:12px;padding:18px 22px}
.proftab .lbl{margin-bottom:8px}
.proftab td:first-child{white-space:nowrap;font-weight:600}
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-top:14px}
.stat{background:var(--panel);border:1px solid var(--rule);border-radius:12px;padding:16px 18px}
.stat b{display:block;font-family:"Fraunces",serif;font-weight:500;font-size:34px;line-height:1;letter-spacing:-.02em;font-variation-settings:"opsz" 72}
.stat b small{font-size:12px;font-family:"JetBrains Mono",monospace;color:var(--red);font-weight:600;margin-left:8px;letter-spacing:0}
.stat span{display:block;margin-top:8px;font-size:12px;color:var(--pencil);font-weight:500}

/* ===== figures ===== */
.figs{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.fig{background:var(--panel);border:1px solid var(--rule);border-radius:12px;padding:18px 20px}
.fig h4{margin:0 0 12px;font-size:13.5px;font-weight:600;display:flex;gap:10px;align-items:baseline}
.fig h4 small{color:var(--pencil);font-weight:500;font-size:11px}
.dim svg{width:100%;height:auto;display:block;overflow:visible}
.svgfig{border:1px solid var(--rule);border-radius:12px;background:var(--panel);position:relative;padding:8px}
.svgfig svg{width:100%;height:auto;display:block;padding-top:22px}
.svgfig .cap{position:absolute;left:16px;top:12px;z-index:1}

/* ===== memo ===== */
.memo{display:grid;grid-template-columns:1fr 260px;gap:18px}
.memo>div:first-child{background:var(--panel);border:1px solid var(--rule);border-radius:12px;padding:24px 26px}
.memo .q{font-weight:600;font-size:20px;line-height:1.3;margin:0 0 14px;letter-spacing:-.01em;max-width:34ch;word-break:keep-all}
.memo .body{max-width:64ch;color:var(--ink2);font-size:14.5px}
.memo .body p{margin:0 0 10px}
.memo sup{font-family:"JetBrains Mono",monospace;font-size:10.5px;color:var(--red);margin-left:1px}
.memo .verdict{background:var(--red-soft);border-radius:8px;padding:10px 14px;margin:14px 0 16px;color:var(--ink);font-weight:500;max-width:62ch;word-break:keep-all}
.notes{background:var(--panel);border:1px solid var(--rule);border-radius:12px;padding:18px;display:flex;flex-direction:column;gap:12px;font-size:12.5px;align-self:start}
.note{display:grid;grid-template-columns:24px 1fr;gap:6px}
.note i{font-style:normal;font-family:"JetBrains Mono",monospace;color:var(--red);font-size:11px;padding-top:2px}
.note .id{font-family:"JetBrains Mono",monospace;font-size:11px;color:var(--pencil)}
.note .t{font-weight:600;color:var(--ink);line-height:1.35}
.note .m{color:var(--ink2);line-height:1.45}
.acts{display:flex;gap:8px;margin-top:6px;flex-wrap:wrap}
.acts button{border:1px solid var(--rule2);border-radius:8px;padding:6px 12px;font-size:12.5px;font-weight:500}
.acts button:hover{border-color:var(--red);color:var(--red)}
.fields{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:16px 0 14px;font-size:13px}
.fields div{background:var(--paper2);border-radius:8px;padding:8px 12px}
.fields span{display:block;font-size:10.5px;color:var(--pencil);font-weight:600;letter-spacing:.05em;text-transform:uppercase}

/* ===== tables ===== */
.tbwrap{background:var(--panel);border:1px solid var(--rule);border-radius:12px;overflow:hidden}
.tb{width:100%;border-collapse:collapse;font-size:13.5px}
.tb th{text-align:left;font-weight:600;font-size:11px;letter-spacing:.05em;text-transform:uppercase;color:var(--pencil);padding:10px 12px;border-bottom:1px solid var(--rule);background:var(--paper2)}
.tb td{padding:10px 12px;border-bottom:1px solid var(--rule);vertical-align:middle}
.tb tbody tr:last-child td{border-bottom:0}
.tb tr:hover td{background:var(--paper2)}
.tb .r{text-align:right}
.tb .id{font-family:"JetBrains Mono",monospace;font-size:12px}
.tb .t{font-weight:600}
.tb .t small{display:block;font-weight:400;color:var(--pencil);font-size:12px}
.glyph{width:34px;height:31px;vertical-align:middle;margin-right:10px}
.cty{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:8px;vertical-align:-1px}
.cty.KR{background:var(--kr)}.cty.CN{background:var(--cn)}.cty.AU{background:var(--au)}
.st{display:inline-flex;align-items:center;gap:7px;font-size:12px;font-weight:600;padding:3px 9px;border-radius:999px;background:var(--paper2);color:var(--ink2)}
.st i{width:7px;height:7px;border-radius:50%;display:inline-block;background:var(--pencil)}
.st.done i{background:var(--red)}.st.run i{background:var(--warn)}.st.wait i{background:var(--pencil)}
.st.err{background:var(--crit-soft);color:var(--crit)}.st.err i{background:var(--crit)}
.tbfoot{display:flex;justify-content:space-between;align-items:center;margin-top:10px;font-size:12px;color:var(--pencil)}
.tbfoot .filters{display:flex;gap:4px}
.tbfoot .filters button{font-size:12px;font-weight:600;padding:4px 10px;border-radius:999px;color:var(--pencil)}
.tbfoot .filters button[aria-pressed="true"]{background:var(--ink);color:var(--paper)}

/* ===== revision strip / pipeline ===== */
.rev{display:grid;grid-template-columns:repeat(5,1fr);gap:10px}
.rev div{background:var(--panel);border:1px solid var(--rule);border-radius:10px;padding:12px 14px}
.rev .k{font-size:11px;font-weight:600;letter-spacing:.05em;color:var(--pencil);text-transform:uppercase}
.rev .v{font-weight:600;margin-top:4px}
.rev .m{font-size:12px;color:var(--ink2);font-family:"JetBrains Mono",monospace;margin-top:2px}
.rev .bar{height:4px;background:var(--paper2);border-radius:99px;margin-top:10px;position:relative;overflow:hidden}
.rev .bar i{position:absolute;left:0;top:0;bottom:0;background:var(--ink);border-radius:99px}
.rev .bar i.run{background:var(--red)}

/* ===== footer (title block) ===== */
.tblock{display:flex;flex-wrap:wrap;gap:6px 26px;margin-top:40px;padding-top:16px;border-top:1px solid var(--rule);font-size:12px;color:var(--pencil)}
.tblock div{display:flex;gap:6px;align-items:baseline}
.tblock span{font-weight:600;letter-spacing:.05em;text-transform:uppercase;font-size:10.5px}
.tblock .big{font-family:"Fraunces",serif;font-size:14px!important;color:var(--ink)}

/* ===== page head ===== */
.pagehead{display:grid;grid-template-columns:1fr auto;gap:24px;align-items:end;padding:34px 0 22px}
.pagehead h2{font-family:"IBM Plex Sans KR",sans-serif;font-weight:600;font-size:clamp(26px,2.8vw,36px);line-height:1.15;letter-spacing:-.02em;margin:8px 0 8px;max-width:26ch}
.pagehead p{margin:0;color:var(--ink2);max-width:64ch;word-break:keep-all}
.tool{background:var(--panel);border:1px solid var(--rule);border-radius:12px;padding:12px 16px;min-width:290px}
.tool .lbl{margin-bottom:6px}
.tool code{font-family:"JetBrains Mono",monospace;font-size:12px;display:block;line-height:1.7;color:var(--ink2)}
.tool code b{color:var(--red);font-weight:600}
.two{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.three{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px}
.two>div:not(.svgfig):not(.drop),.three>div{background:var(--panel);border:1px solid var(--rule);border-radius:12px;padding:20px 22px}
.two>div .ruled{border-top:0}
.kv{display:grid;grid-template-columns:auto 1fr;gap:7px 16px;font-size:13px}
.kv dt{color:var(--pencil);font-size:11px;font-weight:600;letter-spacing:.05em;padding-top:2px;text-transform:uppercase}
.kv dd{margin:0}
.btn{border:1px solid var(--rule2);border-radius:9px;padding:9px 16px;font-weight:600;font-size:13px;background:var(--panel)}
.btn.fill{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.btn:hover{border-color:var(--red);color:var(--red)}
.btn.fill:hover{background:var(--red);border-color:var(--red);color:#fff}
.btn.sm{padding:5px 11px;font-size:12px}
.btnrow{display:flex;gap:8px;flex-wrap:wrap}
.hl{color:var(--red);font-weight:600}
.note-red{background:var(--red-soft);border-radius:8px;padding:10px 14px;color:var(--ink);font-weight:500;word-break:keep-all;font-size:13px}
.ruled{padding-top:0!important}
.modgrid{display:grid;gap:12px}
.modgrid a{display:block;text-decoration:none;background:var(--panel);border:1px solid var(--rule);border-radius:12px;padding:18px 18px 16px;transition:transform .15s,box-shadow .15s}
.modgrid a:hover{transform:translateY(-2px);box-shadow:var(--sh);border-color:var(--rule2)}
.modgrid .t{font-weight:600;font-size:16px;letter-spacing:-.01em;margin:6px 0 6px}
.modgrid .d{font-size:12.5px;color:var(--ink2);word-break:keep-all;line-height:1.5}
.modgrid .n{margin-top:12px;font-size:11.5px;color:var(--pencil);font-weight:500}
.modgrid .n b{color:var(--ink);font-family:"JetBrains Mono",monospace;font-weight:600}

/* ===== workspace ===== */
.statusbar{display:flex;gap:22px;flex-wrap:wrap;align-items:center;font-size:12px;padding:8px 14px;color:var(--ink2);background:var(--paper2);border-radius:9px;margin-bottom:10px}
.statusbar .dot{width:8px;height:8px;border-radius:50%;background:var(--red);display:inline-block;margin-right:8px;vertical-align:0}
.ws{display:grid;grid-template-columns:1fr 1.05fr;gap:12px;min-height:640px}
.ws>div{min-width:0;background:var(--panel);border:1px solid var(--rule);border-radius:12px;overflow:hidden;display:flex;flex-direction:column}
.targets{display:flex;border-bottom:1px solid var(--rule);background:var(--paper2)}
.targets button{flex:1;padding:10px 12px;text-align:left;display:grid;grid-template-columns:auto 1fr;gap:9px;align-items:center;border-right:1px solid var(--rule)}
.targets button:last-child{border-right:0}
.targets button[aria-pressed="true"]{background:var(--panel)}
.targets .dot{width:8px;height:8px;border-radius:50%;display:inline-block;background:var(--pencil)}
.targets .dot.on{background:var(--red)}.targets .dot.warn{background:var(--crit)}
.targets .nm{font-weight:600;font-size:12.5px}
.targets .st{font-size:10.5px;color:var(--pencil);padding:0;background:none;border-radius:0;display:block}
.templ{display:flex;gap:6px;flex-wrap:wrap;align-items:center;padding:10px 14px;border-bottom:1px solid var(--rule)}
.templ .lbl{margin-right:4px}
.templ button{border:1px solid var(--rule);border-radius:999px;padding:3px 10px;font-size:12px;color:var(--ink2)}
.templ button[aria-pressed="true"]{border-color:var(--red);color:var(--red);background:var(--red-soft)}
.log{flex:1;padding:16px 18px;display:flex;flex-direction:column;gap:14px;overflow:auto}
.msg{display:grid;grid-template-columns:34px 1fr;gap:12px;font-size:13.5px}
.msg .who{width:28px;height:28px;border-radius:50%;background:var(--paper2);display:grid;place-items:center;font-size:10px;font-weight:700;color:var(--pencil);overflow:hidden}
.msg.me .who{background:var(--ink);color:var(--paper)}
.msg .body{word-break:keep-all;line-height:1.6;padding-top:4px}
.msg .body p{margin:0 0 6px}
.trace{background:var(--paper2);border-radius:9px;padding:8px 12px;margin:6px 0 0;display:flex;flex-direction:column;gap:5px;font-size:12.5px}
.trace div{display:grid;grid-template-columns:20px 140px 1fr auto;gap:8px;align-items:baseline}
.trace i{font-style:normal;font-family:"JetBrains Mono",monospace;font-size:11px;color:var(--pencil)}
.trace .tool{border:0;padding:0;min-width:0;background:none;font-family:"JetBrains Mono",monospace;font-size:12px;border-radius:0}
.trace .r{color:var(--ink2)}
.trace .ok{font-family:"JetBrains Mono",monospace;font-size:11px;color:var(--pencil)}
.trace .ok.run{color:var(--red)}
.params{display:grid;grid-template-columns:1.3fr .7fr 1fr 1fr 1fr;gap:8px;margin:8px 0 10px}
.params label{display:block;background:var(--paper2);border-radius:8px;padding:6px 10px;font-size:10.5px;font-weight:600;letter-spacing:.04em;color:var(--pencil);text-transform:uppercase}
.params input,.params select{display:block;width:100%;margin-top:2px;border:0;background:none;font:inherit;font-family:"JetBrains Mono",monospace;font-size:13px;color:var(--ink);padding:0}
.ask2{display:grid;grid-template-columns:1fr auto;border-top:1px solid var(--rule);padding:8px;gap:8px}
.ask2 input{border:1px solid var(--rule);border-radius:9px;background:var(--paper2);padding:10px 12px;font-size:14px;min-width:0}
.ask2 button{background:var(--red);color:#fff;border-radius:9px;padding:0 16px;font-weight:600}
.ptabs{display:flex;border-bottom:1px solid var(--rule);background:var(--paper2);padding:6px 6px 0;gap:2px}
.ptabs button{padding:8px 12px;font-size:12.5px;font-weight:600;color:var(--pencil);border-radius:8px 8px 0 0}
.ptabs button[aria-selected="true"]{color:var(--ink);background:var(--panel);box-shadow:0 -1px 0 var(--rule),1px 0 0 var(--rule),-1px 0 0 var(--rule)}
.pane{padding:16px 18px;flex:1}
pre.code{margin:0;font-family:"JetBrains Mono",monospace;font-size:12px;line-height:1.6;white-space:pre;overflow-x:auto;color:var(--ink2);background:var(--paper2);border-radius:9px;padding:14px}
.diffrow{display:grid;grid-template-columns:80px 1fr;gap:10px;font-family:"JetBrains Mono",monospace;font-size:12px;padding:7px 0;border-bottom:1px solid var(--rule)}
.diffrow b{font-weight:600}.diffrow .add{color:var(--red)}
.gate{background:var(--red-soft);border-radius:10px;padding:12px 16px;display:flex;flex-wrap:wrap;gap:12px 20px;justify-content:space-between;align-items:center;margin-top:14px}
.gate .lbl{color:var(--red)}
.gate .btn{background:var(--panel)}
.gate .btn.fill{background:var(--red);border-color:var(--red);color:#fff}
.gsteps{display:flex;gap:4px;margin-top:6px;flex-wrap:wrap}
.gsteps span{font-size:11px;font-weight:600;padding:2px 8px;border-radius:999px;background:var(--panel);color:var(--pencil);white-space:nowrap}
.gsteps span[data-s="done"]{background:var(--ink);color:var(--paper)}
.gsteps span[data-s="run"]{background:var(--red);color:#fff}
.aff{margin-top:14px}
.aff .lbl{padding:8px 0 4px}
.affrow{display:grid;grid-template-columns:80px 1fr 1fr;gap:12px;padding:7px 10px;border-radius:7px;font-size:12.5px}
.affrow b{font-weight:600}
.affrow[data-hl="true"]{background:var(--red-soft);color:var(--red)}
.queue td:first-child{font-family:"JetBrains Mono",monospace;font-size:12px}

/* ===== docs ===== */
.drop{border:1.5px dashed var(--rule2);border-radius:12px;padding:30px;text-align:center;color:var(--ink2);word-break:keep-all;background:var(--panel)}
.drop b{display:block;font-weight:600;font-size:17px;color:var(--ink);margin-bottom:4px}
.drop .lbl{margin-top:8px}
.ftype{display:inline-block;font-family:"JetBrains Mono",monospace;font-size:10.5px;font-weight:600;background:var(--paper2);border-radius:4px;padding:1px 6px;margin-right:8px}
.prog{height:6px;background:var(--paper2);border-radius:99px;position:relative;width:110px;display:inline-block;vertical-align:middle;overflow:hidden}
.prog i{position:absolute;left:0;top:0;bottom:0;background:var(--ink);border-radius:99px}
.prog i.run{background:var(--red)}

/* ===== sensors ===== */
.sens{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.sens>div{background:var(--panel);border:1px solid var(--rule);border-radius:12px;padding:16px 18px}
.sens .v{font-family:"Fraunces",serif;font-weight:500;font-size:32px;line-height:1;letter-spacing:-.02em}
.sens .v small{font-size:12px;font-family:"JetBrains Mono",monospace;font-weight:600;color:var(--pencil);margin-left:6px}
.sens .k{font-size:12px;color:var(--pencil);margin-top:6px;display:flex;justify-content:space-between;font-weight:500}
.sens .k i{font-style:normal;font-family:"JetBrains Mono",monospace;font-size:11px}
.sens .k i.alarm{color:var(--crit)}
.sens svg{width:100%;height:56px;display:block;margin-top:10px}
.alarm{color:var(--crit);font-weight:600}
.scenes{display:flex;gap:6px;align-items:center;margin-bottom:12px;flex-wrap:wrap}
.scenes button{border:1px solid var(--rule);border-radius:999px;padding:4px 12px;font-size:12.5px;color:var(--ink2);white-space:nowrap}
.scenes button[aria-pressed="true"]{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.scenes .lbl{white-space:nowrap}
.devgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.dev{display:grid;grid-template-columns:auto 1fr;gap:10px;align-items:center;text-align:left;padding:12px;border:1px solid var(--rule);border-radius:10px;background:var(--paper2)}
.dev i{width:26px;height:16px;border-radius:999px;background:var(--rule2);position:relative;display:inline-block}
.dev i::after{content:"";position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:#fff;transition:left .15s}
.dev[aria-pressed="true"] i{background:var(--red)}
.dev[aria-pressed="true"] i::after{left:12px}
.dev .nm{font-weight:600;font-size:13px}
.dev .v{font-family:"JetBrains Mono",monospace;font-size:11px;color:var(--pencil);margin-top:2px}
.dev:hover{border-color:var(--rule2)}

/* ===== cost & carbon ===== */
.form{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.form label{display:block;background:var(--panel);border:1px solid var(--rule);border-radius:10px;padding:10px 14px;font-size:10.5px;font-weight:600;letter-spacing:.05em;color:var(--pencil);text-transform:uppercase}
.form input,.form select{display:block;width:100%;margin-top:4px;border:0;background:none;font:inherit;font-size:15px;color:var(--ink);padding:2px 0}
.big{font-family:"Fraunces",serif;font-weight:500;font-size:54px;line-height:1;letter-spacing:-.025em;font-variation-settings:"opsz" 96}
.big small{font-size:15px;font-family:"JetBrains Mono",monospace;font-weight:600;letter-spacing:0;margin-left:8px;color:var(--pencil)}
.stack{margin-top:14px}
.stack svg{width:100%;height:auto;display:block;overflow:visible}
.cmp td .bar{height:8px;border-radius:99px;display:inline-block;vertical-align:middle;margin-right:8px;background:var(--rule2)}
.cmp td .bar.fill{background:var(--ink)}
.cmp td .bar.red{background:var(--red)}

/* ===== palette ===== */
.pal{position:fixed;inset:0;background:rgba(10,14,12,.45);display:grid;place-items:start center;padding-top:14vh;z-index:50}
.pal .box{width:min(620px,92vw);background:var(--panel);border:1px solid var(--rule2);border-radius:14px;box-shadow:var(--sh);overflow:hidden}
.pal input{width:100%;border:0;border-bottom:1px solid var(--rule);background:none;padding:14px 16px;font-size:16px}
.pal ul{list-style:none;margin:0;padding:6px}
.pal li{padding:9px 12px;border-radius:8px;display:flex;gap:12px;align-items:center;font-size:14px}
.pal li[aria-selected="true"]{background:var(--red-soft);color:var(--red)}
.pal li .k{margin-left:auto;font-family:"JetBrains Mono",monospace;font-size:11px;color:var(--pencil)}
.pal .hint{padding:8px 14px 10px;font-size:11px;color:var(--pencil);border-top:1px solid var(--rule)}

@media (max-width:1000px){
  .sheet{grid-template-columns:1fr}.rail{display:none}.brand{border:0;width:auto;padding-left:14px}
  .hero>div:first-child{max-width:none;background:var(--panel)}.hero .axon{position:relative;left:0;height:320px}
  .figs,.memo,.two,.three,.ws{grid-template-columns:1fr}
  .stats,.fields,.rev,.sens,.form,.devgrid,.params{grid-template-columns:1fr 1fr}
  .strip{grid-template-columns:auto 1fr auto}.tabs,.kbtn,.prof{display:none}
  .tbwrap{overflow-x:auto}.tb{min-width:860px}.pagehead{grid-template-columns:1fr}
  .modgrid{grid-template-columns:1fr 1fr!important}
}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ===== v3: chat-first shell ===== */
.sheet{display:grid;grid-template-columns:264px 1fr;min-height:100vh}
.sheet[data-collapsed="1"]{grid-template-columns:0 1fr}
.side{position:sticky;top:0;height:100vh;background:var(--paper2);border-right:1px solid var(--rule);display:flex;flex-direction:column;overflow:hidden;font-size:13.5px}
.side .top{display:flex;align-items:center;justify-content:space-between;padding:12px 12px 6px 14px}
.side .logo{display:flex;align-items:center;gap:8px;font-weight:700}
.side .logo i{width:22px;height:22px;border-radius:6px;background:var(--ink);display:grid;place-items:center;color:var(--paper);font-family:"Fraunces",serif;font-size:12px;font-style:normal}
.side .icb{width:30px;height:30px;border-radius:7px;display:grid;place-items:center;color:var(--pencil)}
.side .icb:hover{background:var(--rule);color:var(--ink)}
.side .icb svg,.side .nav svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.side .nav{display:flex;flex-direction:column;gap:1px;padding:4px 8px}
.side .nav button{display:flex;align-items:center;gap:10px;padding:7px 10px;border-radius:8px;color:var(--ink);text-align:left;width:100%}
.side .nav button:hover{background:var(--rule)}
.side .nav button[aria-current="page"]{background:var(--panel);box-shadow:0 0 0 1px var(--rule)}
.side .nav button .k{margin-left:auto;font-size:10.5px;color:var(--pencil);font-family:"JetBrains Mono",monospace}
.side .grp{padding:14px 18px 4px;font-size:11px;font-weight:600;color:var(--pencil);letter-spacing:.04em}
.side .list{flex:1;overflow:auto;padding:0 8px}
.side .list button{display:block;width:100%;text-align:left;padding:7px 10px;border-radius:8px;color:var(--ink2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:13px}
.side .list button:hover{background:var(--rule);color:var(--ink)}
.side .list button[aria-current="true"]{background:var(--panel);color:var(--ink);box-shadow:0 0 0 1px var(--rule)}
.side .bottom{border-top:1px solid var(--rule);padding:10px 12px;display:flex;align-items:center;gap:10px}
.side .bottom .user{width:30px;height:30px}
.side .bottom b{display:block;font-size:13px}
.side .bottom span{font-size:11.5px;color:var(--pencil)}
.side .bottom .icb{margin-left:auto}

.main{display:flex;flex-direction:column;min-height:100vh;min-width:0}
.topbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:8px;padding:8px 14px;background:color-mix(in srgb,var(--paper) 88%,transparent);backdrop-filter:blur(12px)}
.topbar .icb{width:32px;height:32px;border-radius:8px;display:grid;place-items:center;color:var(--pencil)}
.topbar .icb:hover{background:var(--paper2);color:var(--ink)}
.topbar .icb svg,.mdl svg,.comp svg,.menu svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.topbar .sp{flex:1}
.topbar .share{border:1px solid var(--rule);border-radius:999px;padding:6px 12px;font-size:13px;font-weight:600;background:var(--panel);display:flex;gap:6px;align-items:center}
.mdlwrap{position:relative}
.mdl{display:flex;align-items:center;gap:6px;padding:6px 10px;border-radius:9px;font-size:15px;font-weight:600}
.mdl:hover{background:var(--paper2)}
.mdl small{font-weight:500;color:var(--pencil);font-size:15px}
.mdl svg{width:16px;height:16px;color:var(--pencil)}
.menu{position:absolute;top:calc(100% + 6px);left:0;min-width:300px;background:var(--panel);border:1px solid var(--rule);border-radius:14px;box-shadow:var(--sh);padding:6px;z-index:40}
.menu .hd{padding:8px 12px 4px;font-size:11.5px;color:var(--pencil);font-weight:600}
.menu button{display:grid;grid-template-columns:1fr auto;gap:2px 12px;width:100%;text-align:left;padding:9px 12px;border-radius:9px;align-items:center}
.menu button:hover{background:var(--paper2)}
.menu button b{font-size:14px;font-weight:600}
.menu button span{font-size:12px;color:var(--pencil);grid-column:1}
.menu button i{grid-row:1/3;grid-column:2;font-style:normal;color:var(--red);font-weight:700}
.menu .sep{height:1px;background:var(--rule);margin:6px 4px}
.menu.right{left:auto;right:0}
.menu.up{top:auto;bottom:calc(100% + 8px)}

.chat{flex:1;display:flex;flex-direction:column;align-items:center;padding:0 20px}
.chat .empty{flex:1;display:flex;flex-direction:column;justify-content:center;align-items:center;width:min(760px,100%);padding-bottom:6vh}
.chat .empty h1{font-family:"IBM Plex Sans KR",sans-serif;font-weight:600;font-size:30px;letter-spacing:-.02em;margin:0 0 22px;text-align:center}
.chat .thread{width:min(760px,100%);flex:1;padding:16px 0 24px;display:flex;flex-direction:column;gap:22px}
.chat .u{align-self:flex-end;max-width:78%;background:var(--paper2);border-radius:18px 18px 4px 18px;padding:10px 16px;font-size:15px;line-height:1.6;word-break:keep-all}
.chat .a{font-size:15px;line-height:1.7;word-break:keep-all;max-width:100%}
.chat .a p{margin:0 0 8px}
.chat .a .trace{font-size:12.5px}
.chat .a .acts{margin-top:10px}
.chat .a .acts button{border:0;background:none;color:var(--pencil);padding:4px 6px}
.chat .a .acts button:hover{color:var(--ink);background:var(--paper2)}
.chat .a .card{border:1px solid var(--rule);border-radius:12px;padding:12px 14px;margin:10px 0;background:var(--panel)}
.chat .a .card .lbl{margin-bottom:6px}
.compwrap{position:sticky;bottom:0;width:min(760px,100%);padding:8px 0 14px;background:linear-gradient(transparent,var(--paper) 30%)}
.comp{background:var(--panel);border:1px solid var(--rule2);border-radius:22px;box-shadow:var(--sh);padding:10px 10px 8px}
.comp textarea{width:100%;border:0;background:none;resize:none;font:inherit;font-size:15.5px;line-height:1.5;padding:6px 8px;min-height:44px;max-height:200px;outline:none;color:var(--ink)}
.comp textarea::placeholder{color:var(--pencil)}
.comp .row{display:flex;align-items:center;gap:4px;position:relative}
.comp .cb{height:34px;min-width:34px;border-radius:999px;display:flex;align-items:center;justify-content:center;gap:6px;color:var(--ink2);padding:0 10px;font-size:13px;font-weight:500}
.comp .cb:hover{background:var(--paper2)}
.comp .cb[aria-pressed="true"]{background:var(--red-soft);color:var(--red)}
.comp .cb.icon{padding:0}
.comp .send{margin-left:auto;width:34px;height:34px;border-radius:50%;background:var(--ink);color:var(--paper);display:grid;place-items:center}
.comp .send:disabled{background:var(--rule2);cursor:default}
.comp .send svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.comp .chips{display:flex;gap:6px;flex-wrap:wrap;padding:2px 6px 6px}
.comp .chip{font-size:12px;background:var(--red-soft);color:var(--red);border-radius:999px;padding:3px 10px;display:flex;gap:6px;align-items:center;font-weight:600}
.comp .chip button{font-weight:700}
.chat .foot{font-size:11.5px;color:var(--pencil);text-align:center;padding:6px 0 0}
.sugg2{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;max-width:680px}
.sugg2 button{border:1px solid var(--rule);background:var(--panel);border-radius:999px;padding:8px 14px;font-size:13.5px;color:var(--ink2)}
.sugg2 button:hover{border-color:var(--red);color:var(--red)}
.chat .status{display:flex;gap:14px;font-size:12px;color:var(--pencil);margin-top:26px;flex-wrap:wrap;justify-content:center}
.chat .status i{width:7px;height:7px;border-radius:50%;background:var(--red);display:inline-block;margin-right:6px}
.chat .status i.off{background:var(--rule2)}
.inner{padding:0 32px 40px;max-width:1440px;width:100%;margin:0 auto}
.topbar .prof{margin-left:8px}
@media (max-width:900px){.sheet{grid-template-columns:0 1fr}.side{display:none}}

.sheet{height:100vh;min-height:0}
.main{height:100vh;min-height:0;overflow:auto}
.topbar .share{white-space:nowrap}
.side .nav button{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.side .nav button>*{flex-shrink:0}
.side .nav button .tx{overflow:hidden;text-overflow:ellipsis;flex-shrink:1}
.chat .thread{padding-bottom:40px}

.schema{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.sf{display:grid;grid-template-columns:110px 1fr auto;gap:8px;align-items:center;background:var(--paper2);border-radius:8px;padding:6px 10px;font-size:12.5px}
.sf .k{font-size:11px;color:var(--pencil)}
.sf input{border:0;background:none;font:inherit;font-family:"JetBrains Mono",monospace;font-size:12.5px;color:var(--ink);min-width:0;border-bottom:1px solid transparent}
.sf input:focus{outline:none;border-bottom-color:var(--red)}
.sf .c{font-size:10.5px;color:var(--pencil)}
.sf[data-low="true"]{background:var(--crit-soft)}
.sf[data-low="true"] .c{color:var(--crit);font-weight:700}
.sf .chunk{font-size:12px;color:var(--ink2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.chunks{display:flex;flex-direction:column;gap:8px}
.ck{border:1px solid var(--rule);border-radius:9px;padding:8px 12px;font-size:12.5px;color:var(--ink2);line-height:1.5}
.ck .t{font-size:11px;color:var(--ink);font-weight:600;display:flex;justify-content:space-between;margin-bottom:2px}
.ck .t span{color:var(--pencil);font-weight:400}

/* --- 설정 모달(중앙 팝업, GPT식) --- */
.modal-ov{position:fixed;inset:0;background:rgba(20,20,22,.42);backdrop-filter:blur(2px);display:grid;place-items:center;z-index:80;padding:20px}
.modal{width:min(760px,96vw);height:min(560px,88vh);background:var(--panel);border:1px solid var(--rule);border-radius:18px;box-shadow:var(--sh);display:flex;flex-direction:column;overflow:hidden}
.modal-hd{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--rule)}
.modal-hd b{font-size:16px;font-weight:700}
.modal-hd .icb{font-size:20px;line-height:1;width:32px;height:32px;border-radius:8px}
.modal-bd{flex:1;display:flex;min-height:0}
.modal-nav{width:200px;flex-shrink:0;border-right:1px solid var(--rule);padding:12px 10px;display:flex;flex-direction:column;gap:2px;background:var(--paper)}
.modal-nav button{text-align:left;padding:10px 14px;border-radius:10px;font-size:13.5px;font-weight:600;color:var(--ink2)}
.modal-nav button:hover{background:var(--paper2)}
.modal-nav button[aria-current=page]{background:var(--ink);color:var(--paper)}
.modal-pane{flex:1;overflow-y:auto;padding:22px 26px}
.set-lead{font-size:13px;color:var(--pencil);line-height:1.6;margin:0 0 16px}
.set-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 0;border-bottom:1px solid var(--rule)}
.set-row>div:first-child{display:flex;flex-direction:column;gap:2px}
.set-row b{font-size:14px;font-weight:600}
.set-row span{font-size:12px;color:var(--pencil)}
.seg{display:inline-flex;border:1px solid var(--rule2);border-radius:10px;overflow:hidden;flex-shrink:0}
.seg button{padding:7px 14px;font-size:12.5px;font-weight:600;color:var(--ink2);border-right:1px solid var(--rule2)}
.seg button:last-child{border-right:0}
.seg button[aria-pressed=true]{background:var(--ink);color:var(--paper)}
.pill{font-size:11.5px;font-weight:600;color:var(--pencil);border:1px solid var(--rule2);border-radius:20px;padding:4px 12px}
.conn{display:flex;flex-direction:column;gap:2px;margin:8px 0}
.conn-row{display:flex;align-items:center;gap:12px;padding:11px 4px;border-bottom:1px solid var(--rule)}
.conn-row>div{display:flex;flex-direction:column;gap:1px}
.conn-row b{font-size:13.5px;font-weight:600}
.conn-row span{font-size:12px;color:var(--pencil)}
.sdot{width:9px;height:9px;border-radius:50%;flex-shrink:0}
.sdot.on{background:#16a34a;box-shadow:0 0 0 3px rgba(22,163,74,.16)}
.sdot.off{background:var(--rule2)}
.ok-banner{margin-top:16px;padding:12px 14px;border-radius:10px;background:rgba(22,163,74,.10);border:1px solid rgba(22,163,74,.35);color:#15803d;font-size:13px;font-weight:600}
.step-banner{margin-top:16px;padding:12px 14px;border-radius:10px;background:var(--paper2);border:1px solid var(--rule2);font-size:13px;line-height:1.55}
.step-banner b{color:var(--red)}
.act{font-size:12px;color:var(--pencil);margin-top:6px}
/* 연동 게이지 */
.gauge{margin-top:14px}
.gauge .bar{height:8px;border-radius:999px;background:var(--paper2);border:1px solid var(--rule);overflow:hidden}
.gauge .bar i{display:block;height:100%;background:var(--red);transition:width .2s ease}
.gauge.run .bar i{background-image:linear-gradient(90deg,transparent 0,rgba(255,255,255,.45) 50%,transparent 100%);background-size:48px 100%;animation:gshine .9s linear infinite}
.gauge.ok .bar i{background:#16a34a}
.gauge.fail .bar i{background:var(--crit)}
.gauge .gl{display:flex;justify-content:space-between;gap:12px;font-size:12.5px;color:var(--pencil);margin-top:6px}
.gauge .gl b{font-family:"JetBrains Mono",monospace;font-size:12px;color:var(--ink);white-space:nowrap}
.gauge.ok .gl b{color:#15803d}
.gauge.fail .gl b{color:var(--crit)}
@keyframes gshine{to{background-position:48px 0}}
.steps{margin-top:8px;display:flex;flex-direction:column;gap:4px}
.step{display:flex;align-items:center;gap:8px;font-size:12.5px;padding:3px 0}
.step i{width:8px;height:8px;border-radius:50%;background:var(--rule2);flex-shrink:0}
.step.ok i{background:#16a34a}
.step.fail i{background:var(--crit)}
.step.skip i{background:var(--warn)}
.step em{font-style:normal;color:var(--pencil);font-size:12px;margin-left:auto;text-align:right}
.muted{color:var(--pencil)}
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}

/* ===== 채팅 고도화 (docs/CHAT-UX-SPEC.md §5) ===== */
/* 사이드바 대화 목록 */
.side .grp.grp-row{display:flex;align-items:center;justify-content:space-between;padding-right:10px}
.side .newth{font-size:11.5px;font-weight:600;color:var(--red);padding:2px 8px;border-radius:6px;letter-spacing:0}
.side .newth:hover{background:var(--red-soft)}
.side .list .th{position:relative;display:flex;align-items:center;gap:6px;width:100%;padding:6px 6px 6px 10px;border-radius:8px;color:var(--ink2);font-size:13px;cursor:pointer;user-select:none}
.side .list .th:hover,.side .list .th:focus-visible{background:var(--rule);color:var(--ink)}
.side .list .th[aria-current="true"]{background:var(--panel);color:var(--ink);box-shadow:0 0 0 1px var(--rule)}
.side .list .th .tt{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.side .list .th .pin{width:6px;height:6px;border-radius:50%;background:var(--red);flex-shrink:0}
.side .list .th button.thm{display:grid;place-items:center;width:24px;height:24px;padding:0;border-radius:6px;color:var(--pencil);opacity:0;flex-shrink:0;font-size:14px;line-height:1;white-space:normal}
.side .list .th:hover .thm,.side .list .th:focus-within .thm,.side .list .th .thm[aria-expanded="true"]{opacity:1}
.side .list .th button.thm:hover{background:var(--panel);color:var(--ink)}
.side .list .th.editing{padding:3px 6px}
.side .list .th.editing input{width:100%;font:inherit;font-size:13px;padding:4px 6px;border:1px solid var(--red);border-radius:6px;background:var(--panel);color:var(--ink);outline:none}
.side .list .list-empty{padding:8px 10px;font-size:12px;color:var(--pencil)}
.menu.thmenu{z-index:60}
.menu.thmenu button{grid-template-columns:1fr}
.menu.thmenu button b{font-size:13px}
.menu.thmenu button.danger b{color:var(--crit)}
@media (max-width:900px){.menu.thmenu{display:none}}

/* 마크다운 본문 */
.chat .a .md p{margin:0 0 8px}
.chat .a .md p:last-child{margin-bottom:0}
.chat .a .md ul,.chat .a .md ol{margin:0 0 8px;padding-left:22px}
.chat .a .md li{margin:2px 0}
.chat .a .md code{font-family:"JetBrains Mono",ui-monospace,Menlo,monospace;font-size:.86em;background:var(--paper2);border:1px solid var(--rule);border-radius:5px;padding:1px 5px}
.chat .a .md pre{margin:6px 0 10px;padding:10px 12px;background:var(--paper2);border:1px solid var(--rule);border-radius:10px;overflow-x:auto;font-size:12.5px;line-height:1.5}
.chat .a .md pre code{background:none;border:0;padding:0;font-size:inherit}
.chat .a .md a{color:var(--red);text-decoration:underline;text-underline-offset:2px}
.chat .a .md .mdh{margin-top:6px}
.chat .a .md strong{font-weight:600}

/* 진행 단계(점 3개) */
.chat .a .stage{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--pencil);margin-top:4px;min-height:22px}
.chat .a .stage .dots{display:inline-flex;gap:4px}
.chat .a .stage .dots i{width:6px;height:6px;border-radius:50%;background:var(--red);opacity:.35;animation:dotpulse 1.2s ease-in-out infinite}
.chat .a .stage .dots i:nth-child(2){animation-delay:.2s}
.chat .a .stage .dots i:nth-child(3){animation-delay:.4s}
@keyframes dotpulse{0%,80%,100%{opacity:.25;transform:translateY(0)}40%{opacity:1;transform:translateY(-2px)}}
@media (prefers-reduced-motion:reduce){.chat .a .stage .dots i{opacity:.7;transform:none}}

/* 가정 접힘 박스 */
.chat .a .assum{margin:6px 0 10px;border:1px dashed var(--rule2);border-radius:10px;padding:6px 12px;font-size:13px;color:var(--ink2);background:var(--paper2)}
.chat .a .assum summary{cursor:pointer;font-weight:600;color:var(--ink2);list-style:none;display:flex;align-items:center;gap:6px}
.chat .a .assum summary::-webkit-details-marker{display:none}
.chat .a .assum summary::before{content:"";width:0;height:0;border-left:5px solid var(--pencil);border-top:4px solid transparent;border-bottom:4px solid transparent;transition:transform .15s}
.chat .a .assum[open] summary::before{transform:rotate(90deg)}
.chat .a .assum summary b{color:var(--red)}
.chat .a .assum ul{margin:6px 0 2px;padding-left:18px}

/* 되묻기 칩 */
.chat .a .clarify-q{margin:0 0 8px;padding-left:22px;color:var(--ink2)}
.chat .a .clarify-chips{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 8px}
.chat .a .cchip{border:1px solid var(--rule2);background:var(--panel);border-radius:999px;padding:6px 13px;font-size:13px;color:var(--ink2)}
.chat .a .cchip:hover:not(:disabled){border-color:var(--red);color:var(--red);background:var(--red-soft)}
.chat .a .cchip:disabled{opacity:.5;cursor:default}

/* 상태 카드 */
.chat .a .stcard .strow{display:flex;align-items:center;gap:10px;padding:7px 0;border-bottom:1px solid var(--rule)}
.chat .a .stcard .strow:last-of-type{border-bottom:0}
.chat .a .stcard .strow>div{display:flex;flex-direction:column;gap:1px;min-width:0}
.chat .a .stcard .strow b{font-size:13px;font-weight:600}
.chat .a .stcard .strow span{font-size:12px;color:var(--pencil)}
.chat .a .stcard .next{margin-top:8px;padding:8px 10px;border-radius:8px;background:var(--paper2);font-size:12.5px;line-height:1.5}
.chat .a .stcard .next b{color:var(--red)}

/* 추천안 카드 · 배치 추적 */
.chat .a .altcard.picked{border-color:var(--red);box-shadow:0 0 0 1px var(--red)}
.chat .a .btrack{align-items:center}
.chat .a .btrack .bt-main{display:flex;align-items:center;gap:12px;min-width:0}
.chat .a .btrack .bt-text{font-size:13px;font-weight:600}
.chat .a .btrack .bt-hint{font-size:12px;color:var(--ink2);margin-top:2px}
.chat .a .bdot{width:10px;height:10px;border-radius:50%;background:var(--pencil);flex-shrink:0}
.chat .a .bdot.wait{background:var(--warn)}
.chat .a .bdot.run{background:var(--red)}
.chat .a .bdot.ok{background:#16a34a;box-shadow:0 0 0 3px rgba(22,163,74,.16)}
.chat .a .bdot.warn{background:var(--warn)}
.chat .a .bdot.fail{background:var(--crit);box-shadow:0 0 0 3px rgba(207,74,52,.16)}
.chat .a .bdot.live{animation:bpulse 1.6s ease-in-out infinite}
@keyframes bpulse{0%,100%{box-shadow:0 0 0 0 rgba(18,117,106,.35)}50%{box-shadow:0 0 0 6px rgba(18,117,106,0)}}
.chat .a .btrack.fail{background:var(--crit-soft)}
.chat .a .btrack.fail .lbl{color:var(--crit)}
.chat .a .btrack.ok .lbl{color:#15803d}

/* 메시지 액션(hover) · 오류 · 근거 */
.chat .a{position:relative;padding-bottom:22px}
.chat .a .macts{position:absolute;left:0;bottom:0;display:flex;gap:2px;opacity:0;transition:opacity .12s}
.chat .a:hover .macts,.chat .a:focus-within .macts{opacity:1}
.chat .a .macts button{font-size:12px;color:var(--pencil);padding:2px 8px;border-radius:6px}
.chat .a .macts button:hover{background:var(--paper2);color:var(--ink)}
.chat .a .macts:empty{display:none}
@media (hover:none){.chat .a .macts{opacity:1}}
.chat .a .errbox{border:1px solid var(--crit);background:var(--crit-soft);border-radius:12px;padding:10px 14px;margin:4px 0 8px;font-size:14px;line-height:1.55}
.chat .a .errbox p{margin:0 0 8px;color:var(--crit)}
.chat .a .errbox .btnrow{margin-bottom:6px}
.chat .a .cases{font-size:12px;color:var(--pencil);margin-top:4px}
.chat .a.live .md{min-height:1em}

/* 최신으로 스크롤 */
.chat .tolatest-wrap{position:sticky;bottom:118px;width:0;height:0;align-self:center;z-index:5;overflow:visible}
.chat .tolatest{position:absolute;bottom:0;left:0;transform:translateX(-50%);white-space:nowrap;border:1px solid var(--rule2);background:var(--panel);color:var(--ink2);border-radius:999px;padding:6px 14px;font-size:12.5px;font-weight:600;box-shadow:var(--sh)}
.chat .tolatest:hover{border-color:var(--red);color:var(--red)}

/* 컴포저: 중지 버튼 · 진행 중 비활성 */
.comp .send.stop{background:var(--ink);cursor:pointer}
.comp .send.stop:hover{background:var(--crit)}
.comp .send .sq{display:block;width:11px;height:11px;border-radius:2px;background:var(--paper)}
.comp .cb:disabled{opacity:.45;cursor:default}
.comp .cb:disabled:hover{background:none}
.comp textarea:disabled{color:var(--pencil);cursor:default}
.comp[data-streaming="1"]{border-color:var(--rule)}

/* 에너지 */
.energy .etiles{display:grid;grid-template-columns:repeat(6,1fr);gap:12px}
.energy .etile{background:var(--panel);border:1px solid var(--rule);border-radius:12px;padding:14px 16px}
.energy .etile .k{font-size:12px;color:var(--pencil);font-weight:500;margin-bottom:6px}
.energy .etile .v{font-family:"Fraunces",serif;font-weight:500;font-size:26px;line-height:1;letter-spacing:-.02em}
.energy .etile .v small{font-size:11px;font-family:"JetBrains Mono",monospace;font-weight:600;color:var(--pencil);margin-left:5px}
.energy .etile .lbl{margin-top:6px}
.energy .edaily{margin-top:14px;background:var(--panel);border:1px solid var(--rule);border-radius:12px;padding:14px 16px}
.energy .edaily .k{font-size:12px;color:var(--pencil);display:flex;justify-content:space-between;font-weight:500}
.energy .edaily .k i{font-style:normal;font-family:"JetBrains Mono",monospace;font-size:11px}
.energy .edaily svg{width:100%;height:56px;display:block;margin-top:10px}
.energy .ebars{display:flex;align-items:flex-end;gap:6px;margin-top:10px;height:56px}
.energy .ebars>div{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%}
.energy .ebars i{display:block;width:100%;background:var(--ink);border-radius:2px 2px 0 0;opacity:.85}
.energy .ebars b{font-family:"JetBrains Mono",monospace;font-size:10px;font-weight:500;color:var(--pencil);margin-top:4px}
.energy .eassum{margin-top:10px;font-size:12.5px;color:var(--ink2)}
.energy .eassum summary{cursor:pointer;color:var(--pencil);font-weight:500}
.energy .eassum ul{margin:6px 0 0;padding-left:18px;line-height:1.6}
@media (max-width:900px){.energy .etiles{grid-template-columns:repeat(3,1fr)}}
@media (max-width:600px){.energy .etiles{grid-template-columns:1fr 1fr}}

/* ===== 계정 · 로그인 (docs/PLATFORM-SPEC.md §3) ===== */
.acctwrap{position:relative}
.acct{display:flex;align-items:center;gap:8px;border:1px solid var(--rule);border-radius:999px;padding:4px 10px 4px 4px;font-size:13px;font-weight:600;background:var(--panel);max-width:220px;white-space:nowrap}
.acct:hover{border-color:var(--rule2);background:var(--paper2)}
.acct.login{padding:6px 14px;background:var(--ink);color:var(--paper);border-color:var(--ink)}
.acct.login:hover{background:var(--red);border-color:var(--red);color:#fff}
.acct .avatar{width:24px;height:24px;border-radius:50%;background:var(--red-soft);color:var(--red);display:grid;place-items:center;font-style:normal;font-size:12px;font-weight:700;flex-shrink:0}
.acct .nm{overflow:hidden;text-overflow:ellipsis;max-width:120px}
.acct .tier{font-style:normal;font-size:10.5px;font-weight:700;letter-spacing:.04em;border-radius:999px;padding:2px 7px;background:var(--paper2);color:var(--ink2);text-transform:uppercase}
.acct .tier.pro,.acct .tier.admin{background:var(--red-soft);color:var(--red)}
.menu.acctmenu{min-width:270px;z-index:60}
.menu.acctmenu .hd{font-family:"JetBrains Mono",ui-monospace,monospace;font-size:11px;overflow:hidden;text-overflow:ellipsis}
.side .bottom .who{min-width:0}
.side .bottom .who b,.side .bottom .who span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}
/* 로그인/회원가입 모달 */
.modal.sm{width:min(440px,96vw);height:auto;max-height:90vh}
.auth-bd{padding:18px 22px 20px;overflow-y:auto}
.auth-reason{background:var(--red-soft);color:var(--red);border-radius:10px;padding:10px 12px;font-size:13px;font-weight:600;margin-bottom:14px;line-height:1.5}
.auth-tabs{margin-bottom:16px}
.auth-tabs button{flex:1;min-width:110px}
.auth-form{display:flex;flex-direction:column;gap:12px}
.afield{display:flex;flex-direction:column;gap:5px;font-size:11.5px;letter-spacing:.04em;color:var(--pencil);font-weight:600;text-transform:uppercase}
.afield input,.inp{border:1px solid var(--rule2);border-radius:10px;padding:10px 12px;font:inherit;font-size:14px;color:var(--ink);background:var(--panel);width:100%;min-width:0;text-transform:none;letter-spacing:0}
.afield input:focus,.inp:focus{outline:none;border-color:var(--red);box-shadow:0 0 0 3px color-mix(in srgb,var(--red) 18%,transparent)}
.aerr{color:var(--crit);font-size:13px;margin:0;line-height:1.5}
.aok{color:var(--red);font-size:13px;margin:0}
.btn.wide{width:100%;padding:11px 16px;font-size:14px}
.lnk{color:var(--red);font-weight:600;text-decoration:underline;text-underline-offset:2px}
.auth-foot{margin:2px 0 0;font-size:13px;color:var(--ink2);text-align:center}
.auth-note{margin:0;font-size:11.5px;color:var(--pencil);line-height:1.55;text-align:center}
/* 계정 설정 */
.set-row.col{flex-direction:column;align-items:stretch;gap:10px}
.inline{display:flex;gap:8px;align-items:center}
.inline.wrap{flex-wrap:wrap}
.inline .inp{flex:1;min-width:160px;width:auto}
.keybox{flex:1;min-width:0;background:var(--paper2);border:1px solid var(--rule);border-radius:8px;padding:8px 10px;font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;user-select:all}
.usage-bar{height:8px;border-radius:999px;background:var(--paper2);border:1px solid var(--rule);overflow:hidden}
.usage-bar i{display:block;height:100%;background:var(--red);transition:width .2s ease}
.usage-bar i.full{background:var(--crit)}
.users{display:flex;flex-direction:column}
.urow{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 0;border-bottom:1px solid var(--rule);flex-wrap:wrap}
.urow.off .uid{opacity:.55}
.urow .uid{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.urow .uid b{font-size:13.5px;font-weight:600}
.urow .uid span{font-size:12px;color:var(--pencil);word-break:break-all}
.uctl{display:flex;gap:6px;align-items:center;flex-shrink:0}
.uctl select{border:1px solid var(--rule2);border-radius:8px;padding:5px 8px;font-size:12.5px;background:var(--panel);color:var(--ink)}
.btn.danger{color:var(--crit);border-color:color-mix(in srgb,var(--crit) 45%,transparent)}
.btn.danger:hover{background:var(--crit);border-color:var(--crit);color:#fff}
/* 게스트 배너 · 공사비 링크 */
.guest-banner{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:10px auto 0;max-width:820px;width:100%;padding:10px 14px;border-radius:12px;background:var(--red-soft);border:1px solid color-mix(in srgb,var(--red) 30%,transparent);font-size:13px;color:var(--ink2);line-height:1.5}
.guest-banner b{color:var(--red)}
.chat .a .costrow{margin:4px 0 6px;display:flex;justify-content:flex-end}
.costlink{font-size:12.5px;font-weight:600;color:var(--red);text-decoration:none;border:1px solid var(--rule2);border-radius:999px;padding:4px 12px;background:var(--panel)}
.costlink:hover{border-color:var(--red);background:var(--red-soft)}
@media (max-width:640px){.acct .nm{display:none}.acct{padding-right:6px}.guest-banner{margin:10px 12px 0;width:auto}}

/* BIM 워크스페이스 */
.ws .log p.empty{margin:0;font-size:13px;color:var(--pencil);line-height:1.6;word-break:keep-all}
.ws .wsl{display:grid;grid-template-columns:34px 1fr;gap:10px;font-size:13.5px;line-height:1.55}
.ws .wsl .who{width:28px;height:28px;border-radius:50%;background:var(--paper2);display:grid;place-items:center;font-size:10px;font-weight:700;color:var(--pencil)}
.ws .wsl.u .who{background:var(--ink);color:var(--paper)}
.ws .wsl .body{min-width:0;word-break:keep-all;padding-top:4px}
.ws .wsl .body p{margin:0 0 6px}
.ws .wsl.err .body{color:var(--crit)}
.ws .wsl .asm{margin:4px 0 6px;padding-left:18px;font-size:12.5px;color:var(--ink2)}
.ws .wsl .chips{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 6px}
.ws .wsl .chips button{border:1px solid var(--rule2);border-radius:999px;padding:3px 10px;font-size:12px;color:var(--ink2);background:var(--panel)}
.ws .wsl .chips button:hover{border-color:var(--red);color:var(--red)}
.ws .params.p6{grid-template-columns:1.1fr .6fr .7fr .9fr 1fr 1.3fr}
.ws .params input::placeholder{color:var(--pencil);opacity:.8}
.ws .params select{appearance:auto}
.ws .ask2 input:disabled{opacity:.6}
.ws .ask2 button:disabled{opacity:.45;cursor:not-allowed}
.gate .gmsg{margin-top:8px;font-size:12.5px;font-weight:600;color:var(--ink)}
.gate .ghint{margin-top:3px;font-size:12px;color:var(--ink2)}
.gate.fail{background:var(--crit-soft)}.gate.fail .lbl,.gate.fail .gmsg{color:var(--crit)}
.gate.ok .gmsg{color:var(--red)}
.gsteps span[data-s="wait"]{background:var(--panel);color:var(--warn);box-shadow:inset 0 0 0 1px var(--warn)}
.gsteps span[data-s="fail"]{background:var(--crit);color:#fff}
.gate .btn:disabled{opacity:.45;cursor:not-allowed}
.gate .btn.fill:disabled:hover{background:var(--red);border-color:var(--red)}
.aff .affrow{cursor:pointer}
.tb td.muted{color:var(--pencil);font-size:12.5px}
@media (max-width:1000px){.ws .params.p6{grid-template-columns:1fr 1fr 1fr}}
/* 자료·학습 */
.drop{cursor:pointer;transition:border-color .15s,background .15s}
.drop.over,.drop:hover{border-color:var(--red);background:var(--red-soft)}
.drop.off{cursor:default;opacity:.75}
.drop:focus-visible{outline:2px solid var(--red);outline-offset:2px}
.upform{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin-top:14px;text-align:left;cursor:default}
.upform input,.upform select{width:100%;border:1px solid var(--rule2);border-radius:8px;padding:7px 9px;font-size:12.5px;background:var(--panel);color:var(--ink);font:inherit;font-size:12.5px}
.upform .lbl{margin:0 0 4px}
.uplist{margin-top:12px;display:flex;flex-direction:column;gap:6px;text-align:left;cursor:default}
.uplist>div{display:grid;grid-template-columns:1fr auto;gap:4px 8px;align-items:center;font-size:12.5px;background:var(--paper2);border-radius:8px;padding:6px 10px}
.uplist .nm{font-family:"JetBrains Mono",monospace;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.uplist .msg{grid-column:1/-1;font-size:12px;color:var(--ink2);word-break:keep-all}
.uplist .msg.err{color:var(--crit)}
.hint{font-size:12.5px;color:var(--ink2);background:var(--paper2);border-radius:8px;padding:8px 12px;margin-top:10px;text-align:left;word-break:keep-all;line-height:1.5}
.docdetail{background:var(--panel);border:1px solid var(--rule);border-radius:12px;padding:16px 18px;margin-top:12px}
.docdetail pre{white-space:pre-wrap;word-break:break-all;font-size:12.5px;background:var(--paper2);border-radius:8px;padding:10px 12px;max-height:320px;overflow:auto;margin:10px 0 0;font-family:"JetBrains Mono",ui-monospace,monospace}
.tb .act{text-align:right;white-space:nowrap}
.tb .act button{font-size:12px;font-weight:600;color:var(--pencil);padding:3px 8px;border-radius:6px}
.tb .act button:hover{color:var(--crit);background:var(--crit-soft)}
.tb tr[aria-selected="true"] td{background:var(--red-soft)}
.hits{display:flex;flex-direction:column;gap:6px;margin-top:10px}
.hits>div{background:var(--paper2);border-radius:9px;padding:8px 12px;font-size:12.5px;display:grid;grid-template-columns:auto 1fr auto;gap:4px 10px;align-items:baseline}
.hits .id{font-family:"JetBrains Mono",monospace;font-size:11.5px;white-space:nowrap}
.hits .kind{font-size:10.5px;font-weight:600;border-radius:4px;background:var(--panel);padding:1px 6px;margin-left:6px;color:var(--red)}
.hits .sn{grid-column:1/-1;color:var(--ink2);font-size:12px;word-break:break-all}
@media (max-width:760px){.upform{grid-template-columns:1fr}}

/* 3D 워크스페이스 (frontend/revit-cad/{bim-agent,viewer,sim-panel}.js · docs/VIEWER-SPEC.md §4) */
.v3-head{display:flex;justify-content:space-between;align-items:end;gap:16px;padding:22px 0 12px;flex-wrap:wrap}
.v3-head h2{font-family:"IBM Plex Sans KR",sans-serif;font-weight:600;font-size:clamp(20px,2vw,26px);line-height:1.2;letter-spacing:-.02em;margin:6px 0 0}
.v3-status{display:flex;gap:16px;flex-wrap:wrap;font-size:11.5px;color:var(--ink2)}
.v3-status .dot,.v3-targets .dot,.v3-work .dot{width:8px;height:8px;border-radius:50%;background:var(--pencil);display:inline-block;margin-right:7px;vertical-align:0}
.v3-status .dot.on,.v3-targets .dot.on{background:var(--red)}.v3-status .dot.warn,.v3-targets .dot.warn{background:var(--warn)}
.v3{display:grid;grid-template-columns:280px minmax(0,1fr) 320px;gap:12px;height:calc(100vh - 54px - 150px);min-height:600px}
.v3-left,.v3-right{display:flex;flex-direction:column;gap:12px;min-width:0;min-height:0;overflow:auto;padding-bottom:2px}
.v3-card{background:var(--panel);border:1px solid var(--rule);border-radius:12px;padding:14px 16px;flex-shrink:0}
.v3-cardhd{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;min-height:22px}
.v3-cardhd .lbl{display:flex;align-items:center;gap:6px}
.lnkbtn{font-size:12px;font-weight:600;color:var(--pencil);border-radius:6px;padding:2px 6px}
.lnkbtn:hover{color:var(--red);background:var(--paper2)}
.v3-thumb{aspect-ratio:16/10;border-radius:9px;background:var(--paper2);border:1px solid var(--rule);overflow:hidden;display:grid;place-items:center;cursor:pointer;margin-bottom:10px}
.v3-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.v3-title{font-weight:600;font-size:15px;letter-spacing:-.01em;margin-bottom:8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.v3-kv{display:grid;grid-template-columns:auto 1fr;gap:5px 12px;font-size:12.5px;margin:0}
.v3-kv dt{color:var(--pencil);font-size:10.5px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;padding-top:2px;white-space:nowrap}
.v3-kv dd{margin:0;min-width:0;overflow-wrap:anywhere}
.v3-tg{margin-top:12px;cursor:default}
.v3-tg i{flex-shrink:0}
.v3-tgst{font-size:11.5px;margin-top:4px;line-height:1.45;word-break:keep-all}
.v3-queue{display:flex;flex-direction:column;gap:6px}
.v3-queue p{margin:0;font-size:12.5px}
.v3-queue .qrow{display:grid;grid-template-columns:auto 1fr auto;gap:4px 8px;align-items:center;font-size:12px;background:var(--paper2);border-radius:8px;padding:6px 10px}
.v3-queue .qrow.me{box-shadow:inset 0 0 0 1px var(--red)}
.v3-queue .qrow>span:first-of-type{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink2)}
.v3-queue .qrow .st{font-size:11px;padding:2px 8px}
.v3-targets{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.v3-targets button{display:flex;align-items:center;font-size:12px;font-weight:600;border:1px solid var(--rule);border-radius:8px;padding:6px 9px;text-align:left;color:var(--ink2)}
.v3-targets button[aria-pressed="true"]{border-color:var(--ink);color:var(--ink);background:var(--paper2)}
.v3-center{display:flex;flex-direction:column;min-width:0;min-height:0;background:var(--panel);border:1px solid var(--rule);border-radius:12px;overflow:hidden}
.v3-toolbar{display:flex;align-items:center;gap:4px;padding:6px 8px;border-bottom:1px solid var(--rule);background:var(--paper2);flex-wrap:wrap}
.v3-toolbar>button,.v3-popwrap>button,.v3-work{font-size:12.5px;font-weight:600;color:var(--ink2);border-radius:7px;padding:5px 10px;white-space:nowrap}
.v3-toolbar>button:hover,.v3-popwrap>button:hover{background:var(--panel);color:var(--ink)}
.v3-toolbar button[aria-pressed="true"]{background:var(--ink);color:var(--paper)}
.v3-toolbar button:disabled{opacity:.4;cursor:default}
.v3-toolbar .sp,.v3-dtabs .sp,.v3-toast .sp{flex:1}
.v3-sel{border:1px solid var(--rule2);border-radius:7px;background:var(--panel);padding:4px 8px;font-size:12.5px;color:var(--ink);max-width:170px}
.v3-slider{display:flex;align-items:center;gap:6px;padding:0 6px}
.v3-slider input{width:110px;accent-color:var(--red)}
.v3-slider small{min-width:32px;color:var(--pencil);font-size:11px}
.v3-popwrap{position:relative}
.v3-pop{position:absolute;left:0;top:calc(100% + 4px);z-index:12;background:var(--panel);border:1px solid var(--rule2);border-radius:10px;box-shadow:var(--sh);padding:8px;min-width:220px;max-height:320px;overflow:auto;display:flex;flex-direction:column;gap:2px}
.v3-pop label{display:grid;grid-template-columns:auto auto 1fr auto;gap:8px;align-items:center;font-size:12.5px;padding:4px 6px;border-radius:6px;cursor:pointer}
.v3-pop label:hover{background:var(--paper2)}
.v3-pop label i{width:10px;height:10px;border-radius:3px;display:inline-block;border:1px solid rgba(0,0,0,.15)}
.v3-pop label small{color:var(--pencil);font-size:11px}
.v3-popact{display:flex;gap:4px;padding:0 2px 6px;border-bottom:1px solid var(--rule);margin-bottom:4px}
.v3-popact button{font-size:11.5px;font-weight:600;color:var(--pencil);padding:2px 8px;border-radius:6px}
.v3-popact button:hover{background:var(--paper2);color:var(--ink)}
.v3-work{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--rule2);background:var(--panel)}
.v3-work small{font-size:10.5px;color:var(--pencil);font-weight:600}
.v3-work[aria-pressed="true"] small{color:var(--paper);opacity:.8}
.v3-work.run .dot{background:var(--warn);animation:bpulse 1.6s ease-in-out infinite}.v3-work.ok .dot{background:var(--red)}.v3-work.fail .dot{background:var(--crit)}
.v3-stage{position:relative;flex:1;min-height:0;display:flex}
.v3-viewer{position:relative;flex:1;min-height:0;min-width:0;background:var(--paper2)}
.v3-canvas{position:absolute;inset:0}
.v3-canvas canvas{outline:none}
.v3-empty{position:absolute;inset:0;display:grid;place-content:center;text-align:center;gap:8px;padding:24px;color:var(--ink2);pointer-events:none}
.v3-empty p{margin:0;max-width:38ch;word-break:keep-all;font-size:13.5px;line-height:1.6}
.v3-empty .btn{pointer-events:auto;justify-self:center;margin-top:4px}
.v3-busy{position:absolute;left:12px;top:10px;font-size:11.5px;font-weight:600;color:var(--red);background:color-mix(in srgb,var(--panel) 88%,transparent);border:1px solid var(--rule);border-radius:999px;padding:3px 10px;pointer-events:none}
.v3-foot{position:absolute;left:12px;bottom:10px;font-size:11px;color:var(--pencil);pointer-events:none}
.v3-hint{position:absolute;right:12px;bottom:10px;font-size:11px;color:var(--pencil);pointer-events:none;opacity:.85}
.v3-viewer.plan .v3-hint::before{content:"평면 · "}
.v3-drawer{position:absolute;top:0;right:0;bottom:0;width:min(640px,100%);z-index:10;background:color-mix(in srgb,var(--panel) 97%,transparent);backdrop-filter:blur(6px);border-left:1px solid var(--rule);display:flex;flex-direction:column;box-shadow:-12px 0 32px -18px rgba(0,0,0,.35)}
.v3-dtabs{display:flex;gap:2px;padding:6px 6px 0;border-bottom:1px solid var(--rule);background:var(--paper2);align-items:center;overflow-x:auto}
.v3-dtabs button{padding:7px 10px;font-size:12.5px;font-weight:600;color:var(--pencil);border-radius:8px 8px 0 0;white-space:nowrap}
.v3-dtabs button[aria-selected="true"]{color:var(--ink);background:var(--panel);box-shadow:0 -1px 0 var(--rule),1px 0 0 var(--rule),-1px 0 0 var(--rule)}
.v3-dtabs .x{border-radius:8px;padding:6px 10px}
.v3-dbody{flex:1;min-height:0;overflow:auto;display:flex;flex-direction:column}
.v3-dbody .log{padding:12px 14px;gap:12px}
.v3-dbody .pane{overflow:auto}
.v3-drawer .gate{margin:0;border-radius:0;border-top:1px solid var(--rule)}
.v3-drawer .wsl{display:grid;grid-template-columns:34px 1fr;gap:10px;font-size:13.5px;line-height:1.55}
.v3-drawer .wsl .who{width:28px;height:28px;border-radius:50%;background:var(--paper2);display:grid;place-items:center;font-size:10px;font-weight:700;color:var(--pencil)}
.v3-drawer .wsl.u .who{background:var(--ink);color:var(--paper)}
.v3-drawer .wsl .body{min-width:0;word-break:keep-all;padding-top:4px}
.v3-drawer .wsl .body p{margin:0 0 6px}
.v3-drawer .wsl.err .body{color:var(--crit)}
.v3-drawer .wsl .asm{margin:4px 0 6px;padding-left:18px;font-size:12.5px;color:var(--ink2)}
.v3-drawer .chips,.v3-toast .chips{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 2px}
.v3-drawer .chips button,.v3-toast .chips button{border:1px solid var(--rule2);border-radius:999px;padding:3px 10px;font-size:12px;color:var(--ink2);background:var(--panel)}
.v3-drawer .chips button:hover,.v3-toast .chips button:hover{border-color:var(--red);color:var(--red)}
.v3-drawer .log p.empty{margin:0;font-size:13px;color:var(--pencil);line-height:1.6;word-break:keep-all}
.v3-drawer .params.p6{grid-template-columns:1.1fr .6fr .7fr .9fr 1fr 1.3fr}
.v3-drawer .params input::placeholder{color:var(--pencil);opacity:.8}
.v3-drawer .params select{appearance:auto}
.v3-toast{position:absolute;left:12px;right:12px;bottom:12px;z-index:9;max-width:720px;margin:0 auto;background:color-mix(in srgb,var(--panel) 94%,transparent);backdrop-filter:blur(8px);border:1px solid var(--rule2);border-radius:12px;box-shadow:var(--sh);padding:8px 12px 10px;font-size:13.5px}
.v3-toast.err{border-color:var(--crit)}
.v3-toast .tb{display:flex;align-items:center;gap:8px;margin-bottom:4px}
.v3-toast .tb button{font-size:12px;font-weight:600;color:var(--pencil);padding:2px 8px;border-radius:6px}
.v3-toast .tb button:hover{color:var(--red);background:var(--paper2)}
.v3-toast .tbody{max-height:120px;overflow:auto;line-height:1.55;word-break:keep-all}
.v3-toast .tbody p{margin:0 0 4px}
.v3-center .ask2{flex-shrink:0}
.v3-center .ask2 input:disabled{opacity:.6}
.v3-center .ask2 button:disabled{opacity:.45;cursor:not-allowed}
/* 우측: 선택 요소 · 시뮬 · 알림 */
.v3-elcard .v3-kv{grid-template-columns:auto 1fr}
.v3-score{display:flex;align-items:baseline;gap:12px;margin:2px 0 10px;cursor:help}
.v3-score b{font-weight:500;font-size:46px;line-height:1;letter-spacing:-.03em;font-variation-settings:"opsz" 96}
.v3-score span{display:flex;flex-direction:column;gap:2px}
.v3-score .grade{font-style:normal;font-family:"JetBrains Mono",monospace;font-weight:700;font-size:14px;color:var(--red);background:var(--red-soft);border-radius:6px;padding:1px 8px;align-self:flex-start}
.v3-score .grade.D,.v3-score .grade.E{color:var(--crit);background:var(--crit-soft)}
.v3-score .grade.C{color:var(--warn);background:color-mix(in srgb,var(--warn) 14%,transparent)}
.v3-score small{font-size:11px;color:var(--pencil);font-weight:600;letter-spacing:.04em}
.v3-gauges{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.v3-gauge{display:flex;flex-direction:column;align-items:center;gap:1px;padding:6px 2px;border-radius:9px;background:var(--paper2);cursor:help;color:var(--pencil)}
.v3-gauge svg{width:56px;height:56px;display:block}
.v3-gauge.good{color:var(--red)}.v3-gauge.mid{color:var(--warn)}.v3-gauge.bad{color:var(--crit)}
.v3-gauge b{font-family:"Fraunces",serif;font-weight:500;font-size:17px;line-height:1.1;color:var(--ink);margin-top:-6px;letter-spacing:-.01em}
.v3-gauge span{font-size:11.5px;font-weight:600;color:var(--ink2)}
.v3-gauge small{font-size:9.5px;color:var(--pencil)}
.v3-basis{margin-top:8px;font-size:11.5px;color:var(--pencil);line-height:1.45;word-break:keep-all}
.v3-notif{flex:1;min-height:200px;display:flex;flex-direction:column}
.v3-notif .badge{font-style:normal;font-family:"JetBrains Mono",monospace;font-size:10.5px;font-weight:700;color:#fff;background:var(--crit);border-radius:999px;padding:0 6px;line-height:16px;letter-spacing:0;text-transform:none}
.v3-nfilter{display:flex;gap:2px;flex-wrap:wrap}
.v3-nfilter button{font-size:11px;font-weight:600;color:var(--pencil);border-radius:999px;padding:2px 7px}
.v3-nfilter button[aria-pressed="true"]{background:var(--ink);color:var(--paper)}
.v3-nlist{flex:1;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:4px}
.v3-nlist p{margin:0;font-size:12.5px;line-height:1.5;word-break:keep-all}
.v3-nitem{display:grid;grid-template-columns:auto 1fr;gap:9px;align-items:start;text-align:left;padding:7px 9px;border-radius:9px;border:1px solid transparent;background:var(--paper2);width:100%}
.v3-nitem:hover{border-color:var(--rule2)}
.v3-nitem.read{opacity:.6;background:none}
.v3-nitem .dot{width:9px;height:9px;border-radius:50%;margin-top:5px;background:var(--pencil);display:inline-block}
.v3-nitem.applied .dot{background:#22a06b}.v3-nitem.warning .dot{background:#e0a64a}.v3-nitem.error .dot{background:var(--crit)}.v3-nitem.revit .dot{background:#2b7aa8}
.v3-nitem.applied .kind{color:#1a8a58}.v3-nitem.warning .kind{color:#a8711a}.v3-nitem.error .kind{color:var(--crit)}.v3-nitem.revit .kind{color:#2b7aa8}
.v3-nitem .nb{min-width:0}
.v3-nitem .nt{font-size:12.5px;font-weight:600;line-height:1.4;word-break:keep-all}
.v3-nitem .kind{font-size:10.5px;font-weight:700;letter-spacing:.04em;margin-right:6px;text-transform:uppercase;color:var(--pencil)}
.v3-nitem .nbody{font-size:12px;color:var(--ink2);line-height:1.45;margin-top:2px;overflow-wrap:anywhere}
.v3-nitem .nmeta{font-size:10.5px;color:var(--pencil);margin-top:3px}
@media (max-width:1100px){
  .v3{grid-template-columns:1fr;height:auto;min-height:0}
  .v3-left{display:grid;grid-template-columns:1fr 1fr;align-items:start;overflow:visible}
  .v3-left .v3-proj{grid-row:span 2}
  .v3-center{height:min(70vh,640px)}
  .v3-right{display:grid;grid-template-columns:1fr 1fr;align-items:start;overflow:visible}
  .v3-right .v3-elcard{grid-column:1/-1}
  .v3-notif{min-height:260px;max-height:420px}
}
@media (max-width:700px){
  .v3-left,.v3-right{grid-template-columns:1fr}
  .v3-center{height:min(70vh,560px)}
  .v3-drawer{width:100%}
  .v3-slider input{width:70px}
}
/* 3D 워크스페이스 · 밀도 개선(2차): 상단 스트립 · 좌측 카드(최근 실행/모델 통계/빠른 명령/검토) · 미리보기 라벨 · 시뮬 표 */
.v3-head{display:none}
.v3-strip{display:flex;gap:18px;flex-wrap:wrap;align-items:center;font-size:11.5px;color:var(--ink2);padding:10px 0 8px}
.v3-strip .dot{width:7px;height:7px;border-radius:50%;background:var(--pencil);display:inline-block;margin-right:6px;vertical-align:0}
.v3-strip .dot.on{background:var(--red)}.v3-strip .dot.warn{background:var(--warn)}
.v3{height:calc(100vh - 54px - 52px)}
.v3-card{padding:12px 14px}
.v3-cardhd{margin-bottom:6px}
.v3-cardhd .lbl small{font-weight:600;color:var(--pencil);letter-spacing:0;text-transform:none;margin-left:6px;font-size:10.5px}
.v3-list{display:flex;flex-direction:column;gap:5px}
.v3-list p,.v3-stats+p{margin:0;font-size:12.5px}
.v3-list .qrow{display:grid;grid-template-columns:auto 1fr auto;gap:4px 8px;align-items:center;font-size:12px;background:var(--paper2);border-radius:8px;padding:5px 9px}
.v3-list .qrow>span:first-of-type{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink2)}
.v3-list .qrow .st{font-size:10.5px;padding:2px 7px}
.v3-stats{display:grid;grid-template-columns:repeat(5,1fr);gap:4px}
.v3-stats>div{background:var(--paper2);border-radius:8px;padding:6px 4px;text-align:center;display:flex;flex-direction:column;gap:1px}
.v3-stats b{font-size:15px;font-weight:600;line-height:1.1}
.v3-stats span{font-size:10.5px;color:var(--pencil);font-weight:600}
.v3-chips{display:flex;flex-wrap:wrap;gap:5px}
.v3-chips button{border:1px solid var(--rule);border-radius:999px;padding:3px 10px;font-size:12px;color:var(--ink2);background:var(--panel)}
.v3-chips button:hover{border-color:var(--red);color:var(--red)}
.v3-checks{font-size:13px;font-weight:600;color:var(--red)}
.v3-checks.warn{color:var(--warn)}.v3-checks.err{color:var(--crit)}
.v3-checklist{margin:4px 0 0;padding-left:16px;font-size:12px;color:var(--ink2);line-height:1.45}
.v3-checklist li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.v3-empty{gap:2px;place-content:center;pointer-events:none}
.v3-empty b{font-size:13.5px;font-weight:600;color:var(--ink2)}
.v3-empty span{font-size:12px;color:var(--pencil)}
.v3-plabel{position:absolute;left:12px;top:10px;display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:600;color:var(--red);background:color-mix(in srgb,var(--panel) 88%,transparent);border:1px solid var(--rule);border-radius:999px;padding:3px 10px;pointer-events:none}
.v3-plabel i{width:7px;height:7px;border-radius:50%;background:var(--red);animation:bpulse 1.6s ease-in-out infinite}
.v3-viewer[data-status="preview"] .v3-busy{top:36px}
.v3-refresh{font-size:12.5px;font-weight:600;color:var(--red);border:1px solid var(--red);border-radius:7px;padding:4px 10px;background:var(--panel);white-space:nowrap}
.v3-refresh:hover{background:var(--red-soft)}
.v3-refresh:disabled{opacity:.5;cursor:default}
.v3-simtbl{width:100%;border-collapse:collapse;font-size:12.5px;margin-top:2px}
.v3-simtbl th{font-size:10.5px;font-weight:600;letter-spacing:.04em;color:var(--pencil);text-align:left;padding:2px 4px;border-bottom:1px solid var(--rule)}
.v3-simtbl td{padding:5px 4px;border-bottom:1px solid var(--hair);white-space:nowrap}
.v3-simtbl tr:last-child td{border-bottom:0}
.v3-simtbl .r{text-align:right}
.v3-simtbl td small{font-size:10px;color:var(--pencil)}
.v3-simtbl tr.good td b{color:var(--red)}.v3-simtbl tr.mid td b{color:var(--warn)}.v3-simtbl tr.bad td b{color:var(--crit)}
.v3-scoreline{margin-top:8px;font-size:12.5px;font-weight:600;color:var(--ink)}
.v3-formula{margin-top:6px;font-size:11.5px;color:var(--ink2)}
.v3-formula summary{cursor:pointer;color:var(--pencil);font-weight:600;font-size:11.5px}
.v3-formula ul{margin:4px 0 0;padding-left:16px;line-height:1.5}
.v3-score{margin:0 0 6px}
.v3-score b{font-size:40px}
.v3-gauges,.v3-basis{display:none}
@media (max-width:1100px){.v3{height:auto}.v3-left{grid-template-columns:1fr 1fr 1fr}.v3-left .v3-proj{grid-row:span 3}.v3-stats{grid-template-columns:repeat(5,1fr)}}
@media (max-width:700px){.v3-left{grid-template-columns:1fr}}

/* 대시보드 (frontend/sensor/{home-dash,ent-dash,charts}.js) — 토큰만 사용, 라이트/다크 자동, 2열 → 900px 미만 1열 */
.dash{padding-top:26px}
.dash-head{display:grid;grid-template-columns:auto 1fr auto;gap:16px;align-items:center;padding:6px 0 20px}
.dash-head .avatar{width:48px;height:48px;border-radius:50%;background:var(--red);color:#fff;display:grid;place-items:center;font-family:"Fraunces",serif;font-weight:600;font-size:20px;letter-spacing:-.02em}
.dash-head .avatar.ent{background:var(--ink);color:var(--paper);font-size:15px}
.dash-head h2{margin:0;font-size:24px;font-weight:600;line-height:1.2;letter-spacing:-.02em}
.dash-head p{margin:4px 0 0;color:var(--ink2);font-size:13px;word-break:keep-all}
.dash-head .pills{display:flex;gap:6px;flex-wrap:nowrap;justify-content:flex-end}
.dash-head .pill{white-space:nowrap}
.dash-head .pill.on{color:var(--red);border-color:color-mix(in srgb,var(--red) 50%,transparent);background:var(--red-soft)}
.dash-head .pill.warn{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 50%,transparent)}
.dash-head .pill.off{color:var(--pencil)}
.dash-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;align-items:stretch}
.dash-card{background:var(--panel);border:1px solid var(--rule);border-radius:12px;padding:14px 16px;min-width:0;min-height:0;display:flex;flex-direction:column;gap:10px}
.dash-card>svg,.dash-card>.dash-empty{flex:1 0 auto}
.dash button.busy,.dash .scenes button:disabled,.dash-room .chips button:disabled{opacity:.55;cursor:progress}
.dash-card.span2{grid-column:1/-1}
.dash-card>header{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
.dash-card>header h3{margin:0;font-size:15px;font-weight:600;letter-spacing:-.01em}
.dash-card>header .sub{font-size:12px;color:var(--pencil);margin-top:2px;word-break:keep-all}
.dash-card .foot{margin:auto 0 0;font-size:12px;color:var(--pencil);line-height:1.5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dash-empty{display:flex;align-items:center;justify-content:center;min-height:60px;padding:0 14px;border:1px dashed var(--rule2);border-radius:10px;color:var(--pencil);font-size:12.5px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dash .na{color:var(--pencil);font-size:12px;font-family:"Hanken Grotesk","IBM Plex Sans KR",sans-serif;font-weight:500}
.dash .tone.good{color:var(--red)}.dash .tone.mid{color:var(--warn)}.dash .tone.bad{color:var(--crit)}.dash .tone.none{color:var(--pencil)}
/* 방 타일 */
.dash-rooms{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
.dash-room{background:var(--paper2);border:1px solid var(--rule);border-radius:10px;padding:12px 14px;min-width:0;display:flex;flex-direction:column}
.dash-room.alarm{border-color:var(--crit);box-shadow:inset 0 0 0 1px var(--crit)}
.dash-room.off{border-style:dashed}
.dash-room .temp.na0,.dash-room.off .rh{color:var(--pencil)}
.dash-room .temp.na0 small{color:var(--rule2)}
.dash-bars.zero rect{opacity:.5}
.dash-room .top{display:flex;justify-content:space-between;align-items:center;gap:6px;font-size:13px}
.dash-room .top i{font-style:normal;font-size:11px;font-weight:700;letter-spacing:.02em;white-space:nowrap}
.dash-room .temp{font-family:"Fraunces",serif;font-weight:500;font-size:34px;line-height:1.05;letter-spacing:-.02em;margin-top:6px}
.dash-room .temp small{font-size:12px;font-family:"JetBrains Mono",monospace;font-weight:600;color:var(--pencil);margin-left:5px}
.dash-room .rh{font-size:12px;color:var(--ink2);margin-top:4px;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dash-room .spark{height:40px;margin-top:8px;display:flex;align-items:center}
.dash-room .spark svg{width:100%;height:40px;display:block}
.dash-room .chips{display:flex;gap:4px;margin-top:auto;padding-top:10px;flex-wrap:nowrap;overflow:hidden}
.dash-room .chips button{border:1px solid var(--rule2);border-radius:999px;padding:3px 9px;font-size:12px;line-height:1.3;color:var(--ink2);background:var(--panel);white-space:nowrap;flex:0 0 auto}
.dash-room .chips button[aria-pressed="true"]{background:var(--red);border-color:var(--red);color:#fff}
/* 2×3 큰 버튼 */
.dash-big{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.dash-big .bb{display:flex;flex-direction:column;align-items:flex-start;gap:6px;padding:12px;border:1px solid var(--rule);border-radius:10px;background:var(--paper2);text-align:left;min-height:88px;transition:border-color .15s}
.dash-big .bb svg{width:22px;height:22px;color:var(--pencil)}
.dash-big .bb b,.dash-big .bb small{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dash-big .bb b{font-size:13px;font-weight:600}
.dash-big .bb small{font-family:"JetBrains Mono",monospace;font-size:11px;color:var(--pencil)}
.dash-big .bb[aria-pressed="true"]{border-color:var(--red);background:var(--red-soft)}
.dash-big .bb[aria-pressed="true"] svg{color:var(--red)}
.dash-big .bb.gas[aria-pressed="false"],.dash-big .bb.door[aria-pressed="false"]{border-color:color-mix(in srgb,var(--red) 35%,transparent)}
.dash-big .bb.gas[aria-pressed="true"],.dash-big .bb.door[aria-pressed="true"]{border-color:var(--crit);background:var(--crit-soft)}
.dash-big .bb.gas[aria-pressed="true"] svg,.dash-big .bb.door[aria-pressed="true"] svg{color:var(--crit)}
.dash-big .bb:hover{border-color:var(--rule2)}
.dash-big .bb:disabled{opacity:.5;cursor:not-allowed}
/* 요금 비서 · KPI */
.dash-bill{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:14px;align-items:center}
.dash-bill>div{min-width:0}
.dash .kpi{display:flex;flex-direction:column;gap:2px;min-width:0}
.dash .kpi span,.dash .kpi b,.dash .kpi small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.dash .kpi span{font-size:11.5px;color:var(--pencil);font-weight:600;letter-spacing:.03em}
.dash .kpi b{font-family:"Fraunces",serif;font-weight:500;font-size:clamp(16px,1.45vw,24px);line-height:1.15;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.dash .kpi small{font-size:11.5px;color:var(--pencil)}
.dash .kpi.bad b{color:var(--crit)}
.dash-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
.dash-kpis .kpi{background:var(--paper2);border-radius:10px;padding:10px 12px}
.dash-bars{width:100%;height:auto;display:block;margin-top:6px}
.dash-legend{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--pencil);flex-wrap:wrap;line-height:1.3}
.dash-legend i{display:inline-block;width:14px;height:10px;border-radius:2px}
.dash-legend i.na{background:var(--paper2);border:1px solid var(--rule)}
.dash-heat{width:100%;height:auto;display:block}
/* 도넛 · 게이지 */
.dash-donut,.dash-gauge{display:flex;flex-direction:column;align-items:center;gap:2px;color:var(--pencil);text-align:center}
.dash-donut svg{width:96px;height:96px;display:block}
.dash-gauge svg{width:180px;max-width:100%;height:auto;display:block}
.dash-donut.good,.dash-gauge.good{color:var(--red)}.dash-donut.mid,.dash-gauge.mid{color:var(--warn)}.dash-donut.bad,.dash-gauge.bad{color:var(--crit)}
.dash-donut b,.dash-gauge b{font-size:13px;font-weight:600;color:var(--ink);margin-top:4px}
.dash-donut small,.dash-gauge small{font-size:11px;color:var(--pencil);word-break:keep-all}
.dash-score{display:grid;grid-template-columns:auto 1fr;gap:16px;align-items:center}
.dash-score ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px;font-size:12.5px}
.dash-score li{display:flex;justify-content:space-between;gap:10px;border-bottom:1px solid var(--hair);padding:3px 0}
.dash-score li .tone{font-family:"JetBrains Mono",monospace;font-size:11.5px;font-weight:600}
/* 웰니스 · 보고서 */
.dash-tips{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.dash-tips li{display:grid;grid-template-columns:auto minmax(0,1fr);gap:9px;align-items:start;background:var(--paper2);border-radius:9px;padding:8px 10px;font-size:13px;line-height:1.5;word-break:keep-all}
.dash-tips li span,.dash-report .nt,.dash-report .nbody{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.dash-tips li i{width:9px;height:9px;border-radius:50%;margin-top:6px;background:var(--pencil)}
.dash-tips li.good i{background:var(--red)}.dash-tips li.warn i{background:var(--warn)}.dash-tips li.crit i{background:var(--crit)}.dash-tips li.info i{background:var(--au)}
.dash-report{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}
.dash-report li{display:grid;grid-template-columns:auto minmax(0,1fr);gap:9px;align-items:start;padding:7px 9px;border-radius:9px;background:var(--paper2)}
.dash-report .dot{width:9px;height:9px;border-radius:50%;margin-top:5px;background:var(--pencil);display:inline-block}
.dash-report li.applied .dot{background:#22a06b}.dash-report li.warning .dot{background:var(--warn)}.dash-report li.error .dot{background:var(--crit)}.dash-report li.revit .dot{background:var(--au)}
.dash-report .nt{font-size:12.5px;font-weight:600;line-height:1.4;word-break:keep-all}
.dash-report .kind{font-size:10.5px;font-weight:700;letter-spacing:.04em;margin-right:6px;text-transform:uppercase;color:var(--pencil)}
.dash-report li.error .kind{color:var(--crit)}.dash-report li.warning .kind{color:var(--warn)}.dash-report li.applied .kind{color:#1a8a58}
.dash-report .nbody{font-size:12px;color:var(--ink2);line-height:1.45;margin-top:2px;overflow-wrap:anywhere}
.dash-report .nmeta{font-size:10.5px;color:var(--pencil);margin-top:3px}
.dash-total{display:flex;align-items:baseline;gap:8px}
.dash-total b{font-family:"Fraunces",serif;font-weight:500;font-size:28px;letter-spacing:-.02em;line-height:1}
.dash-total small{font-size:11.5px;color:var(--pencil)}
/* 3D 뷰어 박스(고정 높이) */
.dash-viewer{position:relative;height:340px;border-radius:10px;overflow:hidden;border:1px solid var(--rule);display:flex}
.dash-viewer .v3-viewer{flex:1}
/* 상세(접힘) */
.dash-details{margin-top:14px;border:1px solid var(--rule);border-radius:12px;background:var(--panel)}
.dash-details summary{cursor:pointer;padding:12px 18px;font-size:13px;font-weight:600;color:var(--ink2)}
.dash-details .body{padding:0 18px 18px}
@media (min-width:1800px){.dash-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.dash-card.span2{grid-column:span 2}.dash .kpi b{font-size:24px}}
@media (max-width:1200px){.dash-head h2{font-size:20px}.dash-head{gap:12px}}
@media (max-width:1100px){.dash-rooms{grid-template-columns:repeat(2,minmax(0,1fr))}.dash-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.dash .kpi b{font-size:20px}}
@media (max-width:900px){
  .dash-grid{grid-template-columns:1fr}
  .dash-head{grid-template-columns:auto 1fr}.dash-head .pills{grid-column:1/-1;justify-content:flex-start;flex-wrap:wrap}
  .dash-bill{grid-template-columns:1fr}.dash-bill .dash-donut{justify-self:center}
  .dash-viewer{height:300px}
}
@media (max-width:560px){.dash-rooms{grid-template-columns:1fr}.dash-big{grid-template-columns:repeat(2,minmax(0,1fr))}.dash-score{grid-template-columns:1fr}.dash-score .dash-gauge{justify-self:center}.dash-empty,.dash-card .foot{white-space:normal}}

/* 공사비 */
/* 공사비 산정 대시보드 (frontend/cost/{cost,cost-ui}.js) — 토큰만 사용(레이어 색은 고정 hex 견본), 2열 → 1100px 미만 1열, 1800px 이상 3열 */
.cost{display:flex;flex-direction:column;gap:14px;padding-top:22px}
.cost .muted{color:var(--pencil);font-size:12px;word-break:keep-all}
.cost-top{display:flex;flex-direction:column;gap:12px}
.cost-title h2{margin:0;font-size:24px;font-weight:600;letter-spacing:-.02em;line-height:1.2}
.cost-title .sub{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:6px}
.cost-engine{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:600;border:1px solid var(--rule2);border-radius:999px;padding:3px 10px;color:var(--ink2);background:var(--panel);white-space:nowrap}
.cost-engine i{width:8px;height:8px;border-radius:50%;background:var(--rule2)}
.cost-engine.on{color:var(--red);border-color:color-mix(in srgb,var(--red) 50%,transparent)}.cost-engine.on i{background:var(--red)}
.cost-engine.warn{color:var(--warn)}.cost-engine.warn i{background:var(--warn)}
.cost-engine.off{color:var(--pencil)}
.cost-ctrl{display:flex;flex-wrap:wrap;gap:8px;align-items:flex-end}
.cost-field{display:block;flex:1 1 120px;min-width:0;background:var(--panel);border:1px solid var(--rule);border-radius:10px;padding:7px 12px}
.cost-field:first-child{flex:2 1 260px}
.cost-search{flex:1.5 1 180px}
.cost-field span{display:block;font-size:10.5px;font-weight:600;letter-spacing:.05em;color:var(--pencil);text-transform:uppercase;white-space:nowrap}
.cost-field input,.cost-field select{display:block;width:100%;margin-top:3px;border:0;background:none;font:inherit;font-size:14px;color:var(--ink);padding:2px 0;outline:none;min-width:0}
.cost-ctrl .btn{flex:0 0 auto;padding:11px 24px}
.cost-srcline{font-size:11.5px;color:var(--pencil)}
.cost-kpis{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px}
.cost-kpi{background:var(--panel);border:1px solid var(--rule);border-radius:12px;padding:14px 16px;min-width:0}
.cost-kpi .k{font-size:12px;color:var(--pencil);font-weight:500;margin-bottom:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cost-kpi .v{display:flex;align-items:baseline;gap:6px;min-width:0;white-space:nowrap;overflow:hidden}
.cost-kpi .v b{font-family:"Fraunces",serif;font-weight:500;font-size:26px;line-height:1;letter-spacing:-.02em;overflow:hidden;text-overflow:ellipsis;min-width:0}
.cost-kpi .v small{font-size:11px;font-family:"JetBrains Mono",monospace;font-weight:600;color:var(--pencil);flex:none}
.cost-kpi .s{margin-top:6px;font-size:11.5px;color:var(--pencil);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cost-kpi.up .v b{color:var(--crit)}.cost-kpi.down .v b{color:var(--red)}
.cost-kpi.good .v b{color:var(--red)}.cost-kpi.mid .v b{color:var(--warn)}.cost-kpi.bad .v b{color:var(--crit)}
.cost-ring{width:26px;height:26px;flex:none;align-self:center}
.cost-ring.good{color:var(--red)}.cost-ring.mid{color:var(--warn)}.cost-ring.bad{color:var(--crit)}.cost-ring.none{color:var(--rule2)}
.cost-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.cost-card{background:var(--panel);border:1px solid var(--rule);border-radius:12px;padding:16px 18px;min-width:0;display:flex;flex-direction:column;gap:10px}
.cost-card>header{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;flex-wrap:wrap}
.cost-card>header h3{margin:0;font-size:15px;font-weight:600;letter-spacing:-.01em}
.cost-card>header .sub{font-size:12px;color:var(--pencil);margin-top:2px;word-break:keep-all}
.cost-card .foot{margin:0;font-size:12px;color:var(--pencil);line-height:1.5;word-break:keep-all}
.cost-3d{grid-column:1;grid-row:1}.cost-charts{grid-column:2;grid-row:1}.cost-sched{grid-column:1;grid-row:2}.cost-table{grid-column:2;grid-row:2}
.cost-vwrap{display:grid;grid-template-columns:minmax(0,1fr) 224px;gap:12px}
.cost-viewer{position:relative;display:flex;height:380px;border-radius:10px;overflow:hidden;border:1px solid var(--rule)}
.cost-viewer .v3-viewer{flex:1}
.cost-elcard{position:absolute;right:10px;top:10px;width:min(280px,calc(100% - 20px));background:color-mix(in srgb,var(--panel) 94%,transparent);border:1px solid var(--rule);border-radius:10px;padding:10px 12px;box-shadow:var(--sh);font-size:12.5px;z-index:2}
.cost-elcard .hd{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}
.cost-elcard .x,.cost-detail .x{border:0;background:none;font-size:18px;line-height:1;color:var(--pencil);cursor:pointer;padding:0 4px}
.cost-elcard .kv{display:grid;grid-template-columns:auto 1fr;gap:3px 10px}
.cost-elcard .kv span:nth-child(odd){color:var(--pencil);font-size:11px;font-weight:600}
.cost-elcard ul{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-direction:column;gap:2px}
.cost-elcard li{display:flex;justify-content:space-between;gap:8px;padding:3px 0;border-top:1px solid var(--hair);cursor:pointer}
.cost-elcard li span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cost-elcard li:hover{color:var(--red)}
.cost-layers{display:flex;flex-direction:column;gap:2px;font-size:12.5px;min-width:0}
.cost-layers .hd{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}
.cost-layers .lnk,.cost-chips button,.cost-tabs button{border:0;background:none;font:inherit;cursor:pointer}
.cost-layers .lnk{font-size:11.5px;color:var(--pencil)}.cost-layers .lnk:hover{color:var(--red)}
.cost-layers .row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:4px 8px;align-items:center;padding:4px;border-radius:8px}
.cost-layers .row.on{background:var(--red-soft)}
.cost-layers .row input{margin:0;accent-color:var(--red)}
.cost-layers .nm{display:flex;align-items:center;gap:6px;border:0;background:none;font:inherit;font-size:12.5px;color:var(--ink);cursor:pointer;min-width:0;padding:0;text-align:left}
.cost-layers .nm i{width:10px;height:10px;border-radius:3px;flex:none}
.cost-layers .nm small{color:var(--pencil);font-size:10.5px;white-space:nowrap}
.cost-layers .amt{font-size:12px;white-space:nowrap}
.cost-layers .bar{grid-column:2/4;height:4px;background:var(--hair);border-radius:99px;overflow:hidden}
.cost-layers .bar i{display:block;height:100%;border-radius:99px}
.cost-gbars,.cost-gantt{width:100%;height:auto;display:block}
.cost-legend{display:flex;gap:14px;flex-wrap:wrap;font-size:11.5px;color:var(--ink2);align-items:center}
.cost-legend i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:5px;vertical-align:-1px}
.cost-legend i.a{background:var(--ink)}.cost-legend i.b{background:var(--rule2)}
.cost-scen{display:flex;flex-direction:column;gap:6px}
.cost-scen .row{display:grid;grid-template-columns:150px minmax(0,1fr) auto;gap:10px;align-items:center;font-size:12.5px;padding:4px 6px;border-radius:8px}
.cost-scen .row.cur{background:var(--red-soft)}
.cost-scen .n b{display:block;font-weight:600}.cost-scen .n small{color:var(--pencil);font-size:10.5px}
.cost-scen .bar{height:10px;background:var(--hair);border-radius:99px;overflow:hidden}
.cost-scen .bar i{display:block;height:100%;background:var(--ink);opacity:.85;border-radius:99px}
.cost-scen .row.cur .bar i{background:var(--red)}
.cost-scen .v{text-align:right;white-space:nowrap}.cost-scen .v small{display:block;color:var(--pencil);font-size:10.5px}
.cost-rules{font-size:12.5px;color:var(--ink2)}
.cost-rules summary{cursor:pointer;color:var(--pencil);font-weight:500}
.cost-rules ul{margin:6px 0 0;padding-left:18px;line-height:1.6;max-height:280px;overflow:auto}
.cost-tabs{display:flex;gap:2px;background:var(--paper2);border-radius:9px;padding:3px}
.cost-tabs button{padding:5px 12px;border-radius:7px;font-size:12.5px;font-weight:600;color:var(--pencil)}
.cost-tabs button[aria-selected="true"]{background:var(--panel);color:var(--ink);box-shadow:var(--sh)}
.cost-chips{display:flex;flex-wrap:wrap;gap:6px}
.cost-chips button{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--rule2);border-radius:999px;padding:3px 10px;font-size:12px;color:var(--ink2);background:var(--panel)}
.cost-chips button i{width:8px;height:8px;border-radius:2px}
.cost-chips button small{color:var(--pencil);font-size:10.5px}
.cost-chips button[aria-pressed="true"]{background:var(--ink);border-color:var(--ink);color:var(--paper)}
.cost-chips button[aria-pressed="true"] small{color:inherit;opacity:.7}
.cost-tblwrap{max-height:560px;overflow:auto;border:1px solid var(--rule);border-radius:10px}
.cost-tbl{width:100%;border-collapse:separate;border-spacing:0;font-size:12.5px;min-width:640px}
.cost-tbl th{position:sticky;top:0;z-index:1;text-align:left;font-weight:600;font-size:10.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--pencil);padding:8px 10px;border-bottom:1px solid var(--rule);background:var(--paper2);white-space:nowrap}
.cost-tbl th.sort{cursor:pointer;user-select:none}.cost-tbl th.sort:hover{color:var(--red)}
.cost-tbl td{padding:7px 10px;border-bottom:1px solid var(--hair);vertical-align:middle}
.cost-tbl tbody tr:nth-child(even) td{background:color-mix(in srgb,var(--paper2) 45%,transparent)}
.cost-tbl tbody tr{cursor:pointer}.cost-tbl tbody tr:hover td{background:var(--paper2)}
.cost-tbl tbody tr[aria-selected="true"] td{background:var(--red-soft)}
.cost-tbl .r{text-align:right}.cost-tbl .b{font-weight:600}
.cost-tbl .wbs{font-size:11.5px;color:var(--pencil);white-space:nowrap}
.cost-tbl .nm b{font-weight:500;display:block;max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cost-tbl .nm small{display:block;color:var(--pencil);font-size:10.5px}
.cost-tbl .spec{color:var(--ink2);font-size:11.5px;max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cost-tbl .dot{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:7px}
.cost-tbl td.empty{text-align:center;color:var(--pencil);padding:28px 10px;cursor:default}
.cost-tbl tfoot td{position:sticky;bottom:0;background:var(--paper2);border-top:1px solid var(--rule);border-bottom:0;font-weight:600;font-size:12px}
.cost-src{display:inline-block;font-size:10.5px;font-weight:600;border-radius:999px;padding:2px 8px;white-space:nowrap;border:1px solid var(--rule2);color:var(--ink2)}
.cost-src.precomputed{color:var(--red);border-color:color-mix(in srgb,var(--red) 45%,transparent);background:var(--red-soft)}
.cost-src.model{color:var(--au);border-color:color-mix(in srgb,var(--au) 45%,transparent)}
.cost-src.fallback{color:var(--crit);border-color:color-mix(in srgb,var(--crit) 45%,transparent);background:var(--crit-soft)}
.cost-detail{border:1px solid var(--rule);border-radius:10px;padding:12px 14px;background:var(--paper2);font-size:12.5px}
.cost-detail .hd{display:flex;align-items:center;gap:10px;margin-bottom:8px}.cost-detail .hd>div{flex:1;min-width:0}
.cost-detail .cols,.cost-basis .cols{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 18px}
.cost-detail dl{margin:0;display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 10px}
.cost-detail dt{color:var(--pencil);font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;padding-top:2px}
.cost-detail dd{margin:0;min-width:0;overflow-wrap:anywhere}
.cost-splitwrap{min-width:160px}
.cost-split{display:flex;height:8px;border-radius:99px;overflow:hidden;background:var(--hair)}
.cost-split i{display:block;height:100%}
.cost-split .m,.cost-splitlg .m::before{background:var(--ink)}.cost-split .l,.cost-splitlg .l::before{background:var(--red)}.cost-split .e,.cost-splitlg .e::before{background:var(--warn)}
.cost-split.empty{background:none;font-size:11.5px;color:var(--pencil);height:auto}
.cost-splitlg{display:flex;gap:10px;margin-top:4px;font-size:10.5px;color:var(--ink2)}
.cost-splitlg span::before{content:"";display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:4px}
.cost-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:4px;font-size:12.5px;line-height:1.5;color:var(--ink2)}
.cost-list li{padding-left:12px;position:relative;word-break:keep-all;overflow-wrap:anywhere}
.cost-list li::before{content:"";position:absolute;left:0;top:9px;width:5px;height:5px;border-radius:50%;background:var(--pencil)}
.cost-list.warn li{padding-left:0;display:grid;grid-template-columns:auto 1fr;gap:6px;align-items:start}
.cost-list.warn li::before{display:none}
.cost-warn{color:var(--warn);margin-top:2px}
.cost-skel{display:flex;flex-direction:column;gap:8px}
.cost-skel i{display:block;border-radius:6px;background:linear-gradient(90deg,var(--paper2) 25%,var(--hair) 37%,var(--paper2) 63%);background-size:400% 100%;animation:costshine 1.4s ease infinite}
@keyframes costshine{0%{background-position:100% 0}100%{background-position:0 0}}
.cost-toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);background:var(--ink);color:var(--paper);padding:9px 16px;border-radius:999px;font-size:13px;font-weight:600;box-shadow:var(--sh);z-index:50}
@media (min-width:1800px){.cost-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.cost-3d{grid-column:1/3}.cost-charts{grid-column:3}.cost-sched{grid-column:1;grid-row:2}.cost-table{grid-column:2/4;grid-row:2}}
@media (max-width:1400px){.cost-kpis{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:1100px){.cost-grid{grid-template-columns:1fr}.cost-3d,.cost-charts,.cost-sched,.cost-table{grid-column:auto;grid-row:auto}}
@media (max-width:760px){.cost-kpis{grid-template-columns:1fr 1fr}.cost-vwrap{grid-template-columns:1fr}.cost-viewer{height:300px}.cost-detail .cols,.cost-basis .cols{grid-template-columns:1fr}.cost-scen .row{grid-template-columns:110px minmax(0,1fr) auto}}

/* 연동 모니터링 (frontend/revit-cad/monitor.js — MonitorPage · NewPcBanner · 타임라인 스트립) */
.mon .pagehead{padding-bottom:14px}
.mon-sum{display:flex;gap:8px;flex-wrap:wrap;align-items:end}
.mon-sum .chip{display:flex;align-items:baseline;gap:6px;font-size:12px;color:var(--pencil);background:var(--panel);border:1px solid var(--rule);border-radius:10px;padding:8px 12px;white-space:nowrap}
.mon-sum .chip b{font-family:"Fraunces",serif;font-weight:500;font-size:22px;line-height:1;color:var(--ink);letter-spacing:-.02em}
.mon-sum .chip.on b{color:#16a34a}.mon-sum .chip.revit b{color:var(--au)}.mon-sum .chip.off b{color:var(--pencil)}
.mon-tools{align-items:center;margin-bottom:10px;font-size:12.5px}
.mon-tools a.btn{text-decoration:none;display:inline-block}
.mon-probe{margin:0 0 10px;padding:9px 13px;border-radius:10px;font-size:13px;background:var(--paper2);border:1px solid var(--rule);word-break:keep-all;line-height:1.5}
.mon-probe.ok{background:var(--red-soft);border-color:color-mix(in srgb,var(--red) 35%,transparent)}
.mon-probe.bad{background:color-mix(in srgb,var(--warn) 12%,transparent);border-color:color-mix(in srgb,var(--warn) 45%,transparent)}
.mon-probe.blk{background:var(--crit-soft);border-color:color-mix(in srgb,var(--crit) 40%,transparent)}
.mon-probe small{color:var(--pencil)}
.mon-tb td{vertical-align:middle;font-size:13px}
.mon-tb tr.off td{color:var(--pencil)}
.mon-tb tr.off td .t,.mon-tb tr.off td.t{color:var(--ink2)}
.mon-tb td.t small{display:block;font-weight:400;font-size:11.5px}
.mon-tb small.warn{color:var(--warn);font-weight:600}
.mon-tag{font-style:normal;font-size:10.5px;font-weight:700;letter-spacing:.03em;color:var(--red);background:var(--red-soft);border-radius:999px;padding:1px 7px;margin-left:6px;vertical-align:1px;white-space:nowrap}
.mon-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--rule2);margin-right:7px;vertical-align:0}
.mon-dot.revit{background:#16a34a}
.mon-tlcell{min-width:180px}
.mon-tlcell .lnkbtn{margin-left:6px;vertical-align:middle}
.mon-strip{width:calc(100% - 52px);max-width:260px;height:12px;display:inline-block;vertical-align:middle;border-radius:3px;overflow:hidden;background:var(--paper2)}
.mon-strip rect.off{fill:var(--rule)}
.mon-strip rect.agent{fill:#3aa7a0}
.mon-strip rect.revit{fill:#16a34a}
.mon-evrow td{background:var(--paper2);padding-top:6px;padding-bottom:8px}
.mon-ev{list-style:none;margin:0;padding:0;display:flex;gap:6px 18px;flex-wrap:wrap;font-size:12px}
.mon-ev li{display:inline-flex;align-items:baseline;gap:4px}
.mon-ev li::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--pencil);align-self:center}
.mon-ev li.online::before{background:#16a34a}.mon-ev li.offline::before{background:var(--crit)}.mon-ev li.revit_open::before,.mon-ev li.revit_closed::before{background:var(--au)}.mon-ev li.agent_update::before{background:var(--warn)}
.mon-ev li small{color:var(--pencil)}
.mon-empty{text-align:center;color:var(--pencil);padding:26px 12px!important;word-break:keep-all}
.mon-legend{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--pencil);margin-top:8px;flex-wrap:wrap}
.mon-legend i{display:inline-block;width:14px;height:10px;border-radius:2px;background:var(--rule)}
.mon-legend i.agent{background:#3aa7a0}.mon-legend i.revit{background:#16a34a}
/* 새 컴퓨터 감지 배너(NewPcBanner) — 셸 헤더 아래에 마운트해도 게스트 배너와 같은 폭 */
.newpc-banner{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:10px auto 10px;max-width:820px;width:100%;padding:10px 14px;border-radius:12px;background:color-mix(in srgb,var(--au) 10%,var(--panel));border:1px solid color-mix(in srgb,var(--au) 40%,transparent);font-size:13px;color:var(--ink2);line-height:1.5;word-break:keep-all}
.newpc-banner b{color:var(--ink)}
.newpc-banner small{color:var(--pencil)}
.newpc-banner .btnrow{align-items:center}
.newpc-banner a.btn{text-decoration:none;display:inline-block}
@media (max-width:900px){.mon-head{grid-template-columns:1fr}.mon-sum{justify-content:flex-start}.mon-tb th:nth-child(5),.mon-tb td:nth-child(5){display:none}}
@media (max-width:640px){.newpc-banner{margin:10px 12px;width:auto}.mon-tb th:nth-child(4),.mon-tb td:nth-child(4),.mon-tb th:nth-child(7),.mon-tb td:nth-child(7){display:none}}

/* ===== 목업(가상 주택) 표시 · 스위치 ===== */
.demo-pill{display:inline-flex;align-items:center;gap:7px;font-size:11.5px;font-weight:700;letter-spacing:.04em;color:var(--red);background:var(--red-soft);border:1px solid color-mix(in srgb,var(--red) 45%,transparent);border-radius:999px;padding:4px 11px;white-space:nowrap}
.demo-pill i{width:7px;height:7px;border-radius:50%;background:var(--red);animation:bpulse 1.6s ease-in-out infinite}
.demo-pill:hover{background:var(--red);color:#fff}
.demo-pill:hover i{background:#fff}
.tg.demo-switch{flex-shrink:0;text-transform:none;letter-spacing:0;font-size:12.5px;color:var(--ink2)}
.tg.demo-switch[data-on="1"] i{background:var(--red);border-color:var(--red)}
.tg.demo-switch[data-on="1"] i::after{background:#fff}

/* 와이드 */
/* 셸(shell.js applyScale)이 실효 폭(innerWidth ÷ 배율)으로 :root[data-wide="3"|"4"] 를 붙인다 — 배율이 걸리면 미디어쿼리 폭과 레이아웃 폭이 달라 속성으로 판단한다.
   3: 실효 폭 ≥ 1800px · 4: ≥ 2200px. 배율 100% 면 실효 폭 = 창 폭. */
:root[data-wide] .inner{max-width:1760px}
:root[data-wide] .dash-grid{grid-template-columns:repeat(3,1fr)}
:root[data-wide] .dash-card.span2{grid-column:span 2}
:root[data-wide] .two:has(> :nth-child(3)),:root[data-wide] .figs:has(> :nth-child(3)){grid-template-columns:repeat(3,1fr)}
:root[data-wide] .form{grid-template-columns:repeat(6,1fr)}
:root[data-wide] .sens,:root[data-wide] .devgrid{grid-template-columns:repeat(6,1fr)}
:root[data-wide] .stats{grid-template-columns:repeat(4,1fr)}
:root[data-wide] .dash-rooms{grid-template-columns:repeat(4,1fr)}
:root[data-wide] .chat .thread,:root[data-wide] .chat .empty,:root[data-wide] .compwrap{width:min(880px,100%)}
:root[data-wide] .v3{grid-template-columns:320px minmax(0,1fr) 380px}
:root[data-wide="4"] .inner{max-width:2120px}
:root[data-wide="4"] .dash-grid{grid-template-columns:repeat(4,1fr)}
:root[data-wide="4"] .dash-card.span2{grid-column:span 2}
:root[data-wide="4"] .v3{grid-template-columns:340px minmax(0,1fr) 420px}
:root[data-wide="4"] .modgrid{grid-template-columns:repeat(5,1fr)!important}

/* 탄소 */
/* 탄소배출 대시보드 (frontend/carbon/{carbon,carbon-ui}.js) — 토큰만 사용(레이어·강도 색은 고정 hex 견본), 2열 → 1100px 미만 1열, 1800px 이상 3열 */
.carbon{display:flex;flex-direction:column;gap:14px;padding-top:22px}
.carbon .muted{color:var(--pencil);font-size:12px;word-break:keep-all}
.carbon-top{display:flex;flex-direction:column;gap:12px}
.carbon-title h2{margin:0;font-size:24px;font-weight:600;letter-spacing:-.02em;line-height:1.2}
.carbon-title .sub{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:6px}
.carbon-engine{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:600;border:1px solid var(--rule2);border-radius:999px;padding:3px 10px;color:var(--ink2);background:var(--panel);white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}
.carbon-engine i{width:8px;height:8px;border-radius:50%;background:var(--rule2);flex:none}
.carbon-engine.on{color:var(--red);border-color:color-mix(in srgb,var(--red) 50%,transparent)}.carbon-engine.on i{background:var(--red)}
.carbon-engine.warn{color:var(--warn)}.carbon-engine.warn i{background:var(--warn)}
.carbon-engine.bad{color:var(--crit)}.carbon-engine.bad i{background:var(--crit)}
.carbon-engine.off,.carbon-engine.wait{color:var(--pencil)}
.carbon-ctrl{display:flex;flex-wrap:wrap;gap:8px;align-items:flex-end}
.carbon-field{display:block;flex:1 1 120px;min-width:0;background:var(--panel);border:1px solid var(--rule);border-radius:10px;padding:7px 12px}
.carbon-field:first-child{flex:2 1 260px}
.carbon-search{flex:1.5 1 180px}
.carbon-field span{display:block;font-size:10.5px;font-weight:600;letter-spacing:.05em;color:var(--pencil);text-transform:uppercase;white-space:nowrap}
.carbon-field input,.carbon-field select{display:block;width:100%;margin-top:3px;border:0;background:none;font:inherit;font-size:14px;color:var(--ink);padding:2px 0;outline:none;min-width:0}
.carbon-ctrl .btn{flex:0 0 auto;padding:11px 24px}
.carbon-srcline{font-size:11.5px;color:var(--pencil)}
.carbon-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px}
.carbon-kpi{background:var(--panel);border:1px solid var(--rule);border-radius:12px;padding:14px 16px;min-width:0}
.carbon-kpi .k{font-size:12px;color:var(--pencil);font-weight:500;margin-bottom:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.carbon-kpi .v{display:flex;align-items:baseline;gap:6px;min-width:0;white-space:nowrap;overflow:hidden}
.carbon-kpi .v b{font-family:"Fraunces",serif;font-weight:500;font-size:26px;line-height:1;letter-spacing:-.02em;overflow:hidden;text-overflow:ellipsis;min-width:0}
.carbon-kpi .v small{font-size:11px;font-family:"JetBrains Mono",monospace;font-weight:600;color:var(--pencil);flex:none}
.carbon-kpi .s{margin-top:6px;font-size:11.5px;color:var(--pencil);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.carbon-kpi.empty .v b{color:var(--pencil)}
.carbon-kpi.good .v b{color:var(--red)}.carbon-kpi.mid .v b{color:var(--warn)}.carbon-kpi.bad .v b{color:var(--crit)}
.carbon-ring{width:26px;height:26px;flex:none;align-self:center}
.carbon-ring.good{color:var(--red)}.carbon-ring.mid{color:var(--warn)}.carbon-ring.bad{color:var(--crit)}.carbon-ring.none{color:var(--rule2)}
.carbon-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.carbon-card{background:var(--panel);border:1px solid var(--rule);border-radius:12px;padding:16px 18px;min-width:0;display:flex;flex-direction:column;gap:10px}
.carbon-card header{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;flex-wrap:wrap}
.carbon-card header h3{margin:0;font-size:15px;font-weight:600;letter-spacing:-.01em}
.carbon-card header .sub{font-size:12px;color:var(--pencil);margin-top:2px;word-break:keep-all}
.carbon-card .foot{margin:0;font-size:12px;color:var(--pencil);line-height:1.5;word-break:keep-all}
.carbon-3d{grid-column:1;grid-row:1}.carbon-charts{grid-column:2;grid-row:1}.carbon-scenario{grid-column:1;grid-row:2}.carbon-table{grid-column:2;grid-row:2}
.carbon-vwrap{display:grid;grid-template-columns:minmax(0,1fr) 236px;gap:12px}
.carbon-viewer{position:relative;display:flex;height:380px;border-radius:10px;overflow:hidden;border:1px solid var(--rule)}
.carbon-viewer .v3-viewer{flex:1}
.carbon-elcard{position:absolute;right:10px;top:10px;width:min(290px,calc(100% - 20px));background:color-mix(in srgb,var(--panel) 94%,transparent);border:1px solid var(--rule);border-radius:10px;padding:10px 12px;box-shadow:var(--sh);font-size:12.5px;z-index:2}
.carbon-elcard .hd{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}
.carbon-elcard .x,.carbon-detail .x{border:0;background:none;font-size:18px;line-height:1;color:var(--pencil);cursor:pointer;padding:0 4px}
.carbon-elcard .kv{display:grid;grid-template-columns:auto 1fr;gap:3px 10px}
.carbon-elcard .kv span:nth-child(odd){color:var(--pencil);font-size:11px;font-weight:600}
.carbon-elcard ul{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-direction:column;gap:2px}
.carbon-elcard li{display:flex;justify-content:space-between;gap:8px;padding:3px 0;border-top:1px solid var(--hair);cursor:pointer}
.carbon-elcard li span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.carbon-elcard li:hover{color:var(--red)}
.carbon-int{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:600;white-space:nowrap}
.carbon-int i{width:10px;height:10px;border-radius:3px;flex:none;background:var(--rule2)}
.carbon-int small{font-weight:500;color:var(--pencil)}
.carbon-int.good{color:var(--red)}.carbon-int.mid{color:var(--warn)}.carbon-int.bad{color:var(--crit)}
.carbon-cats{display:flex;flex-wrap:wrap;gap:6px 14px;padding-top:4px;border-top:1px solid var(--hair)}
.carbon-layers{display:flex;flex-direction:column;gap:2px;font-size:12.5px;min-width:0}
.carbon-layers .hd{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}
.carbon-layers .lnk,.carbon-chips button,.carbon-bars .row{border:0;background:none;font:inherit;cursor:pointer}
.carbon-layers .lnk{font-size:11.5px;color:var(--pencil)}.carbon-layers .lnk:hover{color:var(--red)}
.carbon-layers .row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:4px 8px;align-items:center;padding:4px;border-radius:8px}
.carbon-layers .row.on{background:var(--red-soft)}
.carbon-layers .row input{margin:0;accent-color:var(--red)}
.carbon-layers .nm{display:flex;align-items:center;gap:6px;border:0;background:none;font:inherit;font-size:12.5px;color:var(--ink);cursor:pointer;min-width:0;padding:0;text-align:left}
.carbon-layers .nm i{width:10px;height:10px;border-radius:3px;flex:none}
.carbon-layers .nm small{color:var(--pencil);font-size:10.5px;white-space:nowrap}
.carbon-layers .amt{font-size:12px;white-space:nowrap}
.carbon-layers .bar{grid-column:2/4;height:5px;background:var(--hair);border-radius:99px;overflow:hidden}
.carbon-layers .bar i{display:block;height:100%;border-radius:99px}
.carbon-legend{display:flex;align-items:center;gap:5px;font-size:11px;color:var(--pencil);margin-top:6px;flex-wrap:wrap}
.carbon-legend i{display:inline-block;width:14px;height:9px;border-radius:2px;background:var(--rule)}
.carbon-legend i.na{background:var(--rule2)}
.carbon-two{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-top:8px;padding-top:10px;border-top:1px solid var(--hair)}
.carbon-two>div{display:flex;flex-direction:column;gap:8px;min-width:0}
.carbon-bars{display:flex;flex-direction:column;gap:4px}
.carbon-bars .row{display:grid;grid-template-columns:150px minmax(0,1fr) auto;gap:10px;align-items:center;font-size:12.5px;padding:3px 6px;border-radius:8px;color:inherit;text-align:left;width:100%}
.carbon-bars .row:hover{background:var(--paper2)}
.carbon-bars .row.rest{cursor:default;opacity:.75}
.carbon-bars .n{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.carbon-bars .n .px,.carbon-chips .px{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--warn);margin-left:5px;vertical-align:1px}
.carbon-bars .bar{height:10px;background:var(--hair);border-radius:99px;overflow:hidden}
.carbon-bars .bar i{display:block;height:100%;background:var(--ink);opacity:.85;border-radius:99px}
.carbon-bars .v{text-align:right;white-space:nowrap}.carbon-bars .v small{display:block;color:var(--pencil);font-size:10.5px}
.carbon-donut{display:grid;grid-template-columns:110px minmax(0,1fr);gap:12px;align-items:center}
.carbon-donut svg{width:110px;height:110px;display:block}
.carbon-donut .lg{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:5px;font-size:12px;min-width:0}
.carbon-donut .lg li{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;gap:6px;align-items:center}
.carbon-donut .lg i{width:10px;height:10px;border-radius:3px}
.carbon-donut .lg .n{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.carbon-donut .lg .p{color:var(--pencil);font-size:11px}
.carbon-life{display:flex;flex-direction:column;gap:8px}
.carbon-life .bar{display:flex;height:18px;border-radius:6px;overflow:hidden;background:var(--hair);gap:2px}
.carbon-life .bar i{display:block;height:100%}
.carbon-life i.embodied{background:var(--ink)}.carbon-life i.operational{background:var(--red)}
.carbon-life .lg{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--ink2)}
.carbon-life .lg i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:-1px}
.carbon-life .lg small{color:var(--pencil)}.carbon-life .lg .sum{margin-left:auto}
.carbon-scen{display:flex;flex-direction:column;gap:6px}
.carbon-scen .row{display:grid;grid-template-columns:150px minmax(0,1fr) auto;gap:10px;align-items:center;font-size:12.5px;padding:4px 6px;border-radius:8px}
.carbon-scen .row.cur{background:var(--red-soft)}
.carbon-scen .n b{display:block;font-weight:600}.carbon-scen .n small{color:var(--pencil);font-size:10.5px}
.carbon-scen .bar{height:10px;background:var(--hair);border-radius:99px;overflow:hidden}
.carbon-scen .bar i{display:block;height:100%;background:var(--ink);opacity:.85;border-radius:99px}
.carbon-scen .row.cur .bar i{background:var(--red)}
.carbon-scen .v{text-align:right;white-space:nowrap;min-width:72px}.carbon-scen .v small{display:block;color:var(--pencil);font-size:10.5px}
.carbon-scen .v small.down{color:var(--red)}.carbon-scen .v small.up{color:var(--crit)}
.carbon-hints{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:6px;font-size:12.5px;line-height:1.5;color:var(--ink2)}
.carbon-hints li{padding:7px 10px 7px 30px;position:relative;border-radius:8px;background:var(--paper2);word-break:keep-all}
.carbon-hints li::before{content:"";position:absolute;left:12px;top:12px;width:8px;height:8px;border-radius:50%;background:var(--au)}
.carbon-hints li.warn::before{background:var(--warn)}.carbon-hints li.good::before{background:var(--red)}.carbon-hints li.none::before{background:var(--rule2)}
.carbon-rules{font-size:12.5px;color:var(--ink2)}
.carbon-rules summary{cursor:pointer;color:var(--pencil);font-weight:500}
.carbon-rules ul{margin:6px 0 0;padding-left:18px;line-height:1.6;max-height:280px;overflow:auto}
.carbon-chips{display:flex;flex-wrap:wrap;gap:6px}
.carbon-chips button{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--rule2);border-radius:999px;padding:3px 10px;font-size:12px;color:var(--ink2);background:var(--panel)}
.carbon-chips button i{width:8px;height:8px;border-radius:2px}
.carbon-chips button i.px{border-radius:50%;margin-left:0}
.carbon-chips button small{color:var(--pencil);font-size:10.5px}
.carbon-chips button[aria-pressed="true"]{background:var(--ink);border-color:var(--ink);color:var(--paper)}
.carbon-chips button[aria-pressed="true"] small{color:inherit;opacity:.7}
.carbon-tblwrap{max-height:560px;overflow:auto;border:1px solid var(--rule);border-radius:10px}
.carbon-tbl{width:100%;border-collapse:separate;border-spacing:0;font-size:12.5px;min-width:820px}
.carbon-tbl th{position:sticky;top:0;z-index:1;text-align:left;font-weight:600;font-size:10.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--pencil);padding:8px 10px;border-bottom:1px solid var(--rule);background:var(--paper2);white-space:nowrap}
.carbon-tbl th.sort{cursor:pointer;user-select:none}.carbon-tbl th.sort:hover{color:var(--red)}
.carbon-tbl td{padding:7px 10px;border-bottom:1px solid var(--hair);vertical-align:middle}
.carbon-tbl tbody tr:nth-child(even) td{background:color-mix(in srgb,var(--paper2) 45%,transparent)}
.carbon-tbl tbody tr{cursor:pointer}.carbon-tbl tbody tr:hover td{background:var(--paper2)}
.carbon-tbl tbody tr[aria-selected="true"] td{background:var(--red-soft)}
.carbon-tbl tbody tr.zero td{color:var(--ink2)}
.carbon-tbl .r{text-align:right}.carbon-tbl .b{font-weight:600}
.carbon-tbl .wt{font-size:11.5px;color:var(--ink2);white-space:nowrap;max-width:120px;overflow:hidden;text-overflow:ellipsis}
.carbon-tbl .nm b{font-weight:500;display:block;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.carbon-tbl .nm small{display:block;color:var(--pencil);font-size:10.5px}
.carbon-tbl .spec{color:var(--ink2);font-size:11.5px;max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.carbon-tbl .key{font-size:11px;max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.carbon-tbl .dot{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:7px}
.carbon-tbl td.empty{text-align:center;color:var(--pencil);padding:28px 10px;cursor:default}
.carbon-tbl tfoot td{position:sticky;bottom:0;background:var(--paper2);border-top:1px solid var(--rule);border-bottom:0;font-weight:600;font-size:12px}
.carbon-st,.carbon-stage{display:inline-block;font-size:10.5px;font-weight:600;border-radius:999px;padding:2px 8px;white-space:nowrap;border:1px solid var(--rule2);color:var(--ink2)}
.carbon-st.mapped{color:var(--red);border-color:color-mix(in srgb,var(--red) 45%,transparent);background:var(--red-soft)}
.carbon-st.proxy{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 45%,transparent)}
.carbon-st.unconverted{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 45%,transparent);background:color-mix(in srgb,var(--warn) 12%,transparent)}
.carbon-st.unmapped{color:var(--crit);border-color:color-mix(in srgb,var(--crit) 45%,transparent);background:var(--crit-soft)}
.carbon-stage.A1A3{color:var(--ink);border-color:var(--ink)}
.carbon-stage.A5{color:var(--red);border-color:color-mix(in srgb,var(--red) 45%,transparent)}
.carbon-stage.excluded,.carbon-stage.unmapped{color:var(--pencil)}
.carbon-detail{border:1px solid var(--rule);border-radius:10px;padding:12px 14px;background:var(--paper2);font-size:12.5px}
.carbon-detail .hd{display:flex;align-items:center;gap:10px;margin-bottom:8px;flex-wrap:wrap}.carbon-detail .hd>div{flex:1;min-width:0}
.carbon-detail .cols,.carbon-basis .cols{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 18px}
.carbon-detail dl{margin:0;display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 10px}
.carbon-detail dt{color:var(--pencil);font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;padding-top:2px}
.carbon-detail dd{margin:0;min-width:0;overflow-wrap:anywhere}
.carbon-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:4px;font-size:12.5px;line-height:1.5;color:var(--ink2)}
.carbon-list li{padding-left:12px;position:relative;word-break:keep-all;overflow-wrap:anywhere}
.carbon-list li::before{content:"";position:absolute;left:0;top:9px;width:5px;height:5px;border-radius:50%;background:var(--pencil)}
.carbon-list.warn li{padding-left:0;display:grid;grid-template-columns:auto 1fr;gap:6px;align-items:start}
.carbon-list.warn li::before{display:none}
.carbon-warn{color:var(--warn);margin-top:2px}
.carbon-skel{display:flex;flex-direction:column;gap:8px}
.carbon-skel i{display:block;border-radius:6px;background:linear-gradient(90deg,var(--paper2) 25%,var(--hair) 37%,var(--paper2) 63%);background-size:400% 100%;animation:carbonshine 1.4s ease infinite}
@keyframes carbonshine{0%{background-position:100% 0}100%{background-position:0 0}}
.carbon-toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);background:var(--ink);color:var(--paper);padding:9px 16px;border-radius:999px;font-size:13px;font-weight:600;box-shadow:var(--sh);z-index:50}
@media (min-width:1800px){.carbon-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.carbon-3d{grid-column:1/3}.carbon-charts{grid-column:3}.carbon-scenario{grid-column:1;grid-row:2}.carbon-table{grid-column:2/4;grid-row:2}}
@media (max-width:1100px){.carbon-grid{grid-template-columns:1fr}.carbon-3d,.carbon-charts,.carbon-scenario,.carbon-table{grid-column:auto;grid-row:auto}}
@media (max-width:760px){.carbon-kpis{grid-template-columns:1fr 1fr}.carbon-vwrap{grid-template-columns:1fr}.carbon-viewer{height:300px}.carbon-two,.carbon-detail .cols,.carbon-basis .cols{grid-template-columns:1fr}.carbon-bars .row,.carbon-scen .row{grid-template-columns:110px minmax(0,1fr) auto}.carbon-donut{grid-template-columns:90px minmax(0,1fr)}.carbon-donut svg{width:90px;height:90px}}

/* ===== shell: landing composer · sidebar motion (shell.js Sidebar/SideGroup · home.js DualHero) ===== */
/* 랜딩 히어로 안의 채팅 컴포저 — 채팅 화면의 sticky 컴포저를 정적 블록으로 */
.hero .hero-comp{margin:4px 0 0}
.hero .hero-comp .compwrap{position:static;width:100%;padding:0;background:none}
.hero .hero-comp .chat-foot,.hero .hero-comp .foot{font-size:11.5px;color:var(--pencil);padding:6px 2px 0}
/* 사이드바 접기/펼치기: grid 열 폭 전환 + 내용 페이드. 내용은 고정 폭(264px)이라 폭이 줄어도 재배치 없이 잘린다 */
.sheet{transition:grid-template-columns .22s ease}
.side{min-width:0;transition:opacity .18s ease,visibility 0s linear 0s,border-color .22s ease}
.side>*{width:264px;flex-shrink:0}
.side .grp-body.grow{flex:1;min-height:0}
.sheet[data-collapsed="1"] .side{opacity:0;visibility:hidden;border-right-color:transparent;transition:opacity .16s ease,visibility 0s linear .22s,border-color .22s ease}
/* 그룹 헤더(셰브런) */
.side .grp.grp-row{padding-right:10px;padding-left:10px}
.side .grp-btn{display:flex;align-items:center;gap:4px;flex:1;min-width:0;padding:2px 6px 2px 4px;border-radius:6px;font:inherit;font-size:11px;font-weight:600;letter-spacing:.04em;color:var(--pencil);text-align:left}
.side .grp-btn:hover{background:var(--rule);color:var(--ink)}
.side .grp-btn svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;transition:transform .22s ease;flex-shrink:0}
.side .grp-btn[aria-expanded="false"] svg{transform:rotate(-90deg)}
/* 그룹 본문: grid-template-rows 0fr↔1fr 전환(높이 측정 불필요) */
.side .grp-body{display:grid;grid-template-rows:0fr;transition:grid-template-rows .22s ease}
.side .grp-body[data-open="1"]{grid-template-rows:1fr}
.side .grp-body>.grp-inner{min-height:0;overflow:hidden;display:flex;flex-direction:column}
.side .grp-body.grow>.grp-inner>.list{flex:1;min-height:0}
.side .grp-body[data-open="0"]>.grp-inner{visibility:hidden;transition:visibility 0s linear .22s}
.side .logo{padding:2px 4px;border-radius:6px}
.side .logo:hover{background:var(--rule)}
.docs-tabs{margin:0 0 18px}
@media (prefers-reduced-motion:reduce){.sheet,.side,.side .grp-btn svg,.side .grp-body,.side .grp-body>.grp-inner{transition:none!important}}
