/* Solution Hub V4 (B63) — customer workspace. Single stylesheet.
   Design basis: Renew_Design/Solution Hub/V2/DESIGN.md — light palette, Hub-mark teal accent,
   real type hierarchy (Noto Sans KR variable 400–750), status colour + text, 8/12 radii. */
@font-face{font-family:'Noto Sans KR';src:url('/fonts/noto-sans-kr.woff?v=20261018') format('woff');font-weight:100 900;font-display:swap}
:root{
  --canvas:#f2f5f5;--paper:#fff;--ink:#14232a;--ink-2:#43545b;--muted:#56676e;--line:#d9e1e3;--line-2:#e8eef0;
  --brand:#135666;--brand-hover:#0e4552;--brand-tint:#e2eef0;
  --bad:#b42318;--bad-tint:#fcebe9;--warn:#94570a;--warn-tint:#fdf2dc;--ok:#1d7347;--ok-tint:#e3f3ea;
  --r:8px;--r-panel:12px;
  --font:'Noto Sans KR','Malgun Gothic','Apple SD Gothic Neo',system-ui,sans-serif;
  --top:60px;--max:1480px;--gutter:32px;--dock:232px;
  color-scheme:light;
}
*,*::before,*::after{box-sizing:border-box}
[hidden]{display:none!important}
html{scroll-padding-top:calc(var(--top) + 64px);-webkit-text-size-adjust:100%}
body{margin:0;min-height:100vh;display:flex;flex-direction:column;background:var(--canvas);color:var(--ink-2);font:400 16px/1.6 var(--font);-webkit-font-smoothing:antialiased;word-break:keep-all;overflow-wrap:anywhere}
h1,h2,h3,h4{color:var(--ink);margin:0;letter-spacing:-.01em}
h1{font-size:26px;line-height:1.25;font-weight:750}
h2{font-size:18px;line-height:1.35;font-weight:700}
h3{font-size:15px;line-height:1.4;font-weight:700}
p{margin:0}
b,strong{font-weight:650;color:var(--ink)}
small{font-size:14px;color:var(--muted)}
a{color:var(--brand);text-underline-offset:3px}
img{max-width:100%}
button,input,select,textarea{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--brand);outline-offset:2px}
.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important;scroll-behavior:auto!important}}
.skip{position:absolute;left:16px;top:-80px;z-index:100;background:var(--brand);color:#fff;padding:8px 12px;border-radius:var(--r);font-weight:600}
.skip:focus{top:8px}

/* ---- Buttons ---- */
button,.btn{min-height:38px;padding:0 14px;border:1px solid var(--line);border-radius:var(--r);background:var(--paper);color:var(--ink);font-size:15px;font-weight:600;line-height:1.2;display:inline-flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap;cursor:pointer;transition:background .12s,border-color .12s}
button:hover{background:var(--canvas);border-color:#c6d1d4}
button:disabled,button[aria-disabled="true"]{color:#9aa8ad;background:var(--paper);border-color:var(--line-2);cursor:not-allowed}
.primary,button.primary,button.hub47-primary,button.hub36-primary,button[type="submit"]{background:var(--brand);border-color:var(--brand);color:#fff}
button.primary:hover,button.hub47-primary:hover,button.hub36-primary:hover,button[type="submit"]:hover{background:var(--brand-hover);border-color:var(--brand-hover)}
button.primary:disabled,button.hub47-primary:disabled,button.hub36-primary:disabled,button[type="submit"]:disabled{background:#c5d3d6;border-color:#c5d3d6;color:#fff}
.ghost,.smallBtn,.hub36-refresh{border-color:transparent;background:transparent;color:var(--brand)}
.ghost:hover,.smallBtn:hover{background:var(--brand-tint);border-color:transparent}
.move{min-height:32px;padding:0 10px;font-size:14px}
.smallBtn{min-height:32px;padding:0 10px;font-size:14px}

/* ---- Form fields ---- */
label{display:block;font-size:14px;font-weight:600;color:var(--ink);margin:16px 0 6px}
input:not([type=checkbox]):not([type=radio]),select,textarea{width:100%;min-height:40px;padding:8px 12px;border:1px solid var(--line);border-radius:var(--r);background:var(--paper);font-size:15px;font-weight:400;color:var(--ink)}
input::placeholder,textarea::placeholder{color:#6a7b82}
textarea{min-height:96px;resize:vertical}
input:focus,select:focus,textarea:focus{outline:2px solid var(--brand);outline-offset:-1px;border-color:var(--brand)}
input[type=checkbox],input[type=radio]{accent-color:var(--brand);width:16px;height:16px}
fieldset{border:1px solid var(--line);border-radius:var(--r);padding:8px 12px 12px;margin:0}
legend{font-size:14px;font-weight:600;color:var(--ink);padding:0 4px}

/* ---- Text helpers ---- */
.hint,.small-label,.hub47-scope,.hub47-searchcount,.hub20-connection-state{color:var(--muted);font-size:14px;line-height:1.5}
.message{min-height:20px;font-size:14px;color:var(--ink)}
.empty,.hub49-no-results,.hub20-clear,.hub35-empty{padding:20px 16px;color:var(--muted);font-size:15px}

/* ---- Top bar ---- */
.top{position:sticky;top:0;z-index:40;height:var(--top);display:flex;align-items:center;gap:14px;padding:0 var(--gutter);background:var(--paper);border-bottom:1px solid var(--line)}
.brand{display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--ink);font-size:16px;font-weight:700;white-space:nowrap}
.brand-logo{width:30px;height:30px}
.tag{color:var(--muted);font-size:14px;padding-left:14px;border-left:1px solid var(--line)}
.top-actions{margin-left:auto;display:flex;align-items:center;gap:12px;color:var(--muted);font-size:14px}
.top-actions #signOut{min-height:34px}
main{flex:1;width:100%}

/* ---- Login ---- */
.auth-wrap{min-height:calc(100vh - var(--top) - 72px);display:grid;grid-template-columns:minmax(0,1.15fr) minmax(340px,420px);gap:72px;align-items:center;width:min(1160px,100% - 48px);margin:0 auto;padding:56px 0}
.auth-copy h1{font-size:30px;line-height:1.25;font-weight:750;letter-spacing:-.02em}
.auth-copy p{margin-top:20px;max-width:46ch;font-size:17px;color:var(--ink-2)}
.trust{list-style:none;margin:28px 0 0;padding:0;display:flex;flex-direction:column;gap:10px;color:var(--ink);font-size:15px;font-weight:600}
.trust li{display:flex;align-items:center;gap:10px}
.trust li::before{content:"";width:18px;height:18px;border-radius:50%;background:var(--brand-tint) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 18 18'%3E%3Cpath d='M5 9.2l2.6 2.6L13 6.4' fill='none' stroke='%23135666' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/18px no-repeat;flex:none}
.auth-box{background:var(--paper);border:1px solid var(--line);border-radius:var(--r-panel);padding:32px}
.auth-box h2{font-size:22px}
.auth-box h2+p{margin-top:6px;color:var(--muted);font-size:15px}
.seg{display:grid;grid-template-columns:1fr 1fr;gap:4px;padding:4px;margin:22px 0 4px;background:var(--canvas);border-radius:var(--r)}
.seg button{border:0;min-height:36px;color:var(--muted);background:transparent}
.seg button[aria-selected="true"]{background:var(--paper);color:var(--ink);box-shadow:0 0 0 1px var(--line)}
.auth-box .primary{width:100%;margin-top:24px;min-height:46px;font-size:15px}

/* ---- Workspace shell: tab bar under the top bar ---- */
/* ---- Workspace shell (W-B2): product dock left, bar + content right, drawer on the right edge ---- */
#workspacePanel{display:grid;grid-template-columns:var(--dock) minmax(0,1fr);min-height:calc(100vh - var(--top))}
body:has(#workspacePanel:not([hidden])) .login-footer{display:none}
.hub-dock{position:sticky;top:var(--top);align-self:start;height:calc(100vh - var(--top));overflow-y:auto;display:flex;flex-direction:column;gap:2px;padding:12px 10px 16px;background:var(--paper);border-right:1px solid var(--line);scrollbar-width:thin}
.hub-dock .hub-tabs{display:contents}
.hub-dock .hub-tabs [role=tab]>span{grid-row:1/3}
#workspacePanel:not([hidden]){background:linear-gradient(to right,var(--paper) calc(var(--dock) - 1px),var(--line) calc(var(--dock) - 1px),var(--line) var(--dock),transparent var(--dock))}
.hub-dock #hub35-tab-overview{order:1}
.hub-dock .dock-label{order:2}
.hub-dock .hub35-product-tabs{order:3}
.hub-dock #hub35-tab-map{order:4;margin-top:10px}
.hub-dock #hub35-tab-issues{order:5}
.hub-dock #hub35-tab-report{order:6}
.hub-dock #hub35-tab-settings{order:7}
.hub-dock .hub49-switch-trigger{order:8;margin-top:auto}
.hub-dock [role=tab]{position:relative;display:grid;grid-template-columns:28px minmax(0,1fr) auto;grid-template-rows:auto auto;column-gap:10px;align-items:center;justify-content:stretch;width:100%;min-height:46px;padding:6px 10px;border:0;border-radius:var(--r);background:transparent;color:var(--ink-2);font-size:14.5px;font-weight:600;text-align:left;white-space:nowrap}
.hub-dock [role=tab]>svg{grid-row:1/3;width:22px;height:22px;justify-self:center;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.hub-dock [role=tab]>span{grid-column:2;overflow:hidden;text-overflow:ellipsis}
.hub-dock [role=tab]>small{grid-column:2;font-size:13px;font-weight:400;color:var(--muted);overflow:hidden;text-overflow:ellipsis}
.hub-dock [role=tab]:hover{background:var(--canvas);color:var(--ink)}
.hub-dock .hub-tabs [role=tab][aria-selected="true"],body[data-hub-view="workbench"] .hub35-product-tabs [role=tab][aria-selected="true"]{background:var(--brand-tint);color:var(--brand);font-weight:700}
.hub-dock .hub-tabs [role=tab][aria-selected="true"]::after{content:"";position:absolute;left:0;top:9px;bottom:9px;width:3px;border-radius:0 3px 3px 0;background:var(--brand)}
.dock-label{margin:14px 10px 4px;font-size:13px;font-weight:700;color:var(--muted)}
.hub35-product-tabs{display:flex;flex-direction:column;gap:2px}
.hub35-product-tabs [role=tab]::before{content:"";grid-row:1/3;width:28px;height:28px;border-radius:7px;background:var(--canvas) center/28px no-repeat}
[data-hub-product-tab="leaddock"]::before{background-image:url('/brand/leaddock.svg')!important}
[data-hub-product-tab="linkpulse"]::before{background-image:url('/brand/linkpulse.svg')!important}
[data-hub-product-tab="pulseboard"]::before{background-image:url('/brand/pulseboard.svg')!important}
[data-hub-product-tab="diffbeacon"]::before{background-image:url('/brand/diffbeacon.svg')!important}
[data-hub-product-tab="intakedock"]::before{background-image:url('/brand/intakedock.svg')!important}
[data-hub-product-tab="sitebeamerp"]::before{background-image:url('/brand/sitebeamerp.svg')!important}
/* account state dot on the product mark (colour + the tab's aria-label carries the words); unread badge at the right */
.hub35-product-tabs [role=tab][data-state]::after{content:"";position:absolute;left:31px;top:28px;width:10px;height:10px;border-radius:50%;border:2px solid var(--paper);background:#b8c4c8}
.hub35-product-tabs [role=tab][data-state="linked"]::after{background:var(--ok)}
.hub35-product-tabs [role=tab][data-state="connect"]::after{background:#d58a12}
.hub35-product-tabs [role=tab][data-state="forbidden"]::after{background:var(--bad)}
body[data-hub-view="workbench"] .hub35-product-tabs [role=tab][aria-selected="true"]{box-shadow:inset 3px 0 0 var(--brand)}
.dock-badge{grid-column:3;grid-row:1/3;min-width:22px;padding:0 6px;border-radius:999px;background:var(--brand);color:#fff;font-size:13px;font-weight:700;line-height:20px;text-align:center}
.hub49-switch-trigger{min-height:34px;padding:0 10px;color:var(--muted);font-weight:500;font-size:14px;justify-content:space-between;width:100%}
.hub49-switch-trigger::after{content:"Ctrl K";font-size:13px;font-weight:600;color:var(--muted);padding:1px 5px;border:1px solid var(--line);border-radius:4px}
.ws-main{min-width:0;display:flex;flex-direction:column}
.ws-bar{position:sticky;top:var(--top);z-index:30;display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:56px;padding:8px var(--gutter);background:var(--paper);border-bottom:1px solid var(--line)}
.org-select{display:flex;align-items:center;gap:8px;margin:0;flex:0 1 auto;min-width:0;font-size:14px;color:var(--muted);font-weight:600}
.org-select select{width:auto;min-width:180px;max-width:300px;min-height:36px;font-weight:600}
.ws-bar-actions{display:flex;align-items:center;gap:6px}
.bar-btn{min-height:38px;gap:6px;padding:0 12px}
.bar-btn svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.bar-btn[aria-expanded="true"]{background:var(--brand-tint);border-color:#b9d3d8;color:var(--brand)}
.bar-count{min-width:20px;padding:0 6px;border-radius:999px;background:var(--brand);color:#fff;font-size:13px;font-weight:700;line-height:20px;text-align:center}
.bar-link{border-color:#efd29a;background:var(--warn-tint);color:var(--warn)}
.bar-link .bar-count{background:#d58a12}
.hub21-stage{flex:1;width:min(var(--max),100%);padding:24px var(--gutter) 56px}
.ws-main>footer{margin-top:auto}
/* drawer */
.hub-drawer{position:fixed;z-index:45;top:calc(var(--top) + 56px);right:0;bottom:0;width:min(440px,100vw);display:flex;flex-direction:column;background:var(--canvas);border-left:1px solid var(--line);box-shadow:-14px 0 34px rgba(20,35,42,.12)}
.hub-drawer-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 14px;background:var(--paper);border-bottom:1px solid var(--line)}
.hub-drawer-tabs{display:flex;gap:4px;padding:3px;background:var(--canvas);border-radius:var(--r)}
.hub-drawer-tabs button{min-height:34px;border:0;background:transparent;color:var(--muted)}
.hub-drawer-tabs button[aria-pressed="true"]{background:var(--paper);color:var(--ink);box-shadow:0 0 0 1px var(--line)}
.hub-drawer-body{flex:1;overflow-y:auto;padding:14px}
.hub-drawer-body .hub20-block{padding:16px}
.hub-drawer-body .hub-inline-form{grid-template-columns:1fr}
/* 연결이 필요한 제품 */
.hub-connect-strip{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:12px 16px;border-radius:var(--r-panel);background:var(--warn-tint);border:1px solid #efd29a}
.hub-connect-strip>b{color:var(--warn);margin-right:6px}
/* 제품 view */
.hub-mode{display:flex;gap:3px;padding:3px;background:var(--canvas);border-radius:var(--r)}
.hub-mode button{min-height:34px;border:0;background:transparent;color:var(--muted)}
.hub-mode button[aria-pressed="true"]{background:var(--paper);color:var(--ink);box-shadow:0 0 0 1px var(--line)}
.hub-embed{display:flex;flex-direction:column}
.hub-embed iframe{width:100%;height:calc(100vh - var(--top) - 56px - 96px);min-height:480px;border:1px solid var(--line);border-radius:var(--r-panel);background:var(--paper)}
/* product screen: slim toolbar + edge-to-edge frame, no page chrome around it */
body.hub-screen .hub21-stage{padding-top:12px;padding-bottom:12px;max-width:none;width:100%}
body.hub-screen .hub47-command{padding:8px 14px;border-radius:var(--r)}
body.hub-screen .hub47-command-current{flex-direction:row;align-items:center;gap:10px}
body.hub-screen .hub47-command-current h1{font-size:17px}
body.hub-screen #hub47ActiveStatus{margin-top:0}
body.hub-screen .ws-main>footer{display:none}
body.hub-screen .hub35-workbench{gap:10px}
.hub-gate{display:flex;align-items:center;justify-content:space-between;gap:16px 24px;flex-wrap:wrap;padding:22px 24px;border:1px solid var(--line);border-radius:var(--r-panel);background:var(--paper)}
.hub-gate h2{font-size:18px}
.hub-gate p{margin-top:4px;color:var(--ink-2);max-width:62ch}
.hub-gate-actions{display:flex;gap:8px;flex-wrap:wrap}
.hub-quick-head{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;flex-wrap:wrap}
.hub-quick-head h2{font-size:16px}
.hub-quick{display:flex;flex-direction:column;gap:14px;min-width:0}
.hub47-command-current h1{font-size:24px}
/* live graph */
.hub-edge-rule{fill:none;stroke-width:2.5;stroke-linecap:round;cursor:pointer}
.hub-edge-rule.ok{stroke:var(--ok)}.hub-edge-rule.warn{stroke:#c27c0e;stroke-dasharray:7 5}.hub-edge-rule.bad{stroke:var(--bad)}.hub-edge-rule.idle{stroke:#9aa8ad;stroke-dasharray:2 6}
.hub-edge-event.pulse,.hub-edge-rule.pulse{animation:hubPulse 1s ease-out 3}
@keyframes hubPulse{0%{stroke-width:7;stroke-opacity:.35}100%{stroke-width:2;stroke-opacity:1}}
#hubConnectionMap .hub-node-time{font-size:13px;fill:var(--brand);font-weight:600}
.hub-legend-rule::before{content:"";display:inline-block;width:18px;height:0;border-top:2.5px solid var(--ok);border-radius:2px;vertical-align:middle;margin-right:6px}
.hub-dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:6px;vertical-align:middle}
.hub-dot.ok{background:var(--ok)}.hub-dot.warn{background:#c27c0e}.hub-dot.bad{background:var(--bad)}
.hub21-flow-badge.ok{background:var(--ok-tint);color:var(--ok)}.hub21-flow-badge.warn{background:var(--warn-tint);color:var(--warn)}.hub21-flow-badge.bad{background:var(--bad-tint);color:var(--bad)}.hub21-flow-badge.idle{color:var(--muted)}
/* 팀·권한 */
.hub-team{display:flex;flex-direction:column;gap:16px}
#inviteDisclosure:not([hidden])+.hub-team-note{display:none}
.hub28-share{display:flex;flex-direction:column;gap:12px;padding-top:18px;border-top:1px solid var(--line-2)}
.hub46-assets>summary{font-size:15px;min-height:46px}
.hub21-flow-row{display:grid;grid-template-columns:150px minmax(0,1fr) auto;gap:12px;align-items:center;padding:12px 0;border-bottom:1px solid var(--line-2)}
.hub21-flow-source{display:flex;align-items:center;gap:8px;min-width:0}
.hub21-flow-source img{width:26px;height:26px;border-radius:6px;flex:none}
.hub21-flow-description{display:flex;flex-direction:column;gap:2px;min-width:0}
.hub21-flow-description strong{font-size:15px}
.hub21-flow-description p{font-size:14px;color:var(--ink-2)}
.hub37-crossflow{grid-template-columns:minmax(0,1fr) auto}
.hub46-stage{display:flex;flex-direction:column;gap:2px;min-width:0}
#hubDataFlows>.hub21-flow-row{display:grid}
#hubDataFlows>.hub21-flow-row>.hub21-flow-badge{justify-self:end}

/* ---- Panels ---- */
.hub-panel{display:flex;flex-direction:column;gap:20px;min-width:0}
.hub-panel-heading{display:flex;align-items:center;justify-content:space-between;gap:16px}
.section-head,.hub35-dashboard-head,.hub30-native-head,.hub31-native-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px 16px;flex-wrap:wrap}
.section-head p,.hub35-dashboard-head p,.hub30-native-head p,.hub31-native-head p{margin-top:2px;color:var(--muted);font-size:14px;max-width:70ch}
.hub20-block,.hub35-dashboard,.hub37-delivery,.org-management,.hub26-team-admin,.hub35-rules-content,.hub21-dataflow,.hub47-command,.hub35-product-panel{background:var(--paper);border:1px solid var(--line);border-radius:var(--r-panel);padding:20px 22px;min-width:0}
.hub20-block{display:flex;flex-direction:column;gap:14px}

/* ---- 오늘: the count ledger (one strip, four cells) ---- */
.hub-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));background:var(--paper);border:1px solid var(--line);border-radius:var(--r-panel);overflow:hidden}
.hub-kpis>button{min-height:0;height:auto;display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;gap:6px;padding:18px 22px 16px;border:0;border-left:1px solid var(--line);border-radius:0;background:transparent;text-align:left;white-space:normal}
.hub-kpis>button:first-child{border-left:0}
.hub-kpis>button:hover{background:#f7fafa}
.hub-kpis strong{font-size:34px;line-height:1;font-weight:750;color:var(--ink);font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.hub-kpis span{font-size:15px;font-weight:600;color:var(--ink-2)}
.hub-kpis>button:focus-visible{outline-offset:-3px}

.hub20-overview-cols{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:20px;align-items:start}
.hub-inline-form{display:grid;grid-template-columns:minmax(120px,170px) minmax(0,1fr) auto;gap:10px;align-items:end;margin:0}
.hub-inline-form label{margin:0;display:flex;flex-direction:column;gap:6px}
.hub-inline-form label.hub-grow{min-width:0}
.hub-then{grid-column:1/-1;color:var(--muted);font-size:14px}
.hub20-alert-header{align-items:center}
.hub20-alert-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.hub20-alert-actions select{width:auto;min-width:120px;min-height:34px;font-size:15px}
#connectionNote:empty{display:none}

/* Row lists */
.notifications,.connectors,.hub-task-list,.hub-rule-list,.ssoServices,#hub26TeamList,#hub28ShareList,#organizationMembers,#pendingInvites,#hubTodayTasks,#hub37WorkflowStatus,#hubDataFlows{display:flex;flex-direction:column;border-top:1px solid var(--line-2);min-width:0}
.notifications:empty,.connectors:empty,.hub-task-list:empty,.hub-rule-list:empty,#pendingInvites:empty,#hub28ShareList:empty,#hub26TeamList:empty{display:none}
.notification,.connector,.hub-task,.hub20-preview-task,.ssoService,.invite-row,.hub37-job,#organizationMembers>*,#hub26TeamList>*,#hub28ShareList>*,#hubDataFlows>*{display:flex;align-items:center;gap:12px;padding:12px 2px;border-bottom:1px solid var(--line-2);min-height:56px;flex-wrap:wrap}
.notifications>:last-child,.connectors>:last-child,.hub-task-list>:last-child,.hub-rule-list>:last-child,.ssoServices>:last-child,#hubTodayTasks>:last-child{border-bottom:0}
.notif-text,.connector-info,.hub20-preview-info,.hub-task-info,.ssoInfo{flex:1;min-width:min(100%,220px);display:flex;flex-direction:column;gap:2px}
.notif-text b,.hub20-preview-info b,.hub-task-info b,.connector-info b,.ssoInfo strong{font-size:15px;font-weight:650;color:var(--ink)}
.notif-text p,.hub20-preview-info small,.hub-task-info small,.connector-info small,.ssoInfo small{font-size:14px;color:var(--muted)}
.notification.unread{position:relative;padding-left:16px}
.notification.unread::before{content:"";position:absolute;left:2px;top:22px;width:7px;height:7px;border-radius:50%;background:var(--brand)}
.notification a{font-size:14px;font-weight:600}
.notification button,.hub-task button,.hub20-preview-task button,.connector button,.ssoService button,.hub37-job button{min-height:32px;font-size:14px}
#hubTodayTasks>.move{align-self:flex-start;margin-top:8px}
.hub37-job{min-height:44px}
.hub37-job>span{flex:1;min-width:200px;color:var(--ink);font-weight:600;font-size:15px}
.hub37-job>small{font-size:14px}
.connector select{width:auto;flex:0 1 280px;min-width:180px}
.connector code{font-size:13px;word-break:break-all;background:var(--canvas);padding:4px 6px;border-radius:4px}

/* Disclosure */
details{border:1px solid var(--line);border-radius:var(--r-panel);background:var(--paper)}
details>summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:10px;min-height:52px;padding:0 20px;font-size:16px;font-weight:700;color:var(--ink)}
details>summary::-webkit-details-marker{display:none}
details>summary::after{content:"";margin-left:auto;width:8px;height:8px;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);transform:rotate(45deg) translate(-2px,-2px);flex:none}
details[open]>summary::after{transform:rotate(-135deg) translate(-2px,-2px)}
details[open]>summary{border-bottom:1px solid var(--line-2)}
details>:not(summary){margin:16px 20px}
details>section{margin:0;border:0;border-radius:0 0 var(--r-panel) var(--r-panel)}
.hub20-block details,.hub35-dashboard details,.org-management details,.hub-all-tasks{border-radius:var(--r)}
.hub20-block details>summary,.hub35-dashboard details>summary,.org-management details>summary{min-height:44px;font-size:15px;padding:0 14px}
.hub-all-tasks .hub-task-list{border-top:0}

/* Widgets (제품 요약) */
.hub35-dashboard{display:flex;flex-direction:column;gap:14px}
.hub35-dashboard-tools,.hub47-buttons,.hub20-editor-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.widgets{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr));gap:14px}
.hub35-widget{background:var(--paper);border:1px solid var(--line);border-radius:var(--r-panel);display:flex;flex-direction:column;min-height:180px;min-width:0;overflow:hidden}
.hub35-widget.hub35-wide{grid-column:span 2}
.hub35-widget-bar{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--line-2)}
.hub35-widget-bar img,.widget-logo{width:30px;height:30px;border-radius:8px;flex:none}
.hub35-widget-titles{display:flex;flex-direction:column;gap:1px;min-width:0}
.hub35-widget-titles h3{font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hub35-widget-titles small,.hub35-widget-titles p{font-size:13px;color:var(--muted)}
.hub35-drag{order:3;margin-left:auto;min-height:30px;width:30px;padding:0;border:0;background:transparent;color:var(--muted);cursor:grab}
.hub35-widget-body{flex:1;padding:12px 16px;font-size:15px;min-width:0;color:var(--ink-2)}
.hub35-widget-body ul,.hub35-records{list-style:none;margin:0;padding:0}
.hub35-widget-body li{display:flex;justify-content:space-between;gap:12px;padding:8px 0;border-bottom:1px solid var(--line-2)}
.hub35-widget-body li:last-child{border-bottom:0}
.hub35-widget-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px 8px 6px 12px;border-top:1px solid var(--line-2)}
.hub35-widget-foot button:not(.hub35-resize){border-color:transparent;background:transparent;color:var(--brand);min-height:32px;padding:0 8px}
.hub35-widget-foot button:not(.hub35-resize):hover{background:var(--brand-tint)}
.hub35-resize{min-height:30px;width:30px;padding:0;border:0;background:transparent;color:var(--muted);cursor:nwse-resize}
.hub35-dragging{opacity:.45}
.hub35-drop-target{outline:2px dashed var(--brand);outline-offset:4px}
.hub35-resizing{outline:2px solid var(--brand)}
.hub20-widget-row{display:grid;grid-template-columns:minmax(140px,1fr) minmax(150px,220px) auto;gap:12px;align-items:center;padding:10px 0;border-bottom:1px solid var(--line-2)}
.hub20-widget-row>label{display:flex;align-items:center;gap:8px;margin:0;font-size:15px}
.hub20-size-label{color:var(--muted);font-size:14px;margin:0}
.hub20-size-label select{margin-top:4px}
.hub20-order{display:flex;gap:4px}
.hub20-editor-actions{justify-content:space-between;padding-top:4px}

/* ---- 제품 기록 ---- */
.hub47-command{display:flex;align-items:center;justify-content:space-between;gap:12px 20px;flex-wrap:wrap}
.hub47-command-current{display:flex;flex-direction:column;gap:2px;min-width:0}
.hub47-command-current h2{font-size:20px}
#hub47ActiveStatus{font-size:14px;font-weight:600;color:var(--muted)}
.hub47-actionbar{display:flex;flex-direction:column;align-items:stretch;gap:10px}
.hub47-product-quick{display:none}
.hub47-search{flex:1;display:flex;align-items:center;gap:12px;min-width:0}
.hub47-search input{max-width:520px}
.hub47-diagnostic{border-radius:var(--r);font-size:14px;color:var(--ink-2)}
.hub47-diagnostic>summary{min-height:40px;font-size:14px;font-weight:600;color:var(--muted);padding:0 14px}
.hub-diag-body{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
#hub47ActiveStatus{display:inline-flex;align-items:center;gap:6px;align-self:flex-start;margin-top:4px;padding:3px 10px;border-radius:999px;background:var(--canvas);color:var(--ink-2)}
#hub47ActiveStatus::before{content:"";width:8px;height:8px;border-radius:50%;background:#b8c4c8}
#hub47ActiveStatus[data-state="linked"]{background:var(--ok-tint);color:var(--ok)}#hub47ActiveStatus[data-state="linked"]::before{background:var(--ok)}
#hub47ActiveStatus[data-state="connect"]{background:var(--warn-tint);color:var(--warn)}#hub47ActiveStatus[data-state="connect"]::before{background:#d58a12}
#hub47ActiveStatus[data-state="forbidden"]{background:var(--bad-tint);color:var(--bad)}#hub47ActiveStatus[data-state="forbidden"]::before{background:var(--bad)}
.hub30-native-work{display:block}
.hub35-product-panel{display:flex;flex-direction:column;gap:12px}
.hub35-security-bar{color:var(--muted);font-size:13px}
.hub46-source-controls{display:flex;gap:8px;flex-wrap:wrap}
.hub47-load-more{margin-top:12px}

/* Record lists and tables */
.hub30-lead-table,.hub31-records,.hub29-record-list{min-width:0;overflow:auto}
.hub30-lead-row,.hub31-record-row,.hub36-item,.hub29-record{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:12px 2px;border-bottom:1px solid var(--line-2)}
.hub30-lead-name,.hub31-record-info,.hub36-identity{flex:1;min-width:min(100%,220px);display:flex;flex-direction:column;gap:2px}
.hub30-lead-name b,.hub31-record-info b,.hub36-identity b,.hub30-lead-name strong,.hub31-record-info strong,.hub36-identity strong{font-size:15px;font-weight:650;color:var(--ink)}
.hub30-lead-name small,.hub31-record-info small,.hub36-identity small{font-size:14px}
.hub30-stage-select,.hub31-status{width:auto!important;min-width:140px}
.hub30-lead-row button,.hub31-record-row button,.hub36-item button{min-height:34px;font-size:14px}
.hub34-followup,.hub34-contact,.hub34-note{display:flex;flex-wrap:wrap;gap:8px;align-items:center;width:100%}
.hub34-followup input,.hub34-contact input,.hub34-note input,.hub34-note textarea{flex:1;min-width:160px}
table{width:100%;border-collapse:collapse;font-size:15px;background:var(--paper)}
thead th{position:sticky;top:0;background:#f7fafa;color:var(--ink);font-weight:650;text-align:left;font-size:14px;padding:10px 12px;border-bottom:1px solid var(--line);white-space:nowrap}
td{padding:10px 12px;border-bottom:1px solid var(--line-2);vertical-align:middle}
tbody tr:hover{background:#f7fafa}
td button,td select{min-height:32px;font-size:14px}
td select{width:auto}
.hub36-drawer{margin-top:8px}
.hub36-form{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:12px;align-items:end}
.hub36-field label{margin:0 0 6px}
.hub36-help,.hub36-message,.hub36-summary{color:var(--muted);font-size:14px}
.hub36-warning{padding:10px 14px;border-radius:var(--r);background:var(--warn-tint);color:var(--warn);font-size:14px;font-weight:600}
.hub36-list{display:flex;flex-direction:column}
.hub31-native-head .hint,.hub30-native-head p{font-size:14px}

/* ---- 연결·자동화 ---- */
.hub20-service-directory{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,380px),1fr));gap:0 32px;border-top:1px solid var(--line-2)}
.hub20-service{display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-areas:"head head" "state action";gap:6px 12px;align-items:center;padding:14px 2px;border-bottom:1px solid var(--line-2)}
.hub20-service-head{grid-area:head;display:flex;align-items:center;gap:12px;min-width:0}
.hub20-service-head img{width:34px;height:34px;border-radius:8px}
.hub20-service-head strong{font-size:15px;font-weight:700}
.hub20-service-head p{font-size:14px;color:var(--muted)}
.hub20-connection-state{grid-area:state;display:inline-flex;align-items:center;gap:6px;font-weight:600;font-size:13px;padding:3px 8px;border-radius:999px;background:var(--canvas);color:var(--ink-2);justify-self:start}
.hub20-connection-state::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor}
.hub20-connection-state.linked{background:var(--ok-tint);color:var(--ok)}
.hub20-connection-state.connect{background:var(--warn-tint);color:var(--warn)}
.hub20-connection-state.forbidden{background:var(--bad-tint);color:var(--bad)}
.hub20-service-actions{grid-area:action;justify-self:end}
.hub20-service-actions button{min-height:34px;font-size:14px}
.hub20-primary-action{background:var(--paper)}
.hub35-rules-workspace>summary{font-size:18px;min-height:60px}
.hub35-rules-content{display:flex;flex-direction:column;gap:14px;border:0;padding:18px 22px 22px}
.hub35-rules-content .hub-inline-form{grid-template-columns:repeat(auto-fit,minmax(min(100%,250px),1fr))}
.hub35-rules-content .hub-inline-form>button{justify-self:start}
.hub37-delivery{padding:0;border:0;display:flex;flex-direction:column;gap:8px}
.hub37-delivery h3{margin-top:6px}
.hub-rule-list>*{display:flex;align-items:center;gap:12px;padding:12px 2px;border-bottom:1px solid var(--line-2);flex-wrap:wrap}
.hub-map-disclosure>summary{font-size:16px}
.hub47-map-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.hub47-map-heading p{color:var(--muted);font-size:14px}
.hub-map-wrap,.hub46-process{overflow:auto;border:1px solid var(--line-2);border-radius:var(--r);background:var(--paper);padding:14px}
.hub-map-legend{display:flex;gap:16px;flex-wrap:wrap;color:var(--muted);font-size:14px;margin-bottom:8px}
.hub-legend-sso::before,.hub-legend-events::before{content:"";display:inline-block;width:18px;height:0;border-top:2px solid var(--brand);vertical-align:middle;margin-right:6px}
.hub-legend-events::before{border-top-style:dashed;border-top-color:var(--muted)}
#hubConnectionMap{width:100%;height:auto;max-height:520px;font-family:var(--font)}
#hubConnectionMap .hub-node circle{fill:var(--paper);stroke:var(--line);stroke-width:2}
#hubConnectionMap .hub-node.connected circle{fill:var(--ok-tint);stroke:var(--ok)}
#hubConnectionMap .hub-center circle{fill:var(--brand);stroke:var(--brand)}
#hubConnectionMap .hub-node-title{fill:var(--ink);font-size:16px;font-weight:700}
#hubConnectionMap .hub-node-sub{fill:var(--muted);font-size:14px}
#hubConnectionMap .hub-center text{fill:#fff}
#hubConnectionMap .hub-center .hub-node-sub{fill:#cfe3e7}
.hub-edge-login{stroke:var(--brand);stroke-width:2;stroke-linecap:round}
.hub-edge-event{stroke:var(--muted);stroke-width:2;stroke-dasharray:4 4;stroke-linecap:round}
.hub21-dataflow{border:0;padding:0;display:flex;flex-direction:column;gap:10px}
.hub46-process-row{display:grid;grid-template-columns:minmax(0,1fr) 24px minmax(0,1fr) 24px minmax(0,1fr);gap:10px;align-items:center;padding:10px 0;border-bottom:1px solid var(--line-2)}
.hub21-flow-badge{font-size:13px;font-weight:600;padding:2px 8px;border-radius:999px;background:var(--canvas);justify-self:start}
.hub21-empty-flow,.hub21-flow-policy,.hub21-flow-description{color:var(--muted);font-size:14px}
.hub46-process-wrap,.hub46-assets{display:flex;flex-direction:column;gap:8px;padding-top:14px;border-top:1px solid var(--line-2)}
.hub47-asset-toolbar{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.hub47-asset-toolbar input{flex:1;min-width:200px;width:auto}
.hub47-asset-inspector{padding:14px;border-radius:var(--r);background:var(--canvas)}
.hub47-site-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 2px;border-bottom:1px solid var(--line-2)}
.hub47-coverage-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px}
.hub22-planned{display:flex;flex-direction:column;gap:4px;padding-top:14px;border-top:1px solid var(--line-2)}
.hub22-plan-head,.hub22-plan-row{display:grid;grid-template-columns:120px minmax(0,1fr) 120px 90px;gap:12px;align-items:center;padding:8px 0;font-size:14px}
.hub22-plan-head{color:var(--muted);font-weight:600;border-bottom:1px solid var(--line-2)}
.hub22-plan-row{border-bottom:1px solid var(--line-2)}
.hub22-plan-row em{font-style:normal;font-weight:600;color:var(--warn)}

/* ---- 조직 ---- */
.org-management{border:0;display:flex;flex-direction:column;gap:12px;padding:20px 22px}
.org-management>h2:not(:first-child){margin-top:12px;padding-top:18px;border-top:1px solid var(--line-2)}
.org-management-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,340px),1fr));gap:24px}
.management-form h3{margin-bottom:4px}
.management-form label:first-of-type{margin-top:8px}
.management-form button{margin-top:12px}
.invite-form{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 10px;align-items:end;max-width:640px}
.invite-form label{grid-column:1/-1;margin:0}
.invite-form button{margin:0}
.secret-result{padding:14px;border-radius:var(--r);background:var(--canvas);font-size:14px;word-break:break-all}
.hub26-team-admin{border:0;padding:18px 0 0;border-top:1px solid var(--line-2);border-radius:0;display:flex;flex-direction:column;gap:12px}
.hub26-policy{display:flex;gap:10px;align-items:end;flex-wrap:wrap}
.hub26-policy label{margin:0;width:100%}
.hub26-policy select{width:auto;min-width:220px}
.hub26-create{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:12px;align-items:end}
.hub26-create label{margin:0}
.hub26-create>button{justify-self:start}
.hub26-service{display:inline-flex;align-items:center;gap:8px;margin:6px 20px 0 0;font-weight:500}
fieldset label{display:inline-flex;align-items:center;gap:8px;margin:6px 20px 0 0;font-weight:500}
.hub26-team-head{display:flex;justify-content:space-between;gap:8px;align-items:center;width:100%}
.hub28-share-form{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:12px;align-items:start}
.hub28-share-form label{margin:0}
.hub29-record-picker{grid-column:1/-1;display:flex;flex-direction:column;gap:8px;padding:14px;border-radius:var(--r);background:var(--canvas)}
.hub28-share-form>button{justify-self:start}

/* ---- Quick switch dialog ---- */
.hub49-switch-dialog{width:min(560px,calc(100% - 32px));padding:0;border:1px solid var(--line);border-radius:var(--r-panel);background:var(--paper);color:var(--ink);box-shadow:0 20px 50px rgba(20,35,42,.18)}
.hub49-switch-dialog::backdrop{background:rgba(20,35,42,.35)}
.hub49-switch-head{display:flex;gap:8px;padding:12px;border-bottom:1px solid var(--line-2)}
.hub49-switch-items{display:flex;flex-direction:column;padding:6px;max-height:60vh;overflow:auto}
.hub49-switch-choice{justify-content:space-between;border:0;min-height:48px;background:transparent}
.hub49-switch-choice small{font-weight:400}
.hub49-switch-choice:hover,.hub49-switch-choice:focus-visible{background:var(--brand-tint)}

/* ---- Right-click / Shift+F10 menu (b43-ux.js) ---- */
.sb43-menu{position:fixed;z-index:60;min-width:200px;max-height:calc(100dvh - 16px);overflow:auto;max-width:calc(100vw - 16px);padding:4px;background:var(--paper);border:1px solid var(--line);border-radius:var(--r);box-shadow:0 12px 30px rgba(20,35,42,.16)}
.sb43-menu-heading{padding:8px 12px;color:var(--muted);font-size:13px;font-weight:600}
.sb43-menu-item{width:100%;justify-content:flex-start;border:0;min-height:36px;background:transparent;font-weight:500}
.sb43-menu-item:hover,.sb43-menu-item:focus-visible{background:var(--brand-tint)}
.sb43-target{outline:2px solid var(--brand);outline-offset:2px}

/* Status words (text + colour) */
[data-status="error"],[data-state="error"],.is-error{color:var(--bad);background:var(--bad-tint);border-radius:999px;padding:2px 8px;font-weight:600}
[data-status="ok"],[data-state="ok"],.is-ok{color:var(--ok);background:var(--ok-tint);border-radius:999px;padding:2px 8px;font-weight:600}

/* ---- Footer ---- */
footer{display:flex;justify-content:space-between;gap:12px 20px;flex-wrap:wrap;padding:20px var(--gutter);border-top:1px solid var(--line);background:var(--paper);color:var(--muted);font-size:14px}
footer nav{display:flex;gap:20px}
footer a{color:inherit;text-decoration:none}
footer a:hover{color:var(--ink)}

/* ---- Wide screens: keep reading measure, use width for side-by-side ---- */
@media (min-width:1800px){
  :root{--max:1600px}
}
/* ---- Tablet ---- */
@media (max-width:1100px){
  :root{--gutter:24px}
  .hub20-overview-cols{grid-template-columns:1fr}
  .hub35-widget.hub35-wide{grid-column:auto}
  :root{--dock:88px}
  .hub-dock{padding:10px 6px}
  .hub-dock [role=tab]{grid-template-columns:1fr;grid-template-rows:auto auto;justify-items:center;text-align:center;min-height:58px;padding:6px 2px;font-size:13px;letter-spacing:-.02em;row-gap:3px}
  .hub-dock [role=tab]>svg,.hub35-product-tabs [role=tab]::before{grid-row:1;grid-column:1}
  .hub-dock [role=tab]>span,.hub-dock .hub-tabs [role=tab]>span{grid-column:1;grid-row:2;max-width:100%}
  .hub-dock [role=tab]>small,.dock-label,.hub49-switch-trigger{display:none}
  .dock-badge{position:absolute;top:2px;right:4px;grid-column:auto;grid-row:auto;min-width:18px;line-height:17px;font-size:13px;padding:0 4px}
  .hub35-product-tabs [role=tab][data-state]::after{left:calc(50% + 6px);top:24px}
  .hub-dock #hub35-tab-map{margin-top:8px}
}
/* ---- Phone ---- */
@media (max-width:760px){
  :root{--gutter:16px}
  .tag,.top-actions #accountEmail{display:none}
  .auth-wrap{grid-template-columns:1fr;gap:28px;padding:28px 0;width:calc(100% - 32px)}
  .auth-copy h1{font-size:25px}
  .auth-copy p{font-size:15px}
  .auth-box{padding:22px}
  #workspacePanel{grid-template-columns:1fr;padding-bottom:64px}
  #workspacePanel:not([hidden]){background:none}
  .hub-dock .hub-tabs [role=tab]>span{grid-row:2}
  .hub-dock{position:fixed;z-index:44;left:0;right:0;bottom:0;top:auto;height:auto;flex-direction:row;overflow-x:auto;overflow-y:hidden;padding:4px 6px calc(4px + env(safe-area-inset-bottom));border-right:0;border-top:1px solid var(--line);gap:0}
  .hub-dock .hub35-product-tabs{flex-direction:row;gap:0}
  .hub-dock [role=tab]{flex:none;width:68px;min-height:54px}
  .hub-dock #hub35-tab-map{margin-top:0;border-top:0;order:2}
  .hub-dock #hub35-tab-issues{order:3}
  .hub-dock #hub35-tab-report{order:4}
  .hub-dock #hub35-tab-settings{order:5}
  .hub-dock .hub35-product-tabs{order:6}
  .ws-bar{flex-wrap:wrap;padding:8px 16px}
  .org-select{flex:1 1 100%}
  .org-select select{flex:1;max-width:none;min-width:0}
  .ws-bar-actions{flex:1 1 100%}
  .bar-btn{flex:1}
  .hub-drawer{top:var(--top);bottom:0;width:100vw;box-shadow:none}
  .hub-embed iframe{height:calc(100vh - var(--top) - 260px);min-height:420px}
  .hub21-stage{padding:18px var(--gutter) 48px}
  h1{font-size:22px}
  .hub-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}
  .hub-kpis>button{padding:14px 16px}
  .hub-kpis>button:nth-child(3){border-left:0}
  .hub-kpis>button:nth-child(n+3){border-top:1px solid var(--line)}
  .hub-kpis strong{font-size:28px}
  .hub-kpis span{font-size:14px}
  .hub20-block,.hub35-dashboard,.hub47-command,.hub35-product-panel,.org-management,.hub35-rules-content{padding:16px}
  .hub-inline-form{grid-template-columns:1fr}
  .hub-inline-form>button{justify-self:stretch}
  .hub47-command{flex-direction:column;align-items:stretch}
  .hub47-buttons{display:grid;grid-template-columns:1fr 1fr}
  .hub47-buttons .hub47-primary{grid-column:1/-1;grid-row:1}
  .hub21-flow-row,.hub46-process-row{grid-template-columns:1fr}
  .hub22-plan-head{display:none}
  .hub22-plan-row{grid-template-columns:1fr 1fr}
  .hub47-coverage-layout{grid-template-columns:1fr}
  .invite-form{grid-template-columns:1fr}
  details>summary{padding:0 16px}
  details>:not(summary){margin:14px 16px}
  details>section{margin:0}
  footer{padding:20px 16px}
}

/* B75 문제 / 리포트 / connection kinds */
.hub-dock .hub-tabs .dock-badge{background:var(--bad)}
.hub-issues{display:flex;flex-direction:column;background:var(--paper);border:1px solid var(--line);border-radius:var(--r-panel);overflow:hidden}
.hub-issue{display:grid;grid-template-columns:64px minmax(0,1fr) auto;gap:14px;align-items:center;padding:14px 18px;border-bottom:1px solid var(--line-2)}
.hub-issue:last-child{border-bottom:0}
.hub-issue-level{justify-self:start;font-size:13px;font-weight:700;padding:3px 9px;border-radius:999px;background:var(--canvas);color:var(--ink-2)}
.hub-issue.error .hub-issue-level{background:var(--bad-tint);color:var(--bad)}
.hub-issue.warn .hub-issue-level{background:var(--warn-tint);color:var(--warn)}
.hub-issue-body{display:flex;flex-direction:column;gap:3px;min-width:0}
.hub-issue-body b{font-size:15px;color:var(--ink)}
.hub-issue-body p{font-size:14px;color:var(--ink-2)}
.hub-issue-body small{font-size:13px;overflow-wrap:anywhere}
.hub-issue-clear{padding:22px;border:1px solid var(--line);border-radius:var(--r-panel);background:var(--ok-tint);color:var(--ok);font-weight:650}
.hub-report-kpis{grid-template-columns:repeat(6,minmax(0,1fr))}
.hub-report-kpis>div{display:flex;flex-direction:column;gap:6px;padding:16px 20px;border-left:1px solid var(--line)}
.hub-report-kpis>div:first-child{border-left:0}
.hub-report-scroll{overflow-x:auto}
.hub-report-table td img{width:22px;height:22px;border-radius:5px;vertical-align:middle;margin-right:8px}
.hub-report-table td,.hub-report-table th{white-space:nowrap}
.hub-report-days{display:flex;align-items:flex-end;gap:6px;height:180px;padding-top:10px}
.hub-report-day{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:6px;height:100%;min-width:0}
.hub-report-day span{width:100%;max-width:34px;min-height:2px;border-radius:4px 4px 0 0;background:var(--brand)}
.hub-report-day small{font-size:13px;white-space:nowrap;min-height:1.4em}
.hub20-connection-state.kind-data{background:var(--ok-tint);color:var(--ok)}
.hub20-connection-state.kind-signin{background:var(--brand-tint);color:var(--brand)}
@media (max-width:1100px){.hub-report-kpis{grid-template-columns:repeat(3,minmax(0,1fr))}.hub-report-kpis>div:nth-child(4){border-left:0}.hub-report-kpis>div:nth-child(n+4){border-top:1px solid var(--line)}}
@media (max-width:760px){.hub-issue{grid-template-columns:minmax(0,1fr) auto}.hub-issue-level{grid-column:1/-1}.hub-report-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.hub-report-kpis>div:nth-child(odd){border-left:0}.hub-report-kpis>div:nth-child(n+3){border-top:1px solid var(--line)}.hub-report-day small{font-size:13px}}

/* directive A-8: form fields at least 16px (prevents iOS zoom) */
input:not([type=checkbox]):not([type=radio]),select,textarea{font-size:16px}

/* frame progress: thin bar until the product page arrives (the product's own loader takes over after that) */
.hub-embed{position:relative}
.hub-embed.is-loading::before{content:"";position:absolute;left:0;right:0;top:0;height:3px;border-radius:3px;background:linear-gradient(90deg,transparent,var(--brand),transparent);background-size:40% 100%;background-repeat:no-repeat;animation:hubFrameLoad 1.1s linear infinite;z-index:1}
@keyframes hubFrameLoad{from{background-position:-40% 0}to{background-position:140% 0}}
@media (prefers-reduced-motion:reduce){.hub-embed.is-loading::before{animation:none;background:var(--brand);opacity:.5}}
/* ---- QA 2026-10-18 ---- */
.top-actions .top-link{color:var(--ink);font-weight:600;padding:6px 10px;border-radius:8px;text-decoration:none}
.top-actions .top-link:hover{background:var(--line-2)}
.hub20-size-label{display:flex;align-items:center;gap:8px;white-space:nowrap}
.hub20-size-label select{margin-top:0;flex:1;min-width:0}
.hub-org-row{padding:10px 0;border-bottom:1px solid var(--line-2)}
.hub-org-head{display:flex;align-items:center;gap:8px;min-width:0}
.hub-org-head b{overflow-wrap:anywhere}
.hub-org-role{font-size:13px;color:var(--muted);white-space:nowrap}
.hub-org-edit{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
.hub-org-edit input{flex:1 1 180px;min-width:0}
.management-form .hub-org-edit button{margin-top:0}
.hub-org-edit .danger{color:#b42318;border-color:#f1c4bf}
@media (max-width:1100px){:root{--dock:100px}}
@media (max-width:760px){.hub-dock [role=tab]{width:86px}}
@media (max-width:560px){.hub20-widget-row{grid-template-columns:minmax(0,1fr) auto}.hub20-widget-row .hub20-size-label{grid-column:1/-1;grid-row:2}}
@media (min-width:2200px){:root{--max:2100px}}

/* ---- Product screen (embedded frame), 2026-10-18 renewal ----
   Frame width contract for product owners (see notes: hub-frame-width-contract.md):
   - desktop (viewport > 1100px): Hub menu folds to a 100px rail → frame = viewport − 126px (1440 → 1314, 1920 → 1794, 2560 → 2434)
   - menu pinned open: frame = viewport − 258px (1440 → 1182)
   - 넓게 보기 (focus): frame = viewport − 2px (1440 → 1438), height = viewport − 50px
   - tablet 761–1100px: frame = viewport − 126px; phone ≤ 760px: frame = viewport − 16px
   The frame never changes width when the alert/task drawer opens (the drawer overlays it). */
body.hub-screen .hub21-stage{padding:8px 12px 12px}
body.hub-screen .hub47-command{min-height:48px;padding:5px 8px 5px 14px;gap:8px 14px;flex-wrap:nowrap}
body.hub-screen .hub47-command-current{flex-direction:row;align-items:center;gap:10px;min-width:0}
body.hub-screen .hub47-command-current h1{font-size:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
body.hub-screen #hub47ActiveStatus{white-space:nowrap}
body.hub-screen .hub47-buttons{display:flex;gap:6px;flex-wrap:nowrap}
body.hub-screen .hub47-buttons button,body.hub-screen .hub-mode button{min-height:34px;padding:0 12px;font-size:14px}
body.hub-screen .hub-embed iframe{border-radius:var(--r)}
#hubDockToggle[aria-pressed="true"],#hubFocusBtn[aria-pressed="true"]{background:var(--brand-tint);border-color:#b9d3d8;color:var(--brand)}
@media (min-width:761px){
  /* full-height frame: the page itself does not scroll while a product screen is open */
  body.hub-screen .ws-main{height:calc(100vh - var(--top));overflow:hidden}
  /* the page does not scroll here; a sticky bar inside an overflow:hidden column would be offset by --top and cover the toolbar */
  body.hub-screen .ws-bar{position:relative;top:auto}
  body.hub-screen .hub21-stage{flex:1;min-height:0;display:flex;flex-direction:column;width:100%;max-width:none}
  body.hub-screen #hub-pane-workbench:not([hidden]){flex:1;min-height:0;display:flex;flex-direction:column;gap:8px}
  body.hub-screen .hub-embed:not([hidden]){flex:1;min-height:0}
  body.hub-screen .hub-embed iframe{flex:1;height:auto;min-height:0}
}
/* desktop: the Hub menu folds to the same 100px rail as on tablets while a product screen is open */
@media (min-width:1101px){
  body.hub-screen:not(.hub-dock-open){--dock:100px}
  body.hub-screen:not(.hub-dock-open) .hub-dock{padding:10px 6px}
  body.hub-screen:not(.hub-dock-open) .hub-dock [role=tab]{grid-template-columns:1fr;grid-template-rows:auto auto;justify-items:center;text-align:center;min-height:58px;padding:6px 2px;font-size:13px;letter-spacing:-.02em;row-gap:3px}
  body.hub-screen:not(.hub-dock-open) .hub-dock [role=tab]>svg,body.hub-screen:not(.hub-dock-open) .hub35-product-tabs [role=tab]::before{grid-row:1;grid-column:1}
  body.hub-screen:not(.hub-dock-open) .hub-dock [role=tab]>span,body.hub-screen:not(.hub-dock-open) .hub-dock .hub-tabs [role=tab]>span{grid-column:1;grid-row:2;max-width:100%}
  body.hub-screen:not(.hub-dock-open) .hub-dock [role=tab]>small,body.hub-screen:not(.hub-dock-open) .dock-label,body.hub-screen:not(.hub-dock-open) .hub49-switch-trigger{display:none}
  body.hub-screen:not(.hub-dock-open) .dock-badge{position:absolute;top:2px;right:4px;grid-column:auto;grid-row:auto;min-width:18px;line-height:17px;font-size:13px;padding:0 4px}
  body.hub-screen:not(.hub-dock-open) .hub35-product-tabs [role=tab][data-state]::after{left:calc(50% + 6px);top:24px}
}
@media (max-width:1100px){#hubDockToggle{display:none!important}}
/* 넓게 보기: only the slim product toolbar and the frame remain */
body.hub-focus .site-top,body.hub-focus .hub-dock,body.hub-focus .ws-bar{display:none!important}
body.hub-focus{--top:0px}
body.hub-focus #workspacePanel{grid-template-columns:minmax(0,1fr);background:var(--canvas)!important;padding-bottom:0}
body.hub-focus .ws-main{height:100vh}
body.hub-focus .hub21-stage{padding:4px 0 0}
body.hub-focus .hub47-command{border-radius:0;border-left:0;border-right:0;border-top:0}
body.hub-focus .hub-embed iframe{border-radius:0;border-left:0;border-right:0;border-bottom:0}
body.hub-focus .hub-drawer{top:0}
@media (max-width:760px){
  body.hub-screen .hub21-stage{padding:8px 8px 12px}
  body.hub-screen .hub47-command{flex-wrap:wrap}
  body.hub-screen .hub47-buttons{display:grid;grid-template-columns:1fr 1fr;width:100%}
  body.hub-screen .hub-embed iframe{height:calc(100vh - var(--top) - 230px);min-height:460px}
  body.hub-focus .ws-main{height:auto}
  body.hub-focus .hub-embed iframe{height:calc(100vh - 110px)}
}
/* blocks the scripts create that had no rules (sweep 2026-10-18) */
.hub26-team{display:flex;flex-direction:column;gap:12px;padding:16px 18px;border:1px solid var(--line);border-radius:var(--r-panel);background:var(--paper)}
.hub26-team-head strong{font-size:16px;color:var(--ink)}
.hub26-team-head>span{color:var(--muted);font-size:14px}
.hub26-team-head button{min-height:34px;font-size:14px}
.hub26-grant-editor,.hub26-team-members{display:flex;flex-wrap:wrap;align-items:center;gap:4px 0}
.hub26-grant-editor>button,.hub26-team-members>button{margin-top:8px}
.hub26-team-members{padding-top:10px;border-top:1px solid var(--line-2)}
.hub28-share-row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:12px 2px;border-bottom:1px solid var(--line-2)}
.hub28-share-row>div{display:flex;flex-direction:column;gap:2px;min-width:0}
.hub28-share-row small{color:var(--muted);font-size:14px}
.hub47-empty{padding:18px 4px;color:var(--muted);font-size:15px}
.hub47-graph-pagination{display:flex;justify-content:flex-end;align-items:center;gap:8px;margin-top:12px}
.hub47-coverage-graph,.hub47-coverage-list{min-width:0}
.hub47-coverage-list{display:flex;flex-direction:column;gap:4px}
.member-heading{margin-top:22px}
.hub46-arrow{align-self:center;color:var(--muted);font-weight:700;padding:0 4px}
.hub21-flow-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}
/* 처음 시작하기 (first run, directive A-10) */
.hub-start{padding:20px 22px;background:var(--paper);border:1px solid #b9d3d8;border-radius:var(--r-panel);box-shadow:inset 4px 0 0 var(--brand)}
.hub-start-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px 20px;flex-wrap:wrap}
.hub-start-head p{margin-top:4px;color:var(--ink-2)}
.hub-start-side{display:flex;align-items:center;gap:8px}
.hub-start-count{padding:3px 10px;border-radius:999px;background:var(--brand-tint);color:var(--brand);font-size:14px;font-weight:700;white-space:nowrap}
.hub-start-steps{list-style:none;margin:16px 0 0;padding:0;display:flex;flex-direction:column}
.hub-start-steps>li{display:grid;grid-template-columns:32px minmax(0,1fr) auto;gap:14px;align-items:start;padding:14px 0;border-top:1px solid var(--line-2)}
.hub-start-mark{display:grid;place-items:center;width:30px;height:30px;border-radius:50%;border:2px solid var(--line);color:var(--muted);font-weight:700;font-size:15px}
.hub-start-steps>li.is-now .hub-start-mark{border-color:var(--brand);color:var(--brand)}
.hub-start-steps>li.is-done .hub-start-mark{border-color:var(--ok);background:var(--ok);color:#fff}
.hub-start-steps>li.is-done .hub-start-mark{font-size:0}
.hub-start-steps>li.is-done .hub-start-mark::after{content:"✓";font-size:16px}
.hub-start-body b{display:block;font-size:16px;color:var(--ink)}
.hub-start-body>p{margin-top:2px;color:var(--ink-2)}
.hub-start-steps>li:not(.is-now) .hub-start-body>p{color:var(--muted)}
.hub-start-steps>li:not(.is-now) .hub-start-body .hint{display:none}
.hub-start-body>button,.hub-start-form{margin-top:10px}
.hub-start-form{display:flex;gap:8px;max-width:520px}
.hub-start-form input{flex:1;min-width:0}
.hub-start-body .hint{margin-top:6px}
.hub-start-state{font-size:14px;font-weight:650;color:var(--muted);white-space:nowrap;padding-top:4px}
.hub-start-steps>li.is-now .hub-start-state{color:var(--brand)}
.hub-start-steps>li.is-done .hub-start-state{color:var(--ok)}
@media (max-width:760px){.hub-start{padding:16px}.hub-start-steps>li{grid-template-columns:30px minmax(0,1fr)}.hub-start-state{display:none}.hub-start-form{flex-direction:column}}
/* 리포트: 파일로 받기 (lf-reports export API) */
#hub-pane-report .hub-panel-heading{flex-wrap:wrap}
#hub-pane-report .hub-panel-heading h1{flex:1}
.hub-report-export{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.hub-report-export>span{color:var(--muted);font-size:14px;margin-right:2px}
.hub-report-export .btn{min-height:36px;font-size:14px;text-decoration:none}

/* REVAON 2026-10-21: sign-up consents (one column, 44px rows, error under each box) and the separated 회원 탈퇴 zone */
.hub-consent{margin:20px 0 0;padding:0;border:0;display:flex;flex-direction:column}
.hub-consent legend{padding:0;margin-bottom:4px;font-size:14px;font-weight:600;color:var(--ink)}
.hub-consent .hub-consent-row{display:flex;align-items:center;gap:10px;min-height:44px;margin:0;font-size:14px;font-weight:400;cursor:pointer}
.hub-consent .hub-consent-row input{width:20px;height:20px;flex:none;margin:0}
.hub-consent a{color:var(--brand);text-decoration:underline;text-underline-offset:3px}
.hub-field-error{margin:0 0 4px 30px;font-size:13px;color:#b42318}
.hub-field-error::before{content:"⚠ ";}
.hub-leave{margin-top:32px;padding-top:20px;border-top:1px solid var(--line)}
.hub-leave h3{font-size:16px}
.hub-leave .hint{margin:6px 0 12px;max-width:62ch}
.hub-leave .ghost.danger{min-height:44px;color:#b42318}
.hub-leave .ghost.danger:hover{background:#fdf0ef}
.hub-leave-form{max-width:420px}
.hub-leave-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:12px}
.hub-leave-actions button{min-height:44px}
.hub-leave button.danger[type=submit]{background:#b42318;border-color:#b42318;color:#fff}
.hub-leave button.danger[type=submit]:hover{background:#912018;border-color:#912018}
.hub-leave button.danger[type=submit]:disabled{background:#e6b4ae;border-color:#e6b4ae}
