:root{--bg:#FAFAFA;--card:#FFFFFF;--line:#E5E5E5;--line2:#F0F0F0;--ink:#111111;--mut:#666666;--go:#0F7B5F;--go-d:#0A5843;--bad:#B42318;--amber:#B26A00;--side:#F7F7F7;--gb-unfold:.3s}   /* 카드가 펼쳐지는 시간 — 대시보드 격자 · 경영 카드가 함께 쓴다(11/02) */
@media (prefers-reduced-motion:reduce){:root{--gb-unfold:0s}}   /* 움직임 줄이기: 두 화면 모두 펼치지 않음 */
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg);color:var(--ink);font-family:'Pretendard Variable',Pretendard,-apple-system,BlinkMacSystemFont,system-ui,sans-serif;font-size:14px;letter-spacing:-0.01em;-webkit-font-smoothing:antialiased}
a{color:var(--go)}a:hover{color:var(--go-d)}
h1{font-size:22px;font-weight:700;letter-spacing:-0.02em;margin:4px 0 6px}h2{font-size:16px;margin:22px 0 10px}
.muted{color:var(--mut)}.small{font-size:12px}.num{font-variant-numeric:tabular-nums;letter-spacing:0}
.r{text-align:right}.grow{flex:1}.grow-l{margin-left:auto}.minw{min-width:260px}.pad{padding:16px 18px}
.sr{position:absolute;left:-9999px}
.app{display:flex;min-height:100vh}
/* 사이드바 */
.side{flex:0 0 240px;background:var(--side);border-right:1px solid var(--line);padding:12px 10px;display:flex;flex-direction:column;gap:2px;position:sticky;top:0;height:100vh;overflow-y:auto}
.brand{display:flex;align-items:center;gap:8px;padding:2px 4px 12px 8px}
.logo{width:24px;height:24px;border-radius:6px;background:var(--ink);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:13px;flex:none}
.brand .ib{margin-left:auto}
.nav-a{display:flex;align-items:center;gap:10px;padding:0 10px;min-height:36px;border-radius:7px;color:#404040;text-decoration:none;white-space:nowrap}
.nav-a:hover{background:#ECECEC;color:var(--ink)}
.nav-a.on{background:#E6E6E6;color:var(--ink);font-weight:600}
.nav-a svg{flex:none}.nav-a .ext{margin-left:auto;color:#999}
.sec{font-size:13px;font-weight:500;color:var(--ink);margin:16px 10px 4px}   /* 10/19: 회색 → 검은색(사용자 「잘 안 보임」), 11px → 13px(ChatGPT 14/500 · Claude 13 실측, docs/history/records/2026-10-19_사이드바-글자크기-오른쪽채팅.md) */
.badge{margin-left:auto;font-size:11px;border-radius:9px;padding:0 7px;color:#fff}.badge.red{background:var(--bad)}
.ib{font:inherit;width:34px;height:34px;border:none;background:transparent;color:#404040;border-radius:7px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;flex:none}
.ib:hover{background:#ECECEC}
.only-closed{display:none}
.app.side-closed .side{flex-basis:58px;align-items:center;padding:12px 0}
.app.side-closed .side .nl,.app.side-closed .side .sec{display:none}
.app.side-closed .side .brand{padding:2px 0 8px}
.app.side-closed .only-closed{display:inline-flex;margin-bottom:6px}
.app.side-closed .nav-a{width:38px;justify-content:center;padding:0}
/* 본문 */
.main{flex:1;min-width:0;padding:16px 28px 48px}
.top{display:flex;gap:14px;align-items:center;margin-bottom:10px}
.card{background:var(--card);border:1px solid var(--line);border-radius:10px;margin-bottom:12px}
.card.bad{border-color:#F1C5C0}.card.warn{border-color:#F0D29A;background:#FFFBF2}.ok-bg{background:#F2F8F6;border-color:#CFE5DC}
.grid4{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px}.grid2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
@media (max-width:1100px){.grid4{grid-template-columns:repeat(2,minmax(0,1fr))}.grid2{grid-template-columns:1fr}}
.kpi{padding:14px 16px;min-width:0}.big{font-size:22px;margin:6px 0 4px;overflow-wrap:anywhere}.huge{font-size:30px;margin:4px 0}
.row-wrap{display:flex;gap:20px;align-items:center;flex-wrap:wrap}
.btn{font:inherit;font-size:13px;font-weight:500;border:1px solid #D9D9D9;background:#fff;color:var(--ink);border-radius:7px;padding:0 12px;min-height:34px;display:inline-flex;align-items:center;gap:6px;cursor:pointer;text-decoration:none}
.btn:hover{border-color:#BFBFBF;color:var(--ink)}
.btn.go{background:var(--go);border-color:var(--go);color:#fff}.btn.go:hover{background:var(--go-d);color:#fff}
.btn.dark{background:var(--ink);border-color:var(--ink);color:#fff}
.btn.sm{min-height:30px;padding:0 10px;font-size:12px}
.dot{width:8px;height:8px;border-radius:50%;flex:none}.dot.red{background:var(--bad)}.dot.amber{background:#D08A00}
.basis{background:var(--bg);border-radius:7px;padding:8px 10px;font-size:12px;color:var(--mut);align-self:stretch}
.ch{display:flex;align-items:center;gap:10px;margin-bottom:6px}
.st{font-size:12px;font-weight:600;margin-left:auto}.st.ok{color:var(--go)}.st.bad{color:var(--bad)}.bad-t{color:var(--bad)}
.kv{width:100%;border-collapse:collapse;margin:8px 0}.kv td{padding:6px 0;border-bottom:1px solid var(--line2)}
.tbl{width:100%;border-collapse:collapse}.tbl th{font-size:12px;color:var(--mut);font-weight:600;text-align:left;background:#FAFAFA;padding:9px 12px;border-bottom:1px solid var(--line)}
.tbl td{padding:9px 12px;border-bottom:1px solid var(--line2);vertical-align:top}.tbl th.r,.tbl td.r{text-align:right}
.scroll{overflow-x:auto}
#umt{min-width:1040px}#umt td:nth-child(2){min-width:260px}#umt td:nth-child(3){min-width:220px}#umt td:nth-child(5){min-width:330px}
.stack{display:flex;height:12px;border-radius:6px;overflow:hidden;background:var(--line2)}
.seg,.sw{background:#A3A3A3}.sw{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:5px;vertical-align:-1px}
[data-m=code_join]{background:#111}[data-m=seller_sku]{background:#404040}[data-m=pipe_expand]{background:#737373}[data-m=bundle_expand]{background:#A3A3A3}
[data-m=override]{background:var(--go)}[data-m=facet_parse],[data-m=vocab_match]{background:#C7C7C7}[data-m=unassigned]{background:var(--bad)}
.legend{display:flex;flex-wrap:wrap;gap:14px;font-size:12px;color:var(--mut);margin-top:8px}
.tabs{display:flex;gap:18px;border-bottom:1px solid var(--line);margin:6px 0 10px}
.tab{font:inherit;font-size:13px;border:none;background:none;color:var(--mut);padding:0 2px 9px;cursor:pointer;border-bottom:2px solid transparent}
.tab.on{color:var(--ink);font-weight:600;border-bottom-color:var(--ink)}
.act{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.act select,.act input{font:inherit;font-size:12px;width:100%;max-width:320px;border:1px solid #D9D9D9;border-radius:6px;min-height:30px;padding:0 6px}
.search{font:inherit;width:100%;max-width:420px;border:1px solid #D9D9D9;border-radius:8px;min-height:38px;padding:0 12px;margin:6px 0 10px}
.crumb a{color:var(--mut);text-decoration:none}
/* 로그인 */
body.login{display:flex;align-items:center;justify-content:center;min-height:100vh}
.loginbox{width:340px;display:flex;flex-direction:column;gap:8px}.loginbox input{font:inherit;border:1px solid #D9D9D9;border-radius:8px;min-height:40px;padding:0 10px}
@media (max-width:900px){.side{position:static;height:auto}.app{flex-wrap:wrap}}

/* 임베드 대시보드 */
.embed{border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#fff;height:calc(100vh - 150px);min-height:640px}
.embed iframe{width:100%;height:100%;border:0}
.expr{display:block;white-space:pre-wrap;word-break:break-all;font-size:11px;background:var(--bg);padding:6px 8px;border-radius:6px;margin-top:4px;max-width:420px}
details summary{cursor:pointer}
/* 젠보드 엔진 */
.fbar{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin:6px 0 14px}
.segs{display:inline-flex;border:1px solid #D9D9D9;border-radius:8px;overflow:hidden;background:#fff}
.seg-b{font-size:13px;padding:7px 12px;color:#404040;text-decoration:none;border-right:1px solid #ECECEC}
.seg-b:last-child{border-right:none}.seg-b:hover{background:#F5F5F5;color:var(--ink)}
.seg-b.on{background:var(--ink);color:#fff}
.egrid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:12px}
@media (max-width:1100px){.egrid{grid-template-columns:repeat(4,minmax(0,1fr))}.egrid .etile{grid-column:span 4 !important}.egrid .kpi-e{grid-column:span 2 !important}}
.etile{background:#fff;border:1px solid var(--line);border-radius:10px;padding:14px 16px;min-width:0;display:flex;flex-direction:column}
.kl{font-size:13px;color:var(--mut);display:flex;align-items:center;gap:6px}
.kv2{font-size:clamp(16px,1.3vw,24px);font-weight:700;letter-spacing:-0.02em;font-variant-numeric:tabular-nums;margin:6px 0 4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kd{font-size:12px;display:flex;gap:4px 8px;align-items:center;flex-wrap:wrap;margin-top:2px}
.dl{font-weight:600}
.cmp-row{display:flex;align-items:center;gap:8px;margin-top:8px}.cmp-row select{width:auto;min-width:170px}.cmp-row>span{white-space:nowrap;flex:none}.dl.good{color:var(--go)}.dl.bad{color:var(--bad)}
.def{position:relative;margin-left:auto}
.def summary{list-style:none;width:18px;height:18px;border-radius:50%;border:1px solid #D0D0D0;font-size:11px;display:flex;align-items:center;justify-content:center;color:#888;cursor:pointer}
.def summary::-webkit-details-marker{display:none}
.def .pop{position:absolute;right:0;top:24px;z-index:5;width:300px;background:#fff;border:1px solid var(--line);border-radius:10px;padding:12px;box-shadow:0 6px 24px rgba(0,0,0,.08);color:var(--ink);font-size:12px;display:flex;flex-direction:column;gap:6px}
.def .pop code{white-space:pre-wrap;word-break:break-all;font-size:11px;background:var(--bg);padding:6px;border-radius:6px}
.th2{display:flex;align-items:baseline;gap:10px;margin-bottom:8px;flex-wrap:wrap}
.chart-e{height:280px}
.etbl th,.etbl td{padding:7px 10px}.foot{margin-top:8px}

/* ── 젠보드 엔진 대시보드 ── */
.tag{display:inline-block;font-size:11px;font-weight:600;color:var(--go);background:#EAF4F0;border-radius:5px;padding:1px 6px;vertical-align:2px;margin-left:4px}
.nav-a .tag{margin-left:auto}
.nowrap{white-space:nowrap}.pad8{padding:8px}
.newd{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.newd input,.newd select{font:inherit;border:1px solid #D9D9D9;border-radius:7px;min-height:34px;padding:0 10px;background:#fff}.newd input{min-width:240px}
.editbar{display:flex;gap:12px;align-items:center;background:#111;color:#fff;border-radius:10px;padding:9px 14px;margin-bottom:12px;font-size:13px}
.editbar .muted{color:#BDBDBD}
.dh{display:flex;gap:16px;align-items:flex-start;flex-wrap:wrap;margin-bottom:6px}
.dh-l{flex:1;min-width:260px}.dh-l h1{margin:2px 0 4px}
.dh-r{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.vsep{width:1px;height:22px;background:var(--line);margin:0 2px}
.btn.ghost-bad{color:var(--bad);border-color:#F1C5C0}
.dname{font:inherit;font-size:22px;font-weight:700;letter-spacing:-0.02em;border:1px solid #D9D9D9;border-radius:8px;padding:4px 10px;width:100%;max-width:560px;display:block}
.ddesc{font:inherit;font-size:13px;border:1px solid #E5E5E5;border-radius:7px;padding:5px 10px;width:100%;max-width:560px;margin-top:6px;color:var(--mut)}
.fbar2{display:flex;gap:10px 18px;align-items:center;flex-wrap:wrap;margin:8px 0 10px;min-height:36px}
.fg{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.fl{font-size:12px;color:var(--mut);font-weight:600}
.segs button.seg-b{font:inherit;font-size:13px;border:none;border-right:1px solid #ECECEC;background:#fff;cursor:pointer}
.segs button.seg-b.on{background:var(--ink);color:#fff}
.dates{display:inline-flex;gap:6px;align-items:center}.dates input{font:inherit;font-size:13px;border:1px solid #D9D9D9;border-radius:7px;min-height:32px;padding:0 6px}
.dd{position:relative}.dd-b.on{border-color:var(--ink);font-weight:600}
.dd-p{position:absolute;top:40px;left:0;z-index:30;width:300px;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 8px 28px rgba(0,0,0,.1);padding:8px}
.dd-s{font:inherit;width:100%;border:1px solid #D9D9D9;border-radius:7px;min-height:32px;padding:0 8px;margin-bottom:6px}
.dd-l{max-height:260px;overflow:auto}.dd-i{display:flex;gap:8px;align-items:center;padding:6px 4px;border-radius:6px;cursor:pointer}.dd-i:hover{background:#F5F5F5}.dd-i span:nth-child(2){flex:1}
.dd-f{display:flex;gap:6px;border-top:1px solid var(--line2);padding-top:8px;margin-top:6px}
/* 격자 */
.grid-stack{margin:0 -6px}
.grid-stack>.grid-stack-item>.grid-stack-item-content.wc{inset:6px}
.grid-stack.grid-stack-animate,.grid-stack.grid-stack-animate .grid-stack-item{transition-duration:var(--gb-unfold)}   /* 격자 라이브러리의 0.3s 대신 공용 값(gridstack.css 가 뒤에 읽혀 한 단계 더 좁게, 끌기 · 크기 바꾸기의 0s 규칙은 그대로 이김) */
.wc{background:#fff;border:1px solid var(--line);border-radius:10px;display:flex;flex-direction:column;overflow:hidden !important;padding:0;container-type:inline-size}
.wh{display:flex;align-items:center;gap:6px;padding:10px 12px 0 14px;min-height:34px}
.wh.drag{cursor:move;background:linear-gradient(#FAFAFA,#fff)}
.wt{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.wc-kpi .wt{font-weight:500;color:var(--mut)}
.wx{flex:1;display:flex;justify-content:flex-end;min-width:0}
.pill{font-size:11px;color:#8A5A00;background:#FFF6E5;border-radius:5px;padding:1px 6px;white-space:nowrap}
.wi{width:24px;height:24px;border-radius:50%;border:1px solid #D0D0D0;background:#fff;font-size:12px;color:#6F6F6F;cursor:pointer;flex:none;padding:0}
.wi:hover{border-color:#999;color:#333}
.wbtn{font:inherit;font-size:12px;border:1px solid #E0E0E0;background:#fff;border-radius:5px;padding:0 8px;min-height:24px;min-width:24px;cursor:pointer;color:#444;flex:none}
.wbtn:hover{border-color:#999}.wbtn.bad{color:var(--bad)}
.wb{flex:1;min-height:0;padding:6px 14px 12px;display:flex;flex-direction:column;position:relative}
.wb.busy::after{content:"";position:absolute;left:14px;right:14px;top:0;height:2px;background:linear-gradient(90deg,transparent,var(--go),transparent);animation:gbbar 1s linear infinite}
@keyframes gbbar{0%{transform:translateX(-60%)}100%{transform:translateX(60%)}}
.wload{display:flex;flex-direction:column;gap:8px;padding-top:6px}.sk{height:14px;width:60%;background:#F0F0F0;border-radius:4px}.sk.s2{width:35%}
.werr{color:var(--bad);font-size:12px;background:#FDF3F2;border-radius:7px;padding:8px 10px;margin-top:4px;overflow:auto}
.wempty{color:var(--mut);font-size:12px;margin:auto;text-align:center;padding:12px}
.wtext{font-size:13px;line-height:1.6;overflow:auto}.wtext h3{font-size:15px;margin:0 0 4px}.wtext p{margin:0}
.kv3{font-size:clamp(14px,min(calc((100cqi - 28px) / (var(--n,8) * 0.6)),20cqi),30px);font-weight:700;letter-spacing:-0.02em;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}
.kv3 .unit{font-size:.55em;font-weight:500;color:var(--mut);margin-left:2px}
.wchart{flex:1;min-height:0}
.wc .tscroll{overflow:auto;flex:1;min-height:0;margin:0 -14px -12px}
/* 표가 카드보다 길거나 넓을 때 더 있다는 걸 보이게: 스크롤 막대를 늘 보이게 (맥의 숨는 스크롤 막대 대신, 10/7) */
.wc .wb.wscroll{overflow-y:auto}   /* 막대가 많은 가로 막대: 카드 안 세로 스크롤 */
.wc .wb.wscroll::-webkit-scrollbar,.wc .tscroll::-webkit-scrollbar{width:8px;height:8px}
.wc .wb.wscroll::-webkit-scrollbar-thumb,.wc .tscroll::-webkit-scrollbar-thumb{background:#C8C8C8;border-radius:4px;border:2px solid #fff}
.wc .wb.wscroll::-webkit-scrollbar-track,.wc .tscroll::-webkit-scrollbar-track{background:transparent}
.wc .etbl th{position:sticky;top:0;z-index:1;cursor:pointer;white-space:nowrap}.wc .etbl th.sorted{color:var(--ink)}
.wc .etbl td{font-size:13px}.wc .etbl td:first-child{max-width:340px}
.wpop{position:absolute;z-index:60;max-height:min(520px,70vh);overflow:auto;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 8px 28px rgba(0,0,0,.12);padding:12px;font-size:12px;display:flex;flex-direction:column;gap:8px}
.wpop[hidden]{display:none}
.wpop code{display:block;white-space:pre-wrap;word-break:break-all;font-size:11px;background:var(--bg);padding:6px 8px;border-radius:6px;margin-top:4px}
.wpop .x{position:absolute;right:4px;top:4px;width:26px;height:26px;font-size:16px}
.pm{border-bottom:1px solid var(--line2);padding-bottom:8px;font-size:13px;line-height:1.55;padding-right:22px}
.pm b{display:block;margin-bottom:2px}
.pinfo{display:grid;grid-template-columns:auto 1fr;gap:4px 12px;margin:0;font-size:12px}
.pinfo dt{color:var(--mut)}
.pinfo dd{margin:0}
.empty{text-align:center;color:var(--mut)}
/* 서랍 (편집기 · 필터 · 버전) */
.drawer{position:fixed;top:0;right:0;bottom:0;width:min(480px,100vw);background:#fff;border-left:1px solid var(--line);box-shadow:-8px 0 30px rgba(0,0,0,.08);z-index:50;display:flex;flex-direction:column}
.drawer[hidden]{display:none}
.dr-h{display:flex;gap:8px;align-items:center;padding:14px 16px;border-bottom:1px solid var(--line)}
.dr-b{padding:14px 16px 40px;overflow:auto;flex:1;display:flex;flex-direction:column;gap:14px}
.dr-prev{margin:12px 16px 0;height:230px;flex:none;position:relative}
.fld{display:flex;flex-direction:column;gap:6px}.fld>span{font-size:12px;font-weight:600;color:#444}
.fld input,.fld select,.fld textarea,.frow input,.frow select,.row2 select,.drow select{font:inherit;font-size:13px;border:1px solid #D9D9D9;border-radius:7px;min-height:34px;padding:0 8px;background:#fff;width:100%}
.fld textarea{padding:8px;line-height:1.5;resize:vertical}
.fld.two{flex-direction:row;gap:8px}.fld.two label{display:flex;flex-direction:column;gap:6px;flex:1}.fld.two span{font-size:12px;font-weight:600;color:#444}
.segs-w{display:flex;flex-wrap:wrap;width:100%}.segs-w .seg-b{flex:1;text-align:center;padding:7px 4px}
.chips{display:flex;gap:6px;flex-wrap:wrap}
.chip{display:inline-flex;align-items:center;gap:4px;background:#F2F2F2;border-radius:6px;padding:4px 4px 4px 9px;font-size:13px}
.chip button{border:none;background:none;cursor:pointer;color:#888;font-size:14px;line-height:1;padding:0 4px}
.drow{display:flex;gap:8px;align-items:center;border:1px solid var(--line2);border-radius:8px;padding:6px 6px 6px 10px}
.drow b{font-size:13px;flex:1}.drow select{width:auto;min-height:30px}
.dlab{font-size:11px;color:var(--mut);background:var(--bg);border-radius:5px;padding:2px 6px;white-space:nowrap}
.frow{display:grid;grid-template-columns:1.3fr 1fr 1.3fr auto;gap:6px;align-items:center}
.row2{display:grid;grid-template-columns:110px 1fr;gap:8px;align-items:center;font-size:13px}
.ib.sm{width:28px;height:28px}
.fcard{border:1px solid var(--line);border-radius:10px;padding:10px 12px;display:flex;flex-direction:column;gap:8px}
.vrow{display:flex;gap:10px;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line2);padding:10px 0}
.vrow.now b{color:var(--go)}
.toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%,20px);opacity:0;background:#111;color:#fff;border-radius:9px;padding:10px 16px;font-size:13px;transition:.25s;z-index:80}
.toast.show{opacity:1;transform:translate(-50%,0)}
@media (max-width:760px){.main{padding:12px 16px 40px}.dh-r{width:100%}.frow{grid-template-columns:1fr 1fr}}
.wh{position:relative}
.wtools{position:absolute;right:8px;top:6px;display:flex;gap:4px;background:#fff;border:1px solid var(--line);border-radius:7px;padding:3px;box-shadow:0 2px 10px rgba(0,0,0,.08);opacity:0;transition:opacity .12s;z-index:5}
.wc:hover .wtools,.wc:focus-within .wtools{opacity:1}
/* 한 줄 높이 카드(제목 등, gridstack 은 높이 1 이면 gs-h 를 안 붙임): 버튼 줄이 카드 안에 들어오게 가운데로, 오른쪽 아래 크기 손잡이와 안 겹치게 (10/7 점검) */
.grid-stack-item:not([gs-h]) .wtools{top:50%;transform:translateY(-50%);padding:1px;right:28px}
.grid-stack-item:not([gs-h]) .wh.drag{padding-top:0;padding-bottom:0;min-height:100%;align-items:center}   /* 편집 모드만 (.drag) — 보기 화면의 제목은 .wb 가 그림 */
.grid-stack-item:not([gs-h]) .wh.drag ~ .wb{display:none}
.wh.drag::before{content:"";position:absolute;left:50%;top:4px;width:28px;height:3px;margin-left:-14px;border-radius:2px;background:#D6D6D6}
.share{margin:10px 16px 0;font-size:12px;background:#F2F8F6;border:1px solid #CFE5DC;border-radius:8px;padding:8px 10px;line-height:1.5}
.share.muted{background:var(--bg);border-color:var(--line)}
.dr-tabs{margin:10px 16px 0}
.choose{margin:0 16px 16px;border:1px solid var(--ink);border-radius:10px;padding:12px;display:flex;flex-direction:column;gap:8px;background:#fff}
.choose .opt{display:flex;gap:8px;align-items:center;font-size:13px}.choose .opt.off{color:#AAA}
.choose input[type=text],.choose #e-reason{font:inherit;font-size:13px;border:1px solid #D9D9D9;border-radius:7px;min-height:34px;padding:0 8px}
.libi{display:flex;flex-direction:column;gap:3px;text-align:left;font:inherit;background:#fff;border:1px solid var(--line);border-radius:9px;padding:10px 12px;cursor:pointer}
.libi:hover{border-color:#999}
/* 피벗 표 */
.ptbl th.pv{text-align:right;border-left:1px solid var(--line2)}.ptbl th.sub{font-weight:500;font-size:11px}
.ptbl td.tot,.ptbl th.tot{background:#FAFAFA;font-weight:600}
.ptbl tfoot td{border-top:1px solid var(--line);font-weight:600;background:#FAFAFA;position:sticky;bottom:0}
.ptbl td:first-child{white-space:nowrap}
.pnote{padding:6px 0 0}
.fld .chk,.chk{display:flex;gap:6px;align-items:center;font-size:13px;flex:1;padding-top:20px}
/* 체크박스는 입력칸 너비 · 높이 규칙(.fld input)을 받지 않는다 — 「합계 보기」 가 칸 폭만큼 늘어나던 것(10/8 점검 X9) */
.fld input[type=checkbox],.fld input[type=radio]{width:auto;height:auto;min-height:0;padding:0;margin:0;flex:0 0 auto}
.fld.two label.chk{flex-direction:row;align-items:center}
.envb{background:#B26A00;color:#fff;font-size:12px;font-weight:700;border-radius:6px;padding:3px 9px}
/* 필터: 카드 뱃지 · 적용 범위 */
.pill.fix{color:#1F4E8C;background:#EAF1FB}
.pill.off{color:#555;background:#F0F0F0}
.wx{gap:4px;flex-wrap:wrap}
.kd .pill{margin-right:4px}
.scope{border-top:1px solid var(--line2);padding-top:8px}
.scope summary{font-size:13px;cursor:pointer;color:#333}
.srow{display:grid;grid-template-columns:1fr 46%;gap:8px;align-items:center;padding:5px 0;font-size:13px;border-bottom:1px dashed var(--line2)}
.srow.off .st{color:#6F6F6F}
.srow select{font:inherit;font-size:12px;border:1px solid #D9D9D9;border-radius:6px;min-height:30px;padding:0 6px;width:100%}

/* ── 지표에 묻기 패널 ── */
.ask-chips{display:flex;gap:6px;flex-wrap:wrap;padding:10px 14px 0}
.chip{border:1px solid var(--line,#e3e6ea);background:#fff;border-radius:14px;padding:2px 10px;font-size:12px;cursor:pointer}.chip.on{background:#E8F3EF;border-color:var(--go);color:var(--go)}
.ask-body{flex:1;overflow:auto;padding:12px 14px;display:flex;flex-direction:column;gap:10px}
.ask-def .expr{display:block;margin-top:4px;white-space:pre-wrap;word-break:break-all}
.ask-card{border:1px solid var(--line,#e3e6ea);border-radius:10px;padding:10px 12px}
.ask-num{font-size:26px;font-weight:700;letter-spacing:-.01em}
.ask-bars{display:flex;align-items:flex-end;gap:2px;height:60px;margin:6px 0}.ask-bar{flex:1;display:flex;align-items:flex-end;height:100%}.ask-bar i{display:block;width:100%;background:var(--go);opacity:.8;border-radius:2px 2px 0 0}
.ask-q{margin-top:6px;padding-top:8px;border-top:1px dashed var(--line,#e3e6ea)}.ask-a{line-height:1.55}
.ask-basis{margin-top:8px;padding-top:6px;border-top:1px dashed var(--line,#e3e6ea)}
.ask-next{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-top:8px}.ask-next .chip{text-align:left;line-height:1.4;padding:4px 10px}.ask-next .chip:hover{background:#F2F2F2}
.ok{color:var(--go)}.bad{color:var(--bad)}
/* 텍스트 위젯 = 섹션 제목 (보기 화면) */
.wc.wc-plain{background:transparent;border:none;box-shadow:none}
.wc .wh[hidden]{display:none}
.wc.wc-plain .wb{padding:6px 2px 0}
.wc.wc-plain .wtext h3{font-size:16px;margin:0}
.wc.wc-plain .wtext p{color:var(--mut);font-size:13px}
/* 차트 클릭 필터 */
.ckbar .chip{display:inline-flex;align-items:center;gap:4px;font-size:12px;background:#111;color:#fff;border-radius:6px;padding:3px 4px 3px 8px}
.ckbar .chip-x{background:none;border:none;color:#bbb;cursor:pointer;font-size:14px;line-height:1;padding:0 2px}.ckbar .chip-x:hover{color:#fff}
.ck{cursor:pointer}.ck-row:hover td{background:#FAFAFA}
tr.ck-off td{opacity:.35}tr.ck-on td{background:#F3F7F5;font-weight:600}th.ck-on{background:#F3F7F5}

/* ── 목표 진행 카드 ── */
.goal{display:flex;flex-direction:column;gap:8px;padding-top:4px}
.goal-top{display:flex;align-items:baseline;gap:10px}.goal-v{font-size:26px;font-weight:700;letter-spacing:-0.02em;font-variant-numeric:tabular-nums}
.goal-pct{font-weight:700;font-size:15px}.goal-pct.good,.goal-foot .good{color:var(--go)}.goal-pct.bad,.goal-foot .bad{color:var(--bad)}
.goal-bar{position:relative;height:14px;background:#EEE;border-radius:7px;overflow:visible}
.goal-fill{position:absolute;left:0;top:0;height:100%;background:var(--go);border-radius:7px}
.goal-proj{position:absolute;top:-3px;width:2px;height:20px;background:var(--ink);opacity:.8}
.goal-time{position:absolute;top:-5px;width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:6px solid #999;margin-left:-5px}
.goal-foot{display:flex;flex-wrap:wrap;gap:4px 14px;color:var(--mut)}
/* 위젯 편집기: 위젯 필터 값 고르기 · 고급 */
.fv-b{max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fv-b.on{border-color:var(--ink);font-weight:600}
.fpick{border:1px solid var(--line);border-radius:8px;padding:6px;margin:4px 0 8px;background:#fff}
.fpick .dd-s{width:100%;margin-bottom:4px}.fpick .dd-l{max-height:220px}
details.adv{border-top:1px solid var(--line);padding-top:10px}
details.adv summary{cursor:pointer;font-size:13px;font-weight:600;color:var(--mut)}
details.adv[open] summary{margin-bottom:8px}
details.adv .chk{display:flex;gap:6px;align-items:center;font-size:13px}
details.adv .adv-b{margin-top:12px;display:flex;flex-direction:column;gap:6px}
.fpick .dd-i{display:flex;flex-direction:row;align-items:center;gap:8px;margin:0}
.fpick .dd-i input[type=checkbox],details.adv .chk input[type=checkbox]{width:auto;height:auto;min-height:0;padding:0;flex:0 0 auto;margin:0}
.fpick .dd-i span:nth-child(2){flex:1;text-align:left;writing-mode:horizontal-tb}

/* ══ 화면 테마 정리 (10/6, 10/19 배경을 중립 회색 #FAFAFA 로 — ChatGPT · Vercel · Grafana 실측, docs/history/records/2026-10-19_배경색-벤치마크.md): 글자 3단계(제목 20 · 본문 13 · 캡션 11), 카드는 테두리 대신 바탕 대비, 머리 부분 위계 ══ */
:root{--bg:#FAFAFA;--line:#E8E8E8;--line2:#F1F1F1}
.dh{margin-bottom:2px;align-items:flex-start}
.dh-l h1{font-size:20px;margin:0 0 2px}
.ddesc-v{font-size:12px;color:var(--mut);max-width:720px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}
.ddesc-v.open{white-space:normal}
.dh-r{flex-direction:column;align-items:flex-end;gap:4px}
.dh-btns{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.dmeta{font-size:11px;color:#6F6F6F}
.dmeta a.fresh{color:inherit;text-decoration:underline dotted;text-underline-offset:2px}.dmeta a.fresh:hover{color:#161616;text-decoration-style:solid}
.fbar2{margin:10px 0 14px;min-height:32px}
.fl{font-size:11px;color:#6F6F6F;font-weight:600;letter-spacing:.02em}
.segs{border-color:#E3E3E3;border-radius:7px}
.seg-b,.segs button.seg-b{font-size:12px;padding:5px 10px;color:#555}
.seg-b.on,.segs button.seg-b.on{background:var(--ink);color:#fff}
.fmore{font:inherit;font-size:12px;color:#555;border:1px solid #E3E3E3;border-radius:7px;background:#fff;padding:5px 8px;cursor:pointer}
.fmore.on{background:var(--ink);color:#fff;border-color:var(--ink)}
.fg .muted.small{font-size:11px;color:#6F6F6F}
/* 카드 */
.wc{border:1px solid #ECECEC;border-radius:12px;box-shadow:0 1px 2px rgba(0,0,0,.03)}
.wh{padding:11px 14px 0 14px;min-height:32px}
.wt{font-size:12px;font-weight:600;color:#555;letter-spacing:.01em}
.wc-kpi .wt{font-weight:600;color:#777}
.wc-kpi .wb{display:flex;flex-direction:column;justify-content:center;flex:1}
.kv3{font-size:clamp(12px,min(calc((100cqi - 28px) / (var(--n,8) * 0.6)),20cqi),30px);margin-top:0}   /* 하한 16 → 12px(10/26): 좁은 칸(사이드바를 편 1180px · 한 줄 여섯 칸)에서 16px 에 걸려 「246,015,06…」 로 잘렸다 — 잘린 숫자보다 작은 숫자가 낫다 */
.kd{font-size:12px;margin-top:4px}
/* 섹션 제목(텍스트 위젯) */
.wc.wc-plain .wb{padding:14px 2px 0}
.wc.wc-plain .wtext h3{font-size:15px;font-weight:700;color:var(--ink);letter-spacing:-0.01em;margin:0}
.wc.wc-plain .wtext p{font-size:12px;color:#6F6F6F;margin-top:2px}
/* 표 */
.wc .etbl th{font-size:11px;color:#6F6F6F;background:#fff;border-bottom:1px solid #ECECEC;padding:6px 10px}
.wc .etbl td{font-size:13px;padding:6px 10px;border-bottom:1px solid #F3F3F3}
.wc .etbl td.num,.wc .etbl td.r{font-variant-numeric:tabular-nums}
.wc .etbl tr:last-child td{border-bottom:none}
.pill{font-size:10.5px;padding:1px 6px}
.envb{font-size:11px;padding:2px 8px}
/* 머리 부분(제목 · 설명 · 필터)과 결과 사이에 선 하나 — 여기부터 결과 */
.fbar2{margin:10px 0 0;padding-bottom:12px;border-bottom:1px solid #E3E3E3}
#grid,.grid-stack{margin-top:14px}
/* 섹션 캡션은 선 대신 위 여백 */
.wc.wc-plain .wb{padding:18px 2px 0}
/* 섹션 캡션: 칸 아래쪽에 붙이고 잘리지 않게 */
.wc.wc-plain{overflow:visible !important}
.wc.wc-plain .wb{padding:0 2px 2px;display:flex;flex-direction:column;justify-content:flex-end;overflow:visible}
.wc.wc-plain .wtext{overflow:visible;line-height:1.35}
/* 카드의 ? 는 마우스를 올렸을 때만 또렷하게 (Metabase 식) */
.wi{opacity:.35;transition:opacity .15s}.wc:hover .wi,.bz-sec:hover .wi,.bz-kpi:hover .wi,.wi:focus{opacity:1}
.bz-kh{display:flex;align-items:center;gap:6px;min-height:24px}.bz-kh>span{flex:1;min-width:0}   /* 숫자 타일 이름 줄: 이름 · 「?」(대시보드 숫자 카드처럼) */
/* 숫자 카드: 뱃지 줄이 붙어도 숫자가 눌려 잘리지 않게 (줄이 줄어들지 않고, 뱃지는 한 줄 말줄임) */
.wc-kpi .wb>*{flex-shrink:0}
.wc-kpi .kd .pill{max-width:100%;overflow:hidden;text-overflow:ellipsis}
.wc-kpi .kd:has(.pill){flex-wrap:nowrap;min-width:0}
/* 일부 기간만 담긴 칸 안내 */
.pill.part{color:#666;background:#F0F0F0}
/* 데이터 상태 */
.dot{display:inline-block;width:9px;height:9px;border-radius:50%;background:#C2C2C2;vertical-align:1px;margin-right:4px}
.dot.st-ok{background:var(--go)}.dot.st-warn{background:#D9A400}.dot.st-bad{background:var(--bad)}.dot.st-info{background:#C2C2C2}
.st-head{display:flex;align-items:center;gap:8px;font-size:14px}.st-head.sh-warn{background:#FFFBF2;border-color:#F0D29A}.st-head.sh-bad{background:#FFF5F4;border-color:#F1C5C0}.st-head.sh-ok{background:#F2F8F6;border-color:#CFE5DC}
.two-col{display:grid;grid-template-columns:1fr 1.4fr;gap:16px}
.gap-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:4px 0}
.dcs{display:inline-flex;gap:2px}.dc{display:inline-block;min-width:26px;text-align:center;font-size:10px;padding:2px 0;background:#F0F0F0;border-radius:3px;color:#555;font-variant-numeric:tabular-nums}.dc.miss{background:#FBE3E0;color:var(--bad)}
/* 카드 필터 표시: 평소엔 마우스를 올렸을 때만, 안 걸린 필터가 있으면 늘 (주황) */
.fbadge{display:inline-flex;align-items:center;gap:3px;font-size:11px;color:#888;padding:1px 6px;border-radius:5px;background:#F2F2F2;cursor:default;opacity:0;transition:opacity .15s;white-space:nowrap}
.wc:hover .fbadge,.fbadge.warn{opacity:1}
.fbadge.warn{color:#8A5A00;background:#FFF6E5}
/* 필터에 마우스를 올리면 그 필터가 안 걸린 차트는 흐리게 (올린 동안만) */
.wc{transition:opacity .15s}.wc.scope-dim{opacity:.3}
/* 이 차트의 필터 (편집기) */
.fld.filt{gap:8px}.frow2{display:flex;align-items:center;gap:8px;padding-top:0}.frow2 select{width:auto;max-width:170px}
.fld.filt .adv-b{margin-left:22px}.fld.filt details.adv{margin-left:22px}.fld.filt details.adv summary{cursor:pointer}
/* 클릭으로 고른 값을 안 받는 차트 */
.wc.click-dim{opacity:.6}
.fld.filt .frow2{display:flex;align-items:center;gap:8px;padding:0;flex:none;font-size:13px}
.fld.filt .frow2 input[type=checkbox]{flex:none;width:15px;height:15px;margin:0}
.fld.filt .frow2 .grow{flex:1}
.fld.filt .adv-b{margin-left:22px;display:flex;flex-direction:column;gap:4px}.fld.filt .adv-b select{width:auto;max-width:240px}
/* 텍스트 차트: 제목(크게 · 작게)과 본문을 나눈다. 본문은 기호 없이도 읽히게 */
.wtext{font-size:13px;line-height:1.6;color:#333}
.wtext h2{font-size:17px;font-weight:700;color:var(--ink);margin:0 0 2px;letter-spacing:-0.01em}
/* 작은 제목 = 구역 이름: 본문(13px)보다 크고 진하게(05 70 ③, TEXT-R3) */
.wtext h3{font-size:15px;font-weight:700;color:var(--ink);letter-spacing:-0.01em;margin:0}
.wtext p{margin:0;color:#333;font-size:13px}.wtext .li{color:#333;font-size:13px}.wtext b{font-weight:700;color:var(--ink)}
.wc.wc-plain .wtext p{color:#333;font-size:13px}
.wc.wc-plain .wtext h3{font-size:15px;font-weight:700;color:var(--ink);letter-spacing:-0.01em;margin:0}
.wc.wc-plain .wtext.wtext-h.large h2{font-size:18px}
.ttools{display:flex;gap:6px;margin-bottom:6px}

/* 접은 메뉴 (Manus 방식) — 고정 메뉴는 아이콘, 목록(대시보드)은 구역 아이콘 하나, 구역 사이 구분선, 로고에 올리면 「사이드바 열기」 */
.nav-a.rail-only,.rail-sep,.logo-tog{display:none}
.app.side-closed .nav-a.list-item{display:none}
.app.side-closed .nav-a.rail-only{display:flex}
.app.side-closed .rail-sep{display:block;width:26px;height:1px;background:var(--line);margin:8px 0}
.app.side-closed .only-closed{display:none}
.logo-wrap{position:relative;display:inline-flex;width:24px;height:24px;flex:none}
.logo-tog{position:absolute;inset:-6px;border:none;border-radius:8px;background:#ECECEC;color:#333;align-items:center;justify-content:center;cursor:pointer;padding:0}
.app.side-closed .brand:hover .logo-tog,.app.side-closed .logo-tog:focus-visible{display:inline-flex}

/* Manus 메뉴 목업 화면 */
.mock-tag{font-size:11px;font-weight:600;color:#8A5A00;background:#FFF6E5;border-radius:5px;padding:2px 7px;margin-left:8px}
.mock-desc{margin:4px 0 16px;max-width:760px}
.mock-label{font-size:12px;font-weight:600;color:var(--mut);margin:18px 0 8px}
.mock-ask textarea{width:100%;font:inherit;font-size:14px;border:1px solid #D9D9D9;border-radius:8px;padding:10px 12px;resize:none;background:#fff;margin-bottom:8px}
.mock-chips{gap:8px}
.mock-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px;margin-top:12px}
.mock-auto .mock-kv{font-size:13px;margin-top:6px}.mock-kv span{display:inline-block;width:48px;color:var(--mut);font-size:12px}
.mock-sw{font-size:12px;color:var(--mut);display:inline-flex;gap:4px;align-items:center}
.mock-conn{display:flex;align-items:center}
.ok-pill{color:#0F7B5F;background:#EAF4F0}

/* 새 채팅: 전체 화면. 빈 상태는 가운데, 대화가 시작되면 본문이 위로 쌓이고 입력창은 아래 고정 (ChatGPT · Claude · Manus 와 같은 구조) */
.chat{display:flex;flex-direction:column;min-height:calc(100vh - 90px);max-width:760px;margin:0 auto}
.chat .chat-body{flex:1;padding:0 0 12px;gap:14px;overflow:visible}.chat:not(.live) .chat-body{display:none}
.chat-empty{flex:1;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:18px;padding-bottom:10vh}.chat-empty.gone{display:none}
.chat-empty h1{font-size:26px;font-weight:600;margin:0;letter-spacing:-.01em}
.chat-form{display:flex;gap:8px;width:100%;background:#fff;border:1px solid #D9D9D9;border-radius:14px;padding:8px 8px 8px 16px;box-shadow:0 2px 10px rgba(0,0,0,.04)}
.chat-form textarea{flex:1;font:inherit;font-size:15px;line-height:1.5;border:none;outline:none;background:none;min-height:36px;max-height:200px;resize:none;padding:7px 0;overflow-y:auto}
.chat-form textarea:disabled{background:none;color:var(--mut)}
.chat-form{align-items:flex-end}
.chat-form .btn{border-radius:10px;min-width:36px;padding:0 10px;font-size:16px}
.chat.live .chat-form{position:sticky;bottom:16px;margin-top:8px}
.chat-exs{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}
.chat-ex{border:1px solid var(--line,#e3e6ea);background:#fff;border-radius:12px;padding:8px 12px;font:inherit;font-size:13px;color:#444;cursor:pointer}.chat-ex:hover{background:#F6F6F6}
.chat .ask-q{border-top:none;background:#F2F2F2;border-radius:14px 14px 4px 14px;padding:10px 14px;align-self:flex-end;max-width:80%}.chat .ask-q b{display:none}
.chat .ask-a{padding:2px 4px}

/* 플러그인 목업 (Manus Plugins 모양: 2열 · 흰 아이콘 칸 · 컬러 로고 · ✓ / + ) */
.pl-bar{margin-bottom:16px;gap:10px}
.pl-tabs{display:flex;gap:4px;flex-wrap:wrap}
.pl-tab{font:inherit;font-size:13px;border:1px solid transparent;background:none;border-radius:16px;padding:5px 12px;color:#555;cursor:pointer}
.pl-tab.on{background:#111;color:#fff}
.pl-tab:not(.on):hover{background:#EDEDED}
.pl-search{font:inherit;font-size:13px;border:1px solid #E2E2E2;border-radius:10px;padding:0 12px;min-height:36px;width:200px;background:#fff}
.pl-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.pl-card{display:flex;align-items:center;gap:16px;padding:18px 20px;background:#fff;border:1px solid #ECECEC;border-radius:16px}
.pl-card[hidden]{display:none}
.pl-ic{width:48px;height:48px;border-radius:12px;background:#fff;border:1px solid #EFEFEF;box-shadow:0 1px 2px rgba(0,0,0,.04);display:inline-flex;align-items:center;justify-content:center;flex:none}
.pl-ic img{width:30px;height:30px;border-radius:7px;display:block}
.pl-tx{flex:1;min-width:0}
.pl-tx b{font-size:15px;font-weight:600;letter-spacing:-.01em}
.pl-desc{font-size:13px;color:#777;line-height:1.45;margin-top:3px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.pl-check{font-size:18px;color:#8A8A88;width:36px;text-align:center;flex:none}
.pl-add{width:36px;height:36px;border:1px solid #E2E2E2;border-radius:10px;background:#fff;font-size:20px;line-height:1;color:#333;flex:none;cursor:not-allowed}

/* 플러그인 화면은 제목 · 탭 · 카드를 한 덩어리로 가운데에 (Manus 처럼) */
.pl-wrap{max-width:800px;margin:0 auto}
@media(max-width:900px){.pl-grid{grid-template-columns:1fr}}

/* 대화상자 · 토스트 (10/7: 브라우저 기본 창 대신) */
.gbdlg-bg{position:fixed;inset:0;background:rgba(17,17,17,.32);z-index:100;display:flex;align-items:flex-start;justify-content:center;padding:18vh 16px 0}
.gbdlg{background:#fff;border-radius:12px;box-shadow:0 18px 50px rgba(0,0,0,.18);width:min(420px,100%);padding:20px 20px 16px}
.gbdlg-t{font-size:15px;font-weight:700;margin-bottom:6px}.gbdlg-x{font-size:13px;color:#444;line-height:1.55}
.gbdlg-i{font:inherit;font-size:14px;width:100%;border:1px solid #D9D9D9;border-radius:8px;padding:8px 10px;margin-top:10px}
.gbdlg-b{display:flex;gap:8px;justify-content:flex-end;margin-top:16px}
.btn.bad-b{background:var(--bad);border-color:var(--bad);color:#fff}
.toast{display:flex;gap:14px;align-items:center}
.toast-a{font:inherit;font-size:13px;font-weight:700;color:#7FE0C2;background:none;border:none;cursor:pointer;padding:0}

/* 편집기 10/7: 검색 고르기 · 빠진 것 안내 · 제목 권고 · 새 카드 강조 · 텍스트 카드 · 되돌리기 버튼 */
.pk{position:relative}.pk-i{font:inherit;font-size:13px;width:100%;border:1px solid #D9D9D9;border-radius:8px;padding:7px 10px;background:#fff}
.pk-l{position:absolute;left:0;right:0;top:calc(100% + 4px);max-height:280px;overflow:auto;background:#fff;border:1px solid var(--line);border-radius:9px;box-shadow:0 10px 28px rgba(0,0,0,.10);z-index:60;padding:4px}
.pk-gh{font-size:11px;font-weight:600;color:var(--mut);padding:10px 10px 4px;letter-spacing:.02em}.pk-gh[hidden]{display:none}
.pk-o{display:flex;flex-direction:column;gap:1px;width:100%;text-align:left;font:inherit;font-size:13px;background:none;border:none;border-radius:6px;padding:6px 8px;cursor:pointer}
.pk-o:hover,.pk-o.on{background:#F2F2F2}.pk-o .small{font-size:11px;line-height:1.35}
.keepn{margin-top:6px;color:#6F6F6F;background:#F7F7F7;border-radius:7px;padding:6px 9px}
.tsug{display:flex;gap:8px;align-items:center;margin-top:6px;color:var(--amber)}
.wc.flash{animation:gbflash 1.6s ease-out}
@keyframes gbflash{0%,30%{box-shadow:0 0 0 3px var(--go)}100%{box-shadow:0 0 0 3px transparent}}
.wt .tkind{display:inline-block;font-size:11px;font-weight:600;color:#6F6F6F;border:1px solid #E0E0E0;border-radius:4px;padding:0 5px;margin-right:6px;vertical-align:1px}
.btn.ib-t{min-width:34px;padding:0 8px;display:inline-flex;align-items:center;justify-content:center}.btn.ib-t:disabled{opacity:.35;cursor:default}

/* 새 채팅 답 본문(마크다운 일부, 10/8) */
.ask-a .ask-h { font-weight: 600; margin: 10px 0 4px; }
.ask-a .ask-ul { margin: 2px 0 6px; padding-left: 18px; }
.ask-a .ask-ul li { margin: 2px 0; }
.ask-a .ask-gap { height: 8px; }
.ask-a .ask-tbl { margin: 6px 0; width: auto; }
.ask-a .ask-tbl th, .ask-a .ask-tbl td { padding: 4px 10px; }
/* 편집기 고르는 흐름 (10/7 시험: 지표 → 기준 → 기간 → 모양 → 제목, 자주 쓰는 것은 칩) */
.step>span{display:flex;align-items:center;gap:6px}
.step>span i{font-style:normal;flex:none;width:18px;height:18px;border-radius:50%;background:var(--ink);color:#fff;font-size:11px;font-weight:600;display:inline-flex;align-items:center;justify-content:center}
.qcs{display:flex;flex-wrap:wrap;gap:6px}.qcs:empty{display:none}
.qc{font:inherit;font-size:12.5px;line-height:1.3;border:1px solid #D6D6D6;background:#fff;border-radius:14px;padding:4px 11px;min-height:26px;cursor:pointer;color:#333}
.qc:hover{border-color:#8C8C8C}
.qc.on{background:var(--go);border-color:var(--go);color:#fff}
.qc.on.fix{background:#8A5200;border-color:#8A5200}
.qc.other{color:#6F6F6F;border-style:dashed}
.qsep{align-self:center;margin:0 2px 0 6px;font-size:12px}
.more{border-top:1px solid var(--line);padding-top:12px}
.more>summary{cursor:pointer;font-size:13px;font-weight:600;color:#444;list-style-position:inside}
.more[open]>summary{margin-bottom:12px}
.more>.fld{margin-bottom:14px}
.empty .qs-h{font-weight:600;margin-bottom:12px;text-align:left;color:var(--ink)}
.qs{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px;text-align:left}
.qs-c{font:inherit;text-align:left;border:1px solid var(--line);background:#fff;border-radius:10px;padding:12px 14px;cursor:pointer;display:flex;flex-direction:column;gap:3px;color:var(--ink)}
.qs-c:hover{border-color:var(--go)}
.qs-c span{font-size:12px;color:#6F6F6F}
/* 8620 편집기 다듬기 (10/7 평가): 기간 칩은 링크로 열기 · 가로 막대 방향/몇 개는 모양 아래 · 조건은 기준 아래 */
.lnk{font:inherit;font-size:12px;background:none;border:0;padding:4px 6px;color:var(--go);cursor:pointer;text-decoration:underline;text-underline-offset:2px;align-self:center}
.hbar-o{margin-top:8px;align-items:center}
.topn{display:inline-flex;align-items:center;gap:6px;margin-left:6px;color:var(--mut)}
.topn input{width:64px}
.fld.cond > span{font-size:12px;color:var(--mut)}
.fld.cond #e-addf{align-self:flex-start}   /* 「+ 조건」 이 입력칸처럼 늘어나지 않게 */

/* 차트 편집 = 가운데 넓은 창 (10/8): 왼쪽 고르는 흐름, 오른쪽 큰 미리보기 */
.drbg{position:fixed;inset:0;background:rgba(0,0,0,.35);z-index:49}
.drbg[hidden]{display:none}
.drawer.dr-modal{top:4vh;bottom:4vh;left:0;right:0;margin:0 auto;width:min(1180px,94vw);border:1px solid var(--line);border-radius:14px;box-shadow:0 24px 70px rgba(0,0,0,.25);
  display:grid;grid-template-columns:460px minmax(0,1fr);grid-template-rows:auto auto auto auto minmax(0,1fr);overflow:hidden}
.dr-modal > .dr-h,.dr-modal > .dr-tabs,.dr-modal > .share{grid-column:1/-1}
.dr-modal > .dr-b{grid-column:1;grid-row:-2;border-right:1px solid var(--line);padding-bottom:24px;min-height:0}
.dr-modal > .dr-prev{grid-column:2;grid-row:-2;height:auto;margin:18px;min-height:0;align-self:center;justify-self:center;max-width:calc(100% - 36px);max-height:calc(100% - 36px)}
.dr-modal{background:#fff}.dr-modal > .dr-prev{box-shadow:0 2px 12px rgba(0,0,0,.06)}
.dr-modal > .dr-prev[hidden] + .dr-b{grid-column:1/-1;border-right:0}
.drawer.dr-modal.dr-narrow{width:min(620px,94vw);display:flex;flex-direction:column}
.dr-modal.dr-narrow > .dr-prev{height:180px;margin:12px 16px 0}
.dr-modal.dr-narrow > .dr-b{border-right:0}
.drawer.dr-modal{background:var(--bg)}   /* 미리보기 뒤는 대시보드 바탕 — 카드가 놓일 모습 그대로 */
.dr-modal > .dr-h,.dr-modal > .dr-tabs,.dr-modal > .share,.dr-modal > .dr-b{background:#fff}
.dr-modal > .dr-tabs{margin:0;padding:10px 16px 0}
.tgt-row{display:flex;gap:10px;align-items:center}.tgt-row input{flex:1}
.dr-modal .seg-b,.dr-modal .qc,.dr-modal button{word-break:keep-all}   /* 단어 중간에서 꺾이지 않게(「목/표/진/행」, 10/8) */
/* 모양 버튼도 다른 단계처럼 칩으로(줄바꿈돼도 어긋나지 않게), 추천으로 쓰는 모양은 테두리로 표시 (10/8) */
.dr-modal .segs-w{display:flex;flex-wrap:wrap;gap:6px;border:0;background:none;overflow:visible}
.dr-modal .segs-w .seg-b{flex:none;white-space:nowrap;border:1px solid #D6D6D6;border-radius:14px;padding:4px 11px;min-height:26px;font-size:12.5px;background:#fff;color:#333}
.dr-modal .segs-w .seg-b.on{background:#111;border-color:#111;color:#fff}
.dr-modal .segs-w .seg-b.sug{border-color:var(--go);color:var(--go);box-shadow:inset 0 0 0 1px var(--go)}
.chips .chip[hidden],.chips:not(:has(.chip:not([hidden]))){display:none}   /* 칩으로 이미 보이는 선택은 위 목록에서 숨김 — 다 숨으면 목록 자리도 없앰 */
.dr-modal .segs-w .seg-b:last-child{border-right:1px solid #D6D6D6}.dr-modal .segs-w .seg-b.on:last-child{border-color:#111}
/* 골랐지만 이 모양에선 안 쓰는 것 = 점선(사라진 것처럼 보이지 않게) · 순서 번호 · 기준이 필요할 때 (10/8) */
.qc.kept,.chip.kept{background:#EEF6F2;border:1px dashed var(--go);color:var(--go)}
.qc .ord,.chip .ord{display:inline-block;min-width:16px;height:16px;line-height:16px;border-radius:8px;background:rgba(255,255,255,.25);font-style:normal;font-size:11px;margin-right:5px;text-align:center}
.chip .ord{background:var(--go);color:#fff}
.fld.step.need{border-left:3px solid var(--amber);padding-left:9px;margin-left:-12px}
.rows-p{position:fixed;z-index:90;left:50%;top:50%;transform:translate(-50%,-50%);width:min(1100px,92vw);max-height:80vh;display:flex;flex-direction:column;background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:0 16px 48px rgba(0,0,0,.18)}
.rows-h{display:flex;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px solid var(--line)}.rows-b{overflow:auto;padding:4px 6px}.rows-b table{width:100%}.rows-b td,.rows-b th{white-space:nowrap;padding:6px 8px}.rows-b td{max-width:220px;overflow:hidden;text-overflow:ellipsis}
.pvmenu .pvm-rows{grid-column:1/-1}
.pvmenu{position:fixed;z-index:80;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 8px 28px rgba(0,0,0,.12);padding:8px;display:grid;grid-template-columns:auto auto;gap:6px;font-size:12px;max-width:320px}
.pvm-h{grid-column:1/-1;color:var(--mut);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pvm-h b{color:var(--ink)}
.pvmenu button{font:inherit;border:1px solid var(--line);background:#fff;border-radius:7px;padding:6px 10px;cursor:pointer;white-space:nowrap}.pvmenu button:hover{background:#F2F2F2}
.needt{font-style:normal;font-size:12px;color:var(--amber);font-weight:600}
.keepn{color:var(--go)}

/* 구글 시트 파일 카드(S2b) — 배지는 오른쪽으로 밀지 않는다, 「새 탭」 알림 */
.sh-file .st{margin-left:0}.warn-t{color:#9A6B00}.sh-file{margin-bottom:12px}.sh-tab{border-top:1px solid var(--line,#E5E5E5);padding:6px 0}
.sh-note{color:#3B5F55;margin:4px 0}.sh-tab.sh-gone{opacity:.55}.sh-all{background:var(--soft,#f2f8f6);padding:6px 8px;border-radius:6px}
.sh-tab [hidden]{display:none!important}
/* 시트 고르기 · 탭 관리 창 다듬기(S4-G) — 기존 클래스(.segs · .seg-b · .btn.sm · .pill · .lnk)와 :root 변수만, 시트 화면(.sh-*) 안에서만.
   필드 줄은 차트 편집기 .fld 의 라벨(12px · 600 · #444) · 입력 칸(#D9D9D9 · 7px)과 같은 값, 높이는 32px 로 맞춘다 */
.sh-all{display:flex;flex-wrap:wrap;align-items:center;gap:10px 22px;padding:10px 12px;border-radius:8px}
.sh-all.sh-own{background:none;padding:8px 0 4px}
.sh-field{display:inline-flex;align-items:center;gap:8px;min-height:32px}
.sh-lab{font-size:12px;font-weight:600;color:#444;white-space:nowrap}
.sh-seg{flex:none}.sh-seg .seg-b{min-height:32px;display:inline-flex;align-items:center}
.sh-step{display:inline-flex;align-items:center;gap:4px}
.sh-step .btn.sm{min-height:32px;width:32px;padding:0;justify-content:center;font-size:15px;line-height:1}
.sh-step input{font:inherit;font-size:13px;width:3.4em;min-height:32px;text-align:center;border:1px solid #D9D9D9;border-radius:7px;padding:0 4px;background:#fff;-moz-appearance:textfield;appearance:textfield}
.sh-step input::-webkit-outer-spin-button,.sh-step input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.sh-step input[aria-invalid]{border-color:var(--bad)}
.sh-seg .seg-b:focus-visible,.sh-step .btn:focus-visible,.sh-tab .btn:focus-visible,.sh-tab .lnk:focus-visible{outline:2px solid var(--go);outline-offset:-2px}
.sh-step input:focus,.sh-tab input[type=checkbox]:focus-visible,.sh-modes input:focus-visible{outline:2px solid var(--go);outline-offset:1px}
.sh-modes label,.sh-chk{display:inline-flex;align-items:center;gap:6px;cursor:pointer}
.sh-modes input,.sh-tab input[type=checkbox]{width:16px;height:16px;margin:0;accent-color:var(--go)}
.sh-tab input[type=checkbox]:disabled{cursor:not-allowed}
.sh-tab-h{gap:10px}.sh-tab-h .pill{flex:none}.sh-tab-h .lnk{padding:2px 4px}
#shPick .ch{flex-wrap:wrap;gap:6px 10px}#shTitle{overflow-wrap:anywhere}
@media (max-width:760px){.sh-all{gap:8px 14px;padding:8px 10px}.sh-tab-h{gap:6px 8px}#shPick .row-wrap{gap:8px 12px}}
/* 설정 › 운영자 › 시트 데이터(S5) — 기존 .fld · .segs(.sh-seg) · .card · .btn 그대로, 배치만 */
.ops-form{display:flex;flex-wrap:wrap;gap:12px 16px;align-items:flex-end;margin-top:10px}
.ops-form .fld{min-width:200px}.ops-form .ops-target{flex:1;min-width:260px}
.ops-form .fld>.segs,.ops-form .fld>.btn{align-self:flex-start}.ops-form .fld>.btn{min-height:34px}
.ops-plan{border-top:1px solid var(--line);margin-top:14px;padding-top:12px;display:flex;flex-direction:column;gap:8px}
.ops-charts{margin:0;padding-left:18px}
.ops-del .btn:disabled{opacity:.35;cursor:default}
.ops-force input{accent-color:var(--bad);margin-right:4px;vertical-align:-2px}
.ops-del select:focus-visible,.ops-del .btn:focus-visible,.ops-force input:focus-visible,[data-seed-edit]:focus-visible{outline:2px solid var(--go);outline-offset:1px}
@media (max-width:760px){.ops-form .fld,.ops-form .ops-target{min-width:100%}}

/* 기준선 판정 색(05 179 ①) — 주의 · 나쁨. 증감 색(.good/.bad)과 겹치지 않게 칸 배경으로 */
.num.th-warn{background:#FFF6E5;color:#8A5A00}
.num.th-bad{background:#FDECEA;color:#B42318;font-weight:600}
.kv3.th-warn{color:#8A5A00}
.kv3.th-bad{color:#B42318}
.th-set .th-row{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:4px}.th-set .th-row input[type=number]{width:64px}
/* ══ 새 채팅 제품 수준 (10/19, docs/history/plans/2026-10-19_새채팅-제품수준.md) — ChatGPT · Claude 의 답 아래 동작 줄 · 멈춤 버튼 ══ */
.chat-top{display:flex;justify-content:flex-end;min-height:30px;position:sticky;top:8px;z-index:5}
.chat:not(.live) .chat-top{display:none}
#chatSlot{width:100%}
.chat-form .btn.stop{background:var(--ink);border-color:var(--ink)}
.stop-sq{display:inline-block;width:10px;height:10px;background:#fff;border-radius:2px}
.ask-wait .dots::after{content:"";animation:gbdots 1.2s steps(4) infinite}
@keyframes gbdots{0%{content:""}25%{content:"."}50%{content:".."}75%{content:"..."}}
.ask-acts{display:flex;gap:2px;margin:6px 0 0 -6px}
.ask-acts .ib{width:30px;height:30px;color:#777}.ask-acts .ib:hover{color:var(--ink)}.ask-acts .ib.on{color:var(--go)}
.ask-how{margin-top:8px;font-size:12px;color:var(--mut)}.ask-how summary{cursor:pointer;width:fit-content}.ask-how .ask-ul{margin-top:4px}
.ask-chart{width:100%;margin:10px 0 2px;background:#fff;border:1px solid #ECECEC;border-radius:10px;padding:8px 6px 4px;box-sizing:border-box}
.ask-tscroll{overflow-x:auto;max-width:100%}
.ask-chips{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:8px}
.ask-fb{display:flex;flex-direction:column;gap:6px;margin-top:6px;padding:10px 12px;border:1px solid #ECECEC;border-radius:10px;background:#fff;max-width:520px}
.ask-fb .chip.on{background:var(--ink);border-color:var(--ink);color:#fff}
.ask-fb input{flex:1;font:inherit;font-size:13px;border:1px solid #D9D9D9;border-radius:7px;min-height:32px;padding:0 10px}
.ops-tiles{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:10px;margin-top:10px}.ops-tiles .ask-num{font-size:22px}
@media (max-width:1100px){.ops-tiles{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:760px){.chat{min-height:calc(100vh - 60px)}.chat .ask-q{max-width:90%}.chat-empty h1{font-size:22px}.chat.live .chat-form{bottom:8px}.ops-tiles{grid-template-columns:repeat(2,minmax(0,1fr))}}
/* 휴대폰(760px 이하): 사이드바는 숨기고 머리의 메뉴 버튼으로 연다 — 열면 겹쳐 뜸(10/19 벤치마크: 숨김 + 메뉴 버튼, 아이콘 줄 0/39) */
.mnav{display:none}
@media (max-width:760px){.app:not(.side-closed) .side{position:fixed;left:0;top:0;bottom:0;width:min(280px,85vw);height:100vh;z-index:70;box-shadow:8px 0 30px rgba(0,0,0,.12)}
  .app.side-closed .side{display:none}.app{flex-wrap:nowrap}.mnav{display:inline-flex;margin-right:4px}}
.ask-a .ask-tbl td.num,.ask-a .ask-tbl th,.ask-card .tbl td.num{white-space:nowrap}
/* 새 채팅 기록 관리(10/19): 사이드바 대화 줄 「⋯」 · 메뉴 · 「모두 보기」 화면 */
.chat-row{position:relative;display:flex;align-items:center}.chat-row>.nav-a{flex:1;min-width:0;padding-right:30px}
.chat-row .nav-a .nl{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.row-more{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:24px;height:24px;border:none;border-radius:6px;background:transparent;color:#666;cursor:pointer;font-size:16px;line-height:1;opacity:0}
.chat-row:hover .row-more,.row-more:focus-visible,.hist-row:hover .row-more{opacity:1}.row-more:hover{background:#E6E6E6;color:var(--ink)}
@media (hover:none){.row-more{opacity:1}}
.app.side-closed .chat-row{display:none}
.rowmenu{position:absolute;z-index:90;min-width:150px;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 8px 28px rgba(0,0,0,.12);padding:4px;display:flex;flex-direction:column}
.rowmenu button{font:inherit;font-size:13px;text-align:left;border:none;background:none;padding:7px 10px;border-radius:6px;cursor:pointer;color:var(--ink)}.rowmenu button:hover{background:#F2F2F2}.rowmenu button.bad{color:var(--bad)}
.hist{max-width:760px;margin:0 auto}.hist h1{font-size:20px;margin:0}
.hist-q{font:inherit;font-size:14px;width:100%;box-sizing:border-box;border:1px solid #D9D9D9;border-radius:10px;min-height:38px;padding:0 12px;margin:14px 0 6px;background:#fff}
.hist-row{position:relative;border-bottom:1px solid var(--line)}.hist-row a{display:flex;gap:12px;align-items:center;padding:12px 36px 12px 4px;color:var(--ink);text-decoration:none}.hist-row a:hover{background:#F5F5F5}
.hist-t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hist-row .row-more{right:6px}.pin-i{vertical-align:-2px;margin-right:4px;color:#777}
.hist-empty{padding:24px 4px}#histMore{margin:12px auto;display:block}#histMore[hidden]{display:none}  /* hidden 속성을 display:block 이 덮지 않게(10/19 화면 확인) */
.ask-when{margin-bottom:6px}
/* 답 차트 크게 보기 · 대시보드에 추가(10/19 Manus 비교) */
.ask-chart-w .chart-acts{display:flex;gap:6px;justify-content:flex-end;margin-top:4px}.ask-chart-w .chart-acts .btn{min-height:28px;font-size:12px}
.todash{display:flex;gap:6px;align-items:center;margin-top:6px;justify-content:flex-end}.todash select{font:inherit;font-size:13px;border:1px solid #D9D9D9;border-radius:7px;min-height:30px;padding:0 8px;max-width:240px;background:#fff}
.chart-drawer{width:min(720px,100vw);padding:0}.cd-head{display:flex;align-items:center;gap:8px;padding:14px 16px;border-bottom:1px solid var(--line)}
.cd-chart{flex:1;margin:12px 16px;min-height:60vh;border:none}.cd-foot{padding:12px 16px;border-top:1px solid var(--line);display:flex;flex-direction:column;align-items:flex-end}
/* 사이드바 구역 머리(10/19): 모든 구역이 같은 모양 · 같은 들여쓰기(.sec 그대로), 오른쪽 끝 작은 화살표. 접으면 처리할 일 수를 꼬리표로 */
button.sec.sec-tog{display:flex;align-items:center;gap:6px;font-family:inherit;font-size:13px;font-weight:500;color:var(--ink);
  background:none;border:none;padding:0;margin:16px 10px 4px;cursor:pointer;text-align:left;width:auto}
button.sec.sec-tog:hover{color:var(--ink)}
.sec-tog .chev{margin-left:0;font-size:10px;line-height:1;transition:transform .15s}.sec-tog[aria-expanded="false"] .chev{transform:rotate(-90deg)}   /* 꺾쇠는 글자 바로 옆(10/19 사용자 — 오른쪽 끝은 글자와 너무 멂) */
.sec-tog .sec-count{margin-left:0}.sec-tog[aria-expanded="true"] .sec-count{display:none}
.sec-split{height:1px;background:var(--line);margin:4px 10px}
.app.side-closed .sec-body[hidden]{display:block}.app.side-closed .sec-split{display:none}   /* 접은 사이드바(아이콘 줄)에서는 구역을 접어도 아이콘은 보인다 */
.sec-gap{height:14px}.app.side-closed .sec-gap{display:none}
.app.side-closed .rail-sep:has(+ .sec-tog[data-sec="chats"]){display:none}   /* 접은 사이드바: 최근 채팅 구역은 아이콘이 없어 구분선이 두 줄로 겹치던 것 */
/* 대시보드 옆 채팅 패널(10/19 — Metabase Metabot · Mixpanel · Qlik · Fabi 오른쪽 패널 · Amplitude ⌘⇧K 등 7곳): 열면 대시보드가 왼쪽으로 좁아짐 */
.dchat{position:fixed;top:0;right:0;bottom:0;width:420px;background:#fff;border-left:1px solid var(--line);z-index:45;display:flex;flex-direction:column}
.dchat[hidden]{display:none}
.dchat-h{display:flex;align-items:center;gap:6px;padding:10px 12px;border-bottom:1px solid var(--line)}.dchat-h strong{font-size:14px}
.dchat-b{flex:1;overflow:auto;padding:12px 14px 0}
.dchat .chat{min-height:100%;max-width:none}.dchat .chat-empty{padding-bottom:0}.dchat .chat-empty h1{font-size:18px}.dchat .chat-exs{flex-direction:column;align-items:stretch}
.dchat .chat.live .chat-form{bottom:10px}.dchat .chat-top{display:none}
.app.with-chat .main{margin-right:420px}
.chat-tog.on{background:#E6E6E6;color:var(--ink)}
@media (max-width:760px){.dchat{width:100vw}.app.with-chat .main{margin-right:0}}
.dchat .ib,.dchat .ask-acts .ib{border:none;background:transparent}.dchat .ask-acts .ib:hover{background:#ECECEC}   /* 대시보드 화면의 버튼 모양이 패널에 묻지 않게 */
/* 대시보드 머리 「⋯」 메뉴(10/19) — 사이드바 대화 메뉴와 같은 모양 */
.dmore{position:relative;display:inline-flex}.dmore .dmenu{position:absolute;right:0;top:calc(100% + 4px);left:auto}
.dmore .dmenu[hidden]{display:none}
/* 계정(사이드바 맨 아래, 10/19) — ChatGPT · Claude · Manus 와 같은 자리. 메뉴는 버튼 위로 */
.side-foot{margin-top:auto;position:sticky;bottom:0;background:var(--side);padding-top:8px}
.acct{display:flex;align-items:center;gap:10px;width:100%;border:none;background:none;border-radius:8px;padding:6px 8px;cursor:pointer;font:inherit;text-align:left;color:var(--ink)}
.acct:hover{background:#ECECEC}
.avatar{flex:none;width:28px;height:28px;border-radius:50%;background:var(--ink);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:12px;font-weight:600}
.acct-t{display:flex;flex-direction:column;min-width:0;line-height:1.25}.acct-t b{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.acct-t span{font-size:12px;color:var(--mut)}
.acct-menu{bottom:calc(100% + 6px);left:0;right:0;top:auto}
.acct-menu[hidden]{display:none}
.acct-menu .acct-h{display:flex;flex-direction:column;padding:8px 10px 10px;border-bottom:1px solid var(--line);margin-bottom:4px}.acct-menu .acct-h b{font-size:13px}.acct-menu .acct-h span{font-size:12px;color:var(--mut)}
.acct-menu a{font-size:13px;padding:7px 10px;border-radius:6px;text-decoration:none;color:var(--ink)}.acct-menu a:hover{background:#F2F2F2}.acct-menu a.bad{color:var(--bad)}
.app.side-closed .side-foot{display:flex;justify-content:center}.app.side-closed .acct{width:auto;padding:4px}
.app.side-closed .acct-menu{position:fixed;left:64px;bottom:12px;right:auto;top:auto;min-width:200px}   /* 접은 사이드바: 사이드바(overflow) 밖으로 띄워야 안 잘림 */
.app.side-closed .side{z-index:46}   /* 띄운 계정 메뉴가 본문 뒤로 깔리지 않게(대화상자 · 서랍 50~ 보다는 아래) */
/* 경영 › 채널별 매출 · 목표(11/1, docs/intent/2026-11-01_채널별-매출-목표) — 제품 부품(card · kpi · tbl · segs · pill) 위에 배치만 */
.bz [hidden]{display:none !important}   /* .btn 의 display 가 hidden 을 이기지 않게(목표 수정 · 취소 · 수정 완료가 한꺼번에 보였음) */
.bz-row{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:10px}
.bz-segs{flex-wrap:wrap}
.bz-lbl{width:44px;font-size:12px;font-weight:600;color:#444;flex:none}
.bz-filters .bz-row:last-child{margin-bottom:0}
.bz-dates{display:inline-flex;gap:6px;align-items:center}.bz-dates input{font:inherit;font-size:12px;border:1px solid #D9D9D9;border-radius:7px;min-height:30px;padding:0 6px;background:#fff}
.bz-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(200px,100%),1fr));gap:12px;margin-bottom:12px}.bz-kpis .card{margin-bottom:0}
.bz-h2{margin:28px 0 10px}
.bz-sec .bz-h{margin-bottom:0;flex-wrap:wrap}
.bz-scroll{overflow-x:auto}
.bz-tbl td{vertical-align:middle;white-space:nowrap}
.bz-tbl tr.bz-sum td{font-weight:600;background:#FAFAFA}
.bz-tbl tr.bz-sub td{color:var(--mut);font-size:12px}
.bz-tbl tr.bz-part td{color:var(--mut)}   /* 기간에 일부만 담긴 첫 · 마지막 주 · 달(차트의 흐린 칸과 같은 뜻) */
.bz-tbl tr.bz-hl td{background:#FFF8E1}   /* 어제(마지막 수집일) 줄 — 목업 S15 */
.bz-none{color:#9A9A9A;font-size:12px}
.bz-ic{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 3px;box-sizing:border-box;border-radius:5px;font-size:10px;font-weight:700;line-height:1;margin-right:6px;vertical-align:middle;position:relative;top:-1px;flex:none;letter-spacing:0}   /* 채널 배지(목업 글자 · 색) */
.bz-segs .seg-b .bz-ic{margin-right:5px;top:0}.bz-segs .seg-b:has(.bz-ic){display:inline-flex;align-items:center}   /* 배지가 든 칩: 글자와 가운데 맞춤(11/02 「아래로 치우침」) */
.bz-tbl th .bz-ic{margin-right:4px}
.bz-bar{position:relative;display:inline-block;width:64px;height:6px;border-radius:3px;background:#EEE;margin-left:8px;vertical-align:middle}
.bz-bar b{position:absolute;left:0;top:0;bottom:0;border-radius:3px;background:var(--go)}
.bz-bar .bz-prog{position:absolute;top:-3px;width:2px;height:12px;background:var(--ink);margin-left:-1px}
.bz-st.ok{color:var(--go);background:#EAF4F0}.bz-st.amber{color:#8A5A00;background:#FFF6E5}.bz-st.bad{color:var(--bad);background:#FDECEA}
.bz-in{font:inherit;font-size:13px;border:1px solid #D9D9D9;border-radius:7px;min-height:30px;padding:0 8px;width:140px;text-align:right;background:#fff}
.bz-def{margin:0}
/* 카드 불러오는 중 · 다시 받는 중 — 대시보드 카드 틀(.wc · .wh · .wb.busy · .wload)을 그대로, 높이만 카드 모양에 맞춘다(bizpages/card.py) */
.bz-wc{margin-bottom:12px}.bz-kpis .bz-wc{margin-bottom:0}.bz-wc-bar{min-height:150px}.bz-wc-table{min-height:220px}.bz-wc-chart{min-height:340px}.bz-wc-page{min-height:420px}
.bz-wc-note .wb{padding:0 2px 10px}.bz-wc-note .wload{padding-top:0}
.bz-card{position:relative}.bz-card.bz-busy::after{content:"";position:absolute;left:14px;right:14px;top:0;height:2px;background:linear-gradient(90deg,transparent,var(--go),transparent);animation:gbbar 1s linear infinite;pointer-events:none}   /* 필터를 바꿔 다시 받는 동안: 그 카드 위에 대시보드와 같은 막대 */
.bz-card.bz-busy>*{opacity:.55;transition:opacity .15s}.bz-card.bz-busy{pointer-events:none;overflow:hidden}   /* 막대가 카드 밖(사이드바)으로 나가지 않게 */
.bz-card[data-pending].bz-busy>*{opacity:1}.bz-card[data-pending].bz-busy::after{display:none}   /* 틀은 카드 안 막대(.wb.busy)가 이미 돈다 */
.bz-warn{margin:8px 0 0}
.bz-segs.bz-dis .seg-b{color:#AAA;cursor:not-allowed}.bz-segs.bz-dis .seg-b.on{background:#E6E6E6;color:#888}
.bz-scope{margin:0 2px 10px}.bz-scope b{color:var(--ink);font-weight:600}
.bz-chart{width:100%;padding:8px 12px 12px;box-sizing:border-box}
.bz-ctog button.seg-b{min-height:0}
.bz-bls{display:flex;flex-direction:column;gap:6px}
.bz-bl{display:grid;grid-template-columns:minmax(90px,1.2fr) 3fr minmax(96px,auto) 56px minmax(90px,auto);gap:10px;align-items:center;font-size:13px}
.bz-bl-b{height:8px;background:#F0F0F0;border-radius:4px;position:relative;overflow:hidden}.bz-bl-b b{position:absolute;left:0;top:0;bottom:0;background:var(--go);border-radius:4px}
.bz-bl-v,.bz-bl-s{text-align:right}.bz-bl-d{color:var(--mut)}
.bz-bl-a{color:var(--ink);text-decoration:none;border-bottom:1px dashed #BBB}.bz-bl-a.on{font-weight:700;border-bottom-color:var(--go)}
.bz-drill{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(320px,100%),1fr));gap:4px}.bz-drill .bz-bl{grid-template-columns:minmax(80px,1.2fr) 2fr minmax(90px,auto) 52px 60px}
.bz-h3{font-size:13px;margin:4px 18px 0}
.bz-path{margin:0}
.bz-ph{display:flex;flex-direction:column;gap:4px}.bz-ph-v{font-size:15px}
.bz-tbl tr.bz-neg td{background:#FDF1F0}
.bz-bar.bz-bar-w{width:120px;margin-left:0}
.bz-h2 + .bz-segs{margin-bottom:10px}
@media (max-width:760px){.bz-bl{grid-template-columns:1fr 1fr;row-gap:2px}.bz-bl-b{grid-column:1 / -1;order:5}}
.bz-bar.bz-bar-neg b{background:var(--bad)}
.bz-exp{border:1px solid #D9D9D9;background:#fff;border-radius:5px;width:22px;height:22px;cursor:pointer;font-size:11px;line-height:1;padding:0}
.bz-tbl tr.bz-child td{background:#FBFBFB;font-size:12px}.bz-indent{padding-left:24px;display:inline-block}
/* 공구 · 기획전 · 프로모션(11/01): 캘린더 · 행사 막대 · 등록 칸 */
.bz-note{margin-bottom:12px;font-size:13px}
.bz-cal{border:1px solid var(--line);border-radius:8px;overflow:hidden}
.bz-cal-hs,.bz-cal-ds{display:grid;grid-template-columns:repeat(7,minmax(0,1fr))}
.bz-cal-h{font-size:12px;color:var(--mut);padding:6px 8px;background:#FAFAFA;border-bottom:1px solid var(--line)}.bz-cal-h.sun{color:var(--bad)}.bz-cal-h.sat{color:#2A5DB0}
.bz-cal-w{border-bottom:1px solid var(--line2);min-height:64px}
.bz-cal-d{font-size:12px;padding:4px 8px;color:#444}.bz-cal-d.out{color:#C4C4C4}.bz-cal-d.today{font-weight:700;color:var(--go)}
.bz-cal-lanes{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));grid-auto-rows:22px;gap:3px 0;padding:0 2px 6px}
.bz-evb{display:block;font-size:11px;line-height:20px;padding:0 6px;margin:0 2px;border-radius:5px;color:#fff;text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid transparent}
.bz-evb:hover{filter:brightness(0.95);color:#fff}
.bz-evb.k-gg,.bz-evb-k.k-gg{background:#E07A1F}.bz-evb.k-gh,.bz-evb-k.k-gh{background:#7A4FC2}.bz-evb.k-pm,.bz-evb-k.k-pm{background:#0F7B5F}
.bz-evb.s-done{opacity:.45}.bz-evb.s-wait{background:#fff!important;color:#333;border:1px dashed #888}
.bz-evb.cont-l{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:0}.bz-evb.cont-r{border-top-right-radius:0;border-bottom-right-radius:0;margin-right:0}
.bz-evb-k{display:inline-block;width:12px;height:8px;border-radius:2px;margin:0 4px 0 10px;vertical-align:middle}.bz-evb-k.s-done{background:#E07A1F;opacity:.45}.bz-evb-k.s-wait{border:1px dashed #888}
.bz-cal-lg{margin-top:8px}
.pill.bz-kind.k-gg{color:#9A4A06;background:#FDEEDF}.pill.bz-kind.k-gh{color:#5A3196;background:#F0E9FB}.pill.bz-kind.k-pm{color:var(--go);background:#EAF4F0}
.pill.bz-evst.s-on{color:var(--go);background:#EAF4F0}.pill.bz-evst.s-wait{color:#555;background:#F0F0F0}.pill.bz-evst.s-done{color:#888;background:#F5F5F5}
.bz-lane{display:inline-block;font-size:11px;padding:0 5px;border-radius:4px;color:#fff;margin-right:3px;max-width:140px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:middle}
.bz-lane.k-gg{background:#E07A1F}.bz-lane.k-gh{background:#7A4FC2}.bz-lane.k-pm{background:#0F7B5F}
.bz-evform{border-color:var(--go)}.bz-evgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(200px,100%),1fr));gap:10px 14px;margin-top:8px}.bz-evwide{grid-column:1 / -1}
.bz-evbtns{justify-content:flex-end;margin:10px 0 0}
.bz-kv{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(220px,100%),1fr));gap:10px 18px}.bz-kv div{display:flex;flex-direction:column;gap:2px}.bz-kv b{font-weight:600;font-size:13px}
.bz-jump{gap:6px;margin:0}.bz-jump .seg-b{border:1px solid #E3E3E3;border-radius:6px;padding:3px 9px;font-size:12px;text-decoration:none}
