:root{--nav:#19674f;--nav-soft:#12513e;--canvas:#f6f8f7;--panel:#fff;--line:#e3e9e6;--text:#1c2e2d;--muted:#72807e;--mint:#3a8f6c;--mint-dark:#176851;--mint-soft:#e9f3ed;--amber:#a76b20;--amber-soft:#faf2e6;--red:#b9554d;--red-soft:#faece9;--blue:#526b9a;--side:236px;--shadow:0 1px 2px rgba(20,46,36,.04)}
*{box-sizing:border-box}body{margin:0;background:var(--canvas);color:var(--text);font:14px/1.5 Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}.app-shell{min-height:100vh}.sidebar{position:fixed;inset:0 auto 0 0;width:248px;background:var(--nav);color:#eaf4f1;padding:22px 14px;display:flex;flex-direction:column;z-index:10}.brand{display:flex;align-items:center;gap:11px;padding:0 8px 20px}.brand b{display:block;letter-spacing:.12em;font-size:var(--ds-fs-sm)}.brand small,.sidebar-footer small{display:block;color:#829b94;font-size:var(--ds-fs-xs)}.sidebar nav{display:flex;flex-direction:column;gap:3px}.nav-item{display:grid;grid-template-columns:24px 1fr auto;align-items:center;gap:7px;width:100%;border:0;background:transparent;color:#9fb1ac;border-radius:8px;padding:9px 10px;text-align:left;font-size:var(--ds-fs-sm);font-weight:600}.nav-item:hover{background:#10241f;color:#fff}.nav-item.active{background:#17332b;color:#fff}.nav-item.active .nav-icon{color:var(--mint)}.nav-icon{font-size:14px;text-align:center}.nav-count{font-size:var(--ds-fs-xs);background:#263c36;border-radius:999px;padding:1px 6px;color:#c5d3cf}.workspace{margin-left:248px;min-height:100vh}.topbar{min-height:104px;padding:20px 34px;border-bottom:1px solid var(--line);background:rgba(255,255,255,.88);backdrop-filter:blur(12px);display:flex;justify-content:space-between;align-items:center;position:sticky;top:0;z-index:8}.topbar h1{font-size:24px;line-height:1.15;margin:3px 0;letter-spacing:-.025em}.topbar p{margin:0}.topbar>div>p:last-child{color:var(--muted);font-size:var(--ds-fs-xs)}.breadcrumb{font-size:var(--ds-fs-xs)!important;color:#81918d!important;letter-spacing:.12em}.breadcrumb span{padding:0 5px}.breadcrumb b{color:var(--mint-dark)}.avatar{width:34px;height:34px;border-radius:50%;background:var(--nav);color:#fff;display:grid;place-items:center;font-size:var(--ds-fs-xs);font-weight:800}button{font:inherit;border:0;border-radius:8px;background:var(--nav);color:#fff;font-weight:700;padding:9px 13px;cursor:pointer}.ghost,.secondary{background:#fff;border:1px solid var(--line);color:var(--text)}.pill,.mode-badge{border:1px solid #bce8d9;background:var(--mint-soft);border-radius:999px;padding:7px 11px;color:var(--mint-dark);font-size:var(--ds-fs-xs);font-weight:700}main{max-width:1480px;margin:auto;padding:30px 34px 52px}.app-view[hidden]{display:none}.app-view.active{animation:page-in .18s ease-out}@keyframes page-in{from{opacity:.4;transform:translateY(3px)}to{opacity:1;transform:none}}.eyebrow{margin:0 0 4px;color:var(--mint-dark);font-size:var(--ds-fs-xs);font-weight:800;letter-spacing:.16em}.page-intro{display:grid;grid-template-columns:1.15fr .85fr;gap:40px;align-items:end;margin:2px 0 24px}.page-intro h2,.content-header h2{font-size:clamp(28px,3vw,42px);line-height:1.08;letter-spacing:-.045em;margin:7px 0}.page-intro>p,.content-header p{color:var(--muted);max-width:600px;margin:0}.content-header{display:flex;justify-content:space-between;align-items:end;gap:24px;margin:3px 0 24px}.toolbar{display:flex;align-items:center;gap:8px}.period-control{display:flex;border:1px solid var(--line);background:#fff;border-radius:8px;padding:3px}.period-control button{padding:5px 10px;background:transparent;color:var(--muted);font-size:var(--ds-fs-xs)}.period-control button.active{background:var(--nav);color:#fff}.auth-banner{display:grid;grid-template-columns:1.2fr .8fr;gap:24px;align-items:center;margin-bottom:24px;padding:19px 21px;border:1px solid #ead29b;border-radius:12px;background:var(--amber-soft)}.auth-banner[hidden]{display:none}.auth-banner h3,.auth-banner p{margin:3px 0}.auth-banner code{display:block;margin-top:8px;color:var(--amber);overflow-wrap:anywhere}.metrics{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:10px;margin-bottom:12px}.metric,article,.summary-strip{background:var(--panel);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow)}.metric{padding:16px;min-height:95px}.metric strong{display:block;font-size:24px;letter-spacing:-.04em;margin-top:12px}.metric span{color:var(--muted);font-size:var(--ds-fs-xs)}.dashboard-grid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:12px;margin-bottom:12px}article{padding:19px;min-height:235px}.section-title{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}.section-title h3{margin:0;font-size:16px}.section-title>span,.text-action{color:var(--muted);font-size:var(--ds-fs-xs)}.text-action{background:transparent;padding:5px}.text-action:hover{color:var(--mint-dark)}.row{display:grid;grid-template-columns:1fr auto;gap:16px;padding:12px 4px;border-top:1px solid var(--line);align-items:start}.row:first-child{border-top:0}.row small{display:block;color:var(--muted);font-size:var(--ds-fs-xs);margin-top:2px}.clickable{cursor:pointer}.clickable:hover{background:#f7faf9}.state{display:inline-flex;align-items:center;border-radius:999px;padding:2px 7px;font-size:var(--ds-fs-xs);font-weight:700;background:#f1f4f3;color:var(--muted)}.unknown,.warning,.high,.approval_required,.pending,.issued{background:var(--amber-soft);color:var(--amber)}.healthy,.allow,.executed{background:var(--mint-soft);color:var(--mint-dark)}.exceeded,.critical,.deny,.error{background:var(--red-soft);color:var(--red)}.empty{color:var(--muted);padding:28px 0;text-align:center;font-size:var(--ds-fs-xs)}.inventory-note{color:var(--muted);font-size:var(--ds-fs-xs);margin:-6px 0 11px}dialog{width:min(800px,calc(100% - 32px));max-height:88vh;overflow:auto;background:#fff;color:var(--text);border:1px solid var(--line);border-radius:14px;padding:27px;box-shadow:0 24px 80px rgba(0,0,0,.2)}dialog::backdrop{background:rgba(4,14,11,.55)}.close{float:right;background:transparent;color:var(--muted);font-size:24px;padding:0}label,.detail-section>small{display:block;color:var(--muted);font-size:var(--ds-fs-xs)}code{color:var(--text)}label{margin:18px 0 7px}input,textarea{width:100%;background:#fff;color:var(--text);border:1px solid var(--line);border-radius:8px;padding:10px;margin-top:6px}textarea{min-height:105px;resize:vertical;overflow-wrap:anywhere}
.span-12{grid-column:span 12}
select{width:100%;background:#fff;color:var(--text);border:1px solid var(--line);border-radius:8px;padding:10px;margin-top:6px}.compact{padding:5px 8px;font-size:var(--ds-fs-xs)}
.evidence-pack{border:1px solid var(--line);border-radius:10px;padding:13px;margin-top:10px;background:#fbfcfc}.evidence-pack>.section-title{margin-bottom:7px}
button,.clickable,.metric,article{transition:border-color .16s ease,box-shadow .16s ease,background-color .16s ease,color .16s ease,transform .16s ease}button:hover{filter:brightness(1.05)}button:active{transform:translateY(1px)}button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible,.clickable:focus-visible{outline:3px solid rgba(54,211,161,.4);outline-offset:2px}.ghost:hover,.secondary:hover{border-color:#9acdbd;background:#f7fcfa;color:var(--mint-dark)}.clickable:hover,.clickable:focus-visible{background:#f2faf7;box-shadow:inset 3px 0 0 var(--mint)}.heading-with-help{display:inline-flex;align-items:center;gap:7px}.help-trigger{width:20px;height:20px;min-width:20px;display:inline-grid;place-items:center;padding:0;border:1px solid #b9d8ce;border-radius:50%;background:#f5fbf9;color:var(--mint-dark);font-size:var(--ds-fs-xs);font-weight:900;line-height:1;vertical-align:middle}.help-trigger:hover,.help-trigger:focus-visible{filter:none;background:var(--mint-soft);border-color:var(--mint);transform:none}.app-tooltip{position:fixed;z-index:1000;width:max-content;max-width:min(340px,calc(100vw - 24px));padding:10px 12px;border:1px solid #2b443d;border-radius:9px;background:#10231e;color:#f3fbf8;box-shadow:0 12px 34px rgba(4,20,15,.24);font-size:var(--ds-fs-sm);line-height:1.55;pointer-events:none}.app-tooltip[hidden]{display:none}
/* A piece of a bubble's words that does not end a line inside it: a separator dot with the word after it, a clock time (app.js tooltipPieces). */
.app-tooltip-keep{white-space:nowrap}.field-help{margin:7px 0 14px;padding:10px 12px;border-left:3px solid var(--mint);border-radius:0 8px 8px 0;background:var(--mint-soft);color:#356158;font-size:var(--ds-fs-sm)}.glossary-dialog{width:min(920px,calc(100% - 32px))}.glossary-dialog h2{margin:4px 0 7px;font-size:24px}.glossary-intro{max-width:700px;margin:0 0 22px;color:var(--muted)}.glossary-item{padding:9px 0;border-top:1px solid var(--line)}.glossary-item:first-of-type{border-top:0}.glossary-item b{font-size:var(--ds-fs-xs)}.glossary-item p{margin:2px 0 0;color:var(--muted);font-size:var(--ds-fs-xs);line-height:1.55}.glossary-close{margin-top:18px}@media(min-width:1700px){.glossary-item b,.glossary-item p{font-size:var(--ds-fs-sm)}}.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
@media(max-width:1180px){.metrics{grid-template-columns:repeat(4,1fr)}}
@media(max-width:820px){.sidebar{position:static;width:auto}.sidebar nav{display:grid;grid-template-columns:repeat(2,1fr)}.workspace{margin:0}.topbar{position:static;padding:17px 20px;align-items:flex-start}.avatar{display:none}main{padding:22px 18px}.page-intro,.content-header,.auth-banner{grid-template-columns:1fr;display:grid}.metrics{grid-template-columns:repeat(2,1fr)}.toolbar{align-items:stretch;flex-direction:column}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:0s!important}}


/* Header: current company and signed-in operator (G03/G04). */
.session-context {
  display: flex;
  flex-direction: column;
  min-width: 0;
  max-width: 22rem;
  line-height: 1.25;
}
.session-context b,
.session-context small {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.session-context small {
  color: var(--muted);
}
/* Who is signed in, their role and reach are read whole, never cut to "…" (router-g10-r1 at 1440: '허용된 관리 범...').
   Each part is its own box (session-context.js): the line breaks between parts, inside one only when it is longer
   than the line. */
.session-context #operator-identity {
  white-space: normal;
  word-break: keep-all;
  overflow-wrap: break-word;
}
.session-context #operator-identity > span {
  display: inline-block;
  max-width: 100%;
}
/* A line that still breaks (three lines with the company's) keeps the header its height, so the tab row stands
   where it does under a short account (router r2 at 1440: 3px lower under admin2@demo-company-b.example). At 1440
   and wider the block takes the room the header has beside its title, so an address, one role and the reach are
   one line; with the company choice shown that room is the choice's. The room is what the title leaves: the title
   keeps its own line and the block gives way to it, the other actions keeping their size (a 26rem block under a
   breaking line pressed 'TATUM CLICK / 회사 전체 그래프' onto two lines, the tab row 18px lower on six screens).
   What the block gives way to is the path line, up to 16rem (the longest, 'TATUM CLICK / Agent Universe / 에이전트',
   is 253px). The heading asks for no room of its own: it takes what is free beside the block and ends in … past
   that, so an entity's name (up to 80 letters, 771px) does not take the block's room (it left the block 0 to 148px
   wide: the account line split on 4 to 71 lines, the tab row at 93 to 1098, the actions past the header's edge).
   Below 1440 the header is one row from 1181 and the block keeps its 22rem: there the title cell is what gives
   way, and its path line and heading each stay one line ending in … -- a path line that folded in the pressed
   cell put the tab row 18px lower a fold (at 1280 with 로그아웃 shown 100 or 118 under a two-line account against
   64 or 82 under a short one, 280 to 370 at 1181 to 1221), and the heading was drawn over the actions. */
@media(min-width:1181px){
  .session-context{margin-block:-2px}
  .topbar:not(:has(.company-switch:not([hidden])))>div:first-of-type>.breadcrumb,
  .topbar:not(:has(.company-switch:not([hidden])))>div:first-of-type .page-name>h1{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
}
@media(min-width:1440px){
  .topbar:not(:has(.company-switch:not([hidden])))>div:first-of-type{flex:1 1 auto;min-width:auto}
  .topbar:not(:has(.company-switch:not([hidden])))>div:first-of-type>.breadcrumb{max-width:16rem}
  .topbar:not(:has(.company-switch:not([hidden])))>div:first-of-type>.page-name{width:0;min-width:100%}
  
  
}
.session-context b[data-company-state="forbidden"],
.session-context b[data-company-state="failed"] {
  color: var(--amber);
}


/* Landscape: legend, 3D scene, overlay buttons and presentation mode (G12/G15). */
.map-legend p {
  margin: 4px 0;
}
.map-legend-state,
.map-legend-kind {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  margin-right: 10px;
}
.map-legend-state i,
.map-legend-kind i {
  display: inline-block;
  width: 12px;
  height: 12px;
  border-radius: 50%;
}
.map-legend-state i.observed {
  background: #287b76;
}
.map-legend-state i.unknown {
  border: 2px solid #8b8276;
}
.map-legend-state i.absent {
  border: 2px dashed #b9b2a8;
}
.map-clusters {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  align-items: center;
  margin-block: 8px;
}
.map-3d {
  position: relative;
  width: 100%;
  height: min(62vh, 520px);
  min-height: 280px;
  border-radius: 12px;
  overflow: hidden;
  background: #010208;
}
.map-3d-canvas {
  display: block;
  width: 100%;
  height: 100%;
  cursor: grab;
  touch-action: none;
}
.map-3d-overlay {
  position: absolute;
  inset: 0;
  pointer-events: none;
}
.map-3d-node {
  position: absolute;
  top: 0;
  left: 0;
  width: 22px;
  height: 22px;
  padding: 0;
  border: 0;
  border-radius: 50%;
  background: transparent;
  pointer-events: auto;
  cursor: pointer;
}
.map-3d-cluster {
  position: absolute;
  top: 0;
  left: 0;
  max-width: 220px;
  padding: 2px 8px;
  border-radius: 999px;
  background: rgba(1, 2, 8, 0.72);
  color: #d9fff5;
  font-size: 12px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.map-3d-cluster[hidden] {
  display: none;
}
.map-3d-node:focus-visible,
.map-3d-node.is-selected {
  outline: 2px solid #d9fff5;
  outline-offset: 2px;
}
.map-3d-tools {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-block: 8px;
}
body.map-presenting .sidebar,
body.map-presenting .topbar {
  display: none;
}
.map-panel.is-presentation {
  position: fixed;
  inset: 0;
  z-index: 50;
  margin: 0;
  overflow: auto;
  border-radius: 0;
}
.map-panel.is-presentation .map-3d {
  height: calc(100vh - 220px);
}
/* G17 Gateway policy, key and rule editing: stages read top to bottom, the secret stands apart. */
#cp-editing article{min-height:0}
.cp-form input[type="checkbox"],#cp-editing input[type="checkbox"]{width:16px;height:16px;margin:0;padding:0}
[data-cp-write="saved"],[data-cp-write="published"],[data-cp-write="rollback-draft"],[data-cp-key-write],[data-gr-write]{margin:8px 0}
[data-cp-write="conflict"],[data-cp-write="invalid"],[data-cp-write="refused"],[data-cp-key-write="conflict"],[data-cp-key-write="invalid"],[data-gr-write="conflict"],[data-gr-write="invalid"]{color:var(--red)}


/* Mock v24 shell: light sidebar, grouped navigation, green accent (design/mock tatum-demo.html). */
body{font-family:-apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo","Malgun Gothic",Inter,system-ui,sans-serif;line-height:1.55}
.sidebar{width:var(--side);background:#fff;color:var(--text);border-right:1px solid var(--line);padding:0 17px 14px;overflow-y:auto}
.brand{margin:0 -17px 22px;height:78px;min-height:78px;padding:0 22px;background:#151d2c;color:#fff;gap:11px}
.brand b{color:#fff;letter-spacing:.2em}.brand small{color:#9fb0c4}
.sidebar nav{gap:0}

.nav-item{display:flex;align-items:center;gap:12px;min-height:38px;margin:2px 0;padding:9px 13px;border-radius:7px;color:#67746f;font-size:var(--ds-fs-xs);font-weight:500;background:transparent}
.nav-item:hover{background:#f5f8f6;color:var(--text);filter:none}
.nav-item.active{background:#e8f2ec;color:#1b674f;font-weight:700}
.nav-item.active .nav-icon{color:#1b674f}
.nav-icon{width:18px;height:18px;display:inline-flex;flex:none}
.nav-icon svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}

.nav-count{margin-left:auto;font-size:var(--ds-fs-xs);line-height:19px;min-width:22px;text-align:center;background:#f3e8da;color:#98641e;border-radius:5px;padding:0 5px}

.workspace{margin-left:var(--side)}
.topbar{min-height:73px;padding:12px 35px;background:#fff;border-bottom:1px solid var(--line);backdrop-filter:none}
.topbar h1{font-size:20px;letter-spacing:-.02em}
.breadcrumb b{color:var(--mint-dark)}
main{max-width:1540px;padding:32px 35px 45px}
.eyebrow{color:#739382;font-size:var(--ds-fs-xs);letter-spacing:.14em;font-weight:650}
.page-intro h2,.content-header h2{font-size:24px;letter-spacing:-.04em;font-weight:650}
button{background:var(--nav);border-radius:6px;font-weight:550}
.ghost,.secondary{background:#fff;border:1px solid #dce5df;color:var(--text)}
.ghost:hover,.secondary:hover{background:#f0f5f1;border-color:#b9cdbf;color:var(--text)}
.metric,article,.summary-strip{border-radius:8px;box-shadow:var(--shadow)}
.pill,.mode-badge{border-color:#d8e6dc;background:#eef6ef;color:#48775c}
.avatar{background:#eeece4;color:#746b56}
.text-action{color:var(--mint-dark);font-weight:600}
.button-row{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.tag{display:inline-block;font-size:var(--ds-fs-xs);padding:3px 7px;border-radius:4px;background:#eef4ef;color:#48775c;font-weight:500;white-space:nowrap}
.tag.amber{background:#faf2e6;color:#a07532}.tag.red{background:#faece9;color:#b66657}.tag.gray{background:#f1f3f2;color:#839088}.tag.blue{background:#edf1f8;color:#617ea4}
.banner{display:block;margin:0 0 12px;padding:11px 15px;border:1px solid #e1e8ee;border-radius:6px;background:#f4f7fa;color:#5c7289;font-size:var(--ds-fs-xs)}
.banner.amber{background:var(--ds-unknown-soft);border-color:var(--ds-unknown-2);color:var(--ds-text)}
.kv{display:flex;justify-content:space-between;align-items:flex-start;gap:18px;padding:11px 0;border-bottom:1px solid #f0f3ef;font-size:var(--ds-fs-xs)}
.kv>span:first-child{color:#7f8d86;flex:0 0 38%}.kv>span:last-child{text-align:right;min-width:0;overflow-wrap:anywhere}.kv small{color:var(--muted);font-size:var(--ds-fs-xs)}
.chip,.chip-button{display:inline-flex;align-items:center;gap:6px;border:1px solid #d7e5dc;background:#f1f6ef;color:#35644c;border-radius:999px;padding:4px 10px;font-size:var(--ds-fs-xs);font-weight:550}
.chip button{background:transparent;color:inherit;padding:0 2px;font-size:var(--ds-fs-sm);line-height:1}
.chip-button.active{background:#19674f;border-color:#19674f;color:#fff}
.module-empty,.module-pending{min-height:0;padding:22px;color:var(--muted)}
.module-empty p,.module-pending p{margin:0 0 10px}
.segmented{display:inline-flex;border:1px solid #dce5df;border-radius:6px;overflow:hidden;background:#fff}
.segmented button{background:#fff;color:#67746f;border-radius:0;padding:7px 12px;font-size:var(--ds-fs-xs)}
.segmented button[aria-pressed="true"]{background:#e8f2ec;color:#1b674f;font-weight:700}
.segmented button:disabled{opacity:.45;cursor:not-allowed}
/* AI Landscape */
.lv-toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:end;margin:0 0 12px}.lv-toolbar label{margin:0;min-width:180px}
.lv-stage{padding:18px}
.lv-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;margin-bottom:10px}
.lv-path{margin:0;font-size:var(--ds-fs-xs)}
.lv-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:0 0 12px}
.lv-metrics div{border:1px solid var(--line);border-radius:8px;padding:10px 12px;background:#fbfcfb}.lv-metrics b{display:block;font-size:20px;font-weight:600}.lv-metrics small{color:var(--muted);font-size:var(--ds-fs-xs)}
.lv-pick{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 10px}.lv-pick input,.lv-pick select{width:auto;flex:1 1 220px;margin:0}
.lv-layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:14px;align-items:start}
.lv-scene{min-width:0}
.lv-2d{width:100%;max-height:520px;min-height:260px;background:#fafcf9;background-image:radial-gradient(#d9e3d9 1px,transparent 1px);background-size:18px 18px;border-radius:10px;color:#6c8a7c}
.lv-2d [data-map-asset-ref]{cursor:pointer}.lv-2d .is-selected circle{stroke:#19674f;stroke-width:4}
.lv-panel{border:1px solid var(--line);border-radius:8px;padding:16px;background:#fff}
.lv-panel h3{margin:2px 0 4px;font-size:14px;overflow-wrap:anywhere}
.lv-evidence{margin:6px 0;font-size:var(--ds-fs-xs);color:var(--muted);overflow-wrap:anywhere}
.lv-panel .button-row{margin:12px 0 8px}
.map-legend .map-legend-kind{font-size:var(--ds-fs-xs);color:var(--muted)}
.map-clusters small{display:block;width:100%;color:var(--muted);font-size:var(--ds-fs-xs)}
/* AI 인벤토리 */
.inv-layout{display:grid;grid-template-columns:240px minmax(0,1fr);gap:16px;align-items:start}
.inv-facets{background:#fff;border:1px solid var(--line);border-radius:8px;padding:14px;position:sticky;top:90px}
.inv-facet-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}
.inv-facets details{border-top:1px solid #eef2ef;padding:9px 0}.inv-facets summary{cursor:pointer;font-size:var(--ds-fs-xs);font-weight:600}
.inv-facets summary b{margin-left:4px;background:#e8f2ec;color:#1b674f;border-radius:4px;padding:0 5px;font-size:var(--ds-fs-xs)}
.inv-facets label{display:flex;align-items:center;gap:7px;margin:6px 0 0;color:var(--text);font-size:var(--ds-fs-xs)}
.inv-facets input[type="checkbox"]{width:16px;height:16px;margin:0;padding:0}.inv-facets label small{margin-left:auto;color:var(--muted)}
.inv-main{min-width:0}
.inv-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:0 0 12px}.inv-toolbar input{width:auto;flex:1 1 240px;margin:0}
.inv-count{margin-left:auto;color:var(--muted);font-size:var(--ds-fs-xs)}.inv-count b{color:var(--text);font-size:14px}
.table-card{padding:0;min-height:0;overflow:hidden}
.table-wrap{position:relative;overflow:auto}
.table-wrap table{border-collapse:collapse;width:100%;min-width:760px;font-size:var(--ds-fs-xs);text-align:left}
.table-wrap th{font-weight:500;background:#f9fbf9;color:#8a988e;font-size:var(--ds-fs-xs);padding:11px 14px;border-bottom:1px solid var(--line);white-space:nowrap}
.table-wrap td{padding:12px 14px;border-bottom:1px solid #edf1ee;vertical-align:middle;max-width:360px;word-break:keep-all;overflow-wrap:break-word}
/* Long ids may break anywhere; Korean words and the row action do not break mid-word. A cell's small is a sentence
   as often as an id: it keeps the cell's keep-all, so a line ends between its words, and only a piece longer than
   the line (an id) breaks inside. A code is an id and breaks as one. */
.table-wrap td small,.table-wrap td code{overflow-wrap:anywhere}.table-wrap td code{word-break:normal}.table-wrap td:last-child{white-space:nowrap}
.table-wrap tbody tr:hover{background:#fafcf9}
/* A table that goes on sideways on a phone fades the edge it goes on past (portal-ui.js marks it): its next column
   is otherwise a row cut at the edge with nothing said. A table stacked for a phone does not scroll and is not marked. */
@media(max-width:600px){.table-wrap[data-more]{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 28px),transparent);mask-image:linear-gradient(90deg,#000 calc(100% - 28px),transparent)}.table-wrap[data-scrolled]{-webkit-mask-image:linear-gradient(90deg,transparent,#000 28px);mask-image:linear-gradient(90deg,transparent,#000 28px)}.table-wrap[data-scrolled][data-more]{-webkit-mask-image:linear-gradient(90deg,transparent,#000 28px,#000 calc(100% - 28px),transparent);mask-image:linear-gradient(90deg,transparent,#000 28px,#000 calc(100% - 28px),transparent)}}
.name-cell{display:flex;align-items:center;gap:10px}.name-cell strong{display:block;font-size:var(--ds-fs-xs);font-weight:600}.name-cell small{display:block;font-size:var(--ds-fs-xs);color:#8e9c93;margin-top:2px}
.app-icon{flex:none;width:30px;height:30px;border-radius:7px;background:#eff3ed;color:#688272;display:grid;place-items:center;font-size:var(--ds-fs-xs);font-weight:700}
/* 자산 상세: the wide right panel shared by the map and the list. */
dialog.drawer{position:fixed;inset:0 0 0 auto;margin:0;width:min(640px,100vw);max-width:100vw;height:100vh;max-height:100vh;border:0;border-left:1px solid var(--line);border-radius:0;padding:28px 30px;box-shadow:-12px 0 60px rgba(24,51,40,.08)}
dialog.drawer::backdrop{background:rgba(23,45,37,.35);backdrop-filter:blur(2px)}
.drawer-head{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;margin-bottom:18px}
.drawer-head h2{margin:2px 0;font-size:20px;overflow-wrap:anywhere}
.drawer-ref{margin:0;color:var(--muted);font:12px ui-monospace,SFMono-Regular,Menlo,monospace;overflow-wrap:anywhere}
dialog.drawer .close{float:none;flex:none;width:31px;height:31px;border-radius:50%;background:#f1f5ef;color:var(--muted);font-size:20px;line-height:1}
.tabs{display:flex;gap:20px;border-bottom:1px solid #e2e9e3;margin:0 0 14px;overflow-x:auto}
.tab{padding:0 0 11px;border:0;border-bottom:2px solid transparent;border-radius:0;background:transparent;color:#84968a;font-size:var(--ds-fs-xs);font-weight:500;white-space:nowrap}
.tab.active{color:#216b4e;border-color:#216b4e;font-weight:650}.tab span{margin-left:5px;font-size:var(--ds-fs-xs)}
.drawer-sub{margin:16px 0 4px;font-size:var(--ds-fs-xs)}
@media(max-width:1180px){.lv-layout{grid-template-columns:1fr}.inv-layout{grid-template-columns:1fr}.inv-facets{position:static}}
@media(max-width:900px){:root{--side:70px}.sidebar{position:fixed;width:var(--side);padding:0 9px 14px}.brand{margin:0 -9px 16px;justify-content:center;padding:0}.brand div,.workspace-switcher,.nav-item .nav-text,.nav-count,.sidebar-footer{display:none}.sidebar nav{display:flex}.nav-item{justify-content:center;padding:12px 8px}.workspace{margin-left:var(--side)}.lv-metrics{grid-template-columns:repeat(2,1fr)}}
@media(max-width:600px){main{padding:22px 14px}.topbar{padding:12px 14px}dialog.drawer{padding:20px}.kv{flex-direction:column;gap:3px}.kv>span:first-child{flex:none}.kv>span:last-child{text-align:left}}
.entry-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:0 0 14px}
.entry-card{display:flex;justify-content:space-between;align-items:center;gap:12px;text-align:left;background:#eaf2ec;border:1px solid #d8e6dc;border-radius:9px;color:var(--text);padding:18px 20px}
.entry-card strong{display:block;font-size:14px}.entry-card small{display:block;margin-top:3px;color:#6e8776;font-size:var(--ds-fs-xs);font-weight:400}.entry-card b{color:#367958;font-size:20px}
.entry-card:hover{background:#e2eee6;border-color:#b9cdbf;filter:none}
@media(max-width:700px){.entry-grid{grid-template-columns:1fr}}
.inv-server{border-top:1px solid #eef2ef;margin-top:6px;padding-top:10px}
.inv-server-head{margin:0 0 4px;display:flex;flex-direction:column}.inv-server-head small{color:var(--muted);font-size:var(--ds-fs-xs)}
.inv-server details{border-top:0;padding:6px 0}.inv-server input[type="radio"]{width:auto;margin:0;accent-color:#317653}
.inv-dates{display:grid;grid-template-columns:minmax(0,1fr);gap:6px}.inv-dates label{display:block;margin:4px 0 0}.inv-dates input{margin-top:3px;padding:6px;font-size:var(--ds-fs-xs);width:100%;min-width:0;box-sizing:border-box}
/* 운영 개요: observed asset figures that open the list they count. */
.overview-assets{background:#fff;border:1px solid var(--line);border-radius:8px;padding:18px 20px;margin:0 0 14px}
.overview-assets:empty{display:none}
.ov-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px}
.ov-metric{display:flex;flex-direction:column;align-items:flex-start;gap:2px;text-align:left;background:#fbfcfb;border:1px solid var(--line);border-radius:8px;color:var(--text);padding:12px 14px;min-height:92px}
.ov-metric:hover{background:#f0f5f1;border-color:#b9cdbf;filter:none}
.ov-metric span{font-size:var(--ds-fs-xs);color:#75827c;font-weight:500}.ov-metric strong{font-size:24px;font-weight:550;letter-spacing:-.03em}.ov-metric small{font-size:var(--ds-fs-xs);color:#91a096;font-weight:400}
.ov-metric.amber strong{color:#ae7d37}.ov-metric.is-static{cursor:default}

.company-switch{margin:0}.company-switch select{margin:0;padding:6px 8px;font-size:var(--ds-fs-xs);width:auto;max-width:14rem}
/* Business modules load after the shell; their screens take input once they are in. AI 업무 is the shell's own script
   (index.html, not portal-modules.json): its list is drawn and heard before the modules are in, so it takes input then
   (RA93: a name pressed in those first seconds went to <main>, nothing asked or said). */
html[data-modules="loading"] .app-view:not([data-page="overview"]):not([data-page="landscape"]):not([data-page="inventory"]):not([data-page="usecases"]){pointer-events:none}
/* A note right after an action sits below it, not under it (the legacy note margin is negative). */
button + .inventory-note,.button-row + .inventory-note{margin-top:8px}
/* And after a card: it stands apart from the card's border, never pulled up onto it (review inventory-r2: the list's
   note under its table card touched the border). */
:is(.ds-card,article,.table-card) + .inventory-note{margin-top:var(--ds-space-3)}
/* The same after a toolbar, whose last control is its button once it stacks on a narrow screen,
   and for the default Controls' answers under theirs. */
.toolbar + .inventory-note,.toolbar-row + .inventory-note,#dc-gateway>.inventory-note:first-child,#dc-model>.inventory-note:first-child,#dc-reports>.inventory-note:first-child{margin-top:8px}
/* On a phone a section's summary goes under its title instead of squeezing it into two lines. */
@media(max-width:600px){.section-title{flex-wrap:wrap;align-items:flex-start;gap:2px 12px}}
.issue-bell-wrap{position:relative}.issue-bell{display:inline-flex;align-items:center;gap:6px;padding:7px 10px}
.issue-bell-count{min-width:20px;text-align:center;background:#f3e8da;color:#98641e;border-radius:5px;font-size:var(--ds-fs-xs);line-height:18px;padding:0 5px}
.issue-bell-panel{position:absolute;right:0;top:calc(100% + 6px);z-index:30;width:min(360px,calc(100vw - 24px));background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 12px 34px rgba(20,46,36,.14);padding:14px}
.issue-bell-panel .button-row,.issue-bell-panel>button{margin-top:8px}
@media(max-width:600px){.issue-bell-panel{position:fixed;left:12px;right:12px;top:64px;width:auto}}
#org-unregistered>.inventory-note{margin:12px 0 0}
/* Narrow screens (tablet and phone): the full menu opens over the page from a
   header button instead of a label-less icon rail, so every screen — including
   the child entries — stays reachable by its name. */
.nav-toggle{display:none}
@media(max-width:900px){
  :root{--side:0px}
  .nav-toggle{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;padding:0;font-size:16px;flex:none}
  .topbar{display:flex;gap:10px;align-items:flex-start}
  .sidebar{position:fixed;inset:0 auto 0 0;z-index:60;width:min(280px,86vw);padding:0 17px 14px;transform:translateX(-102%);box-shadow:0 0 0 rgba(0,0,0,0)}
  body.nav-moving .sidebar{transition:transform .18s ease,box-shadow .18s ease}
  body.nav-open .sidebar{transform:none;box-shadow:0 12px 40px rgba(20,46,36,.25)}
  .sidebar .brand{margin:0 -17px 16px;justify-content:flex-start;padding:0 22px}
  .sidebar .brand div,.sidebar .workspace-switcher,.sidebar .nav-item .nav-text,.sidebar .nav-count{display:initial}
  .sidebar nav{display:block}.sidebar .nav-item{display:flex;justify-content:flex-start;padding:9px 13px}

  .workspace{margin-left:0}
  
  body.nav-open .nav-backdrop{display:block;position:fixed;inset:0;z-index:59;background:rgba(15,28,24,.35)}
  /* Open, the panel covers the header's left (390 px: the button at 16-54 px under a 280 px panel), so the button
     that closes it rises over the panel: the header gives up its own layer while the menu is open (Air QA c3.68
     UC:signin narrow-screen-menu: the second press timed out on the panel). */
  body.nav-open .topbar{z-index:auto}
  body.nav-open .nav-toggle{position:relative;z-index:61;background:var(--ds-surface)}
  
}
@media(max-width:600px){
  .topbar h1{font-size:16px}#page-subtitle{display:none}
  
  .session-context{max-width:100%}
  table{display:block;overflow-x:auto}
  dialog{max-width:calc(100vw - 16px)}
}
/* v2 모델 연결 · 단말 · 사용자 screens share one table and summary look. */
.mc-steps{padding-left:20px;font-size:var(--ds-fs-xs)}.mc-steps li{margin:6px 0}
[role="alert"]:empty{display:none}
[data-dv-awaiting] small{display:block;margin-top:.25rem;overflow-wrap:anywhere}
.mb-invite{display:block;padding:10px;background:#f4f7f5;border-radius:6px;overflow-wrap:anywhere;font-size:var(--ds-fs-xs)}
.dv-issued{border-color:#e9d9b9;background:#fffaf1;min-height:0;margin-bottom:12px}
.dv-cmd{margin:6px 0 0;padding:8px 10px;background:#f6f7f8;border:1px solid var(--line);border-radius:6px;font-size:var(--ds-fs-xs);line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere;max-width:100%}
.mc-h{margin:16px 0 4px;font-size:var(--ds-fs-lg)}
.mc-cost{margin:0 0 8px;padding-left:18px;font-size:var(--ds-fs-xs)}
@media(max-width:600px){
  .topbar{flex-wrap:wrap}.topbar>div:first-of-type{flex:1 1 0;min-width:0}
  
  .session-context{flex:1 1 100%;min-width:0}.session-context b,.session-context small{white-space:normal;overflow-wrap:anywhere}
  
}
/* The menus and the tab row of the current menu (app.js menus block). */
.sidebar .nav-item[hidden],.menu-tab[hidden],.menu-tab-row[hidden]{display:none}
.nav-divider{display:block;height:1px;margin:8px 13px;background:#e3e9e6}.nav-divider[hidden]{display:none}
.menu-tabs{padding:0 34px;border-bottom:1px solid var(--line);background:#fff}
.menu-tab-row{display:flex;gap:2px;padding-right:var(--menu-tab-tail,0px);overflow-x:auto;scrollbar-width:thin}
.menu-tab{flex:none;padding:12px 13px 10px;border-radius:0;border-bottom:2px solid transparent;background:transparent;color:var(--muted);font-size:var(--ds-fs-xs);font-weight:600;white-space:nowrap}
.menu-tab:hover{filter:none;color:var(--text)}
.menu-tab.active{border-bottom-color:var(--mint-dark);color:var(--text);font-weight:700}
.header-slot:empty{display:none}
@media(max-width:820px){.menu-tabs{padding:0 18px}}
@media(max-width:900px){.nav-divider{margin:6px 4px}}
/* A row's provenance and a field's basis (portal-badges.js). */
.prov-badge,.basis-badge{display:inline-flex;align-items:center;border-radius:999px;padding:1px 7px;font-size:var(--ds-fs-xs);font-weight:700;line-height:16px;white-space:nowrap;vertical-align:middle}
.prov-badge[data-provenance="demo_environment"]{background:#eef1fb;color:#3d4f9a;border:1px solid #cdd5f2}
.prov-badge[data-provenance="synthetic"]{background:var(--red-soft);color:var(--red);border:1px solid #f0c2c2}
.prov-badge[data-provenance="unknown"]{background:var(--amber-soft);color:var(--amber);border:1px dashed #e2c27c}
.basis-badge{padding:0 6px;font-weight:600;background:#f1f4f3;color:var(--muted);border:1px solid var(--line)}
.basis-badge[data-basis="observed"]{border-style:solid;color:#1b674f;background:var(--mint-soft)}
.basis-badge[data-basis="configured"],.basis-badge[data-basis="declared"]{border-style:dashed}
.basis-badge[data-basis="attributed"]{border-style:dotted}
.basis-badge[data-basis="unknown"]{color:var(--amber);background:var(--amber-soft)}
.basis-value[data-basis-value="unknown"]{color:var(--amber)}
.app-view [data-legacy][hidden]{display:none}
html[data-portal-roles="pending"] #primary-menu,html[data-portal-roles="pending"] #menu-tabs{visibility:hidden}
/* The shell's own header names the menu and says what the tab is for (app.js); a screen's older
   content-header keeps only its sentence and its buttons, so a page never opens with two titles. */
.app-view>.content-header .eyebrow,.app-view>.content-header h2{display:none}
.app-view>.content-header{margin:0 0 14px;align-items:center}.app-view>.content-header p{font-size:var(--ds-fs-xs)}

/* ── Design system (품질 wave, direction A · Pilot Blue) ──────────────────────────────────────────
   Everything below reads --ds-* tokens (리디자인 명세 4절's values); the Portal is light whatever the OS's setting.
   A screen's own sheet uses the tokens and the shared classes here, and no size under --ds-fs-xs.
   Fonts are served from /static (vendor-libraries.json assets): the Portal asks no other origin. */
/* Pretendard Variable as the release serves it for the web (pretendard 1.3.9, woff2-dynamic-subset): 92 files, each with the characters its unicode-range names, so a browser fetches and reads only the ones a page uses. The one 2 MB file held WebKit's main thread ~2.8 s on a first load (A7, lotse-build 10-09). The 2,307 characters the whole file had and no part holds (Greek, accented Latin such as ä or Ñ, circled and squared letters) are drawn by the next fonts of --ds-font: the whole file named for them alone held WebKit's main thread 4.1 s wherever one was shown. */
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.0.woff2) format("woff2-variations");unicode-range:U+f9ca-fa0b,U+ff03-ff05,U+ff07,U+ff0a-ff0b,U+ff0d-ff19,U+ff1b,U+ff1d,U+ff20-ff5b,U+ff5d,U+ffe0-ffe3,U+ffe5-ffe6}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.1.woff2) format("woff2-variations");unicode-range:U+d723-d728,U+d72a-d733,U+d735-d748,U+d74a-d74f,U+d752-d753,U+d755-d757,U+d75a-d75f,U+d762-d764,U+d766-d768,U+d76a-d76b,U+d76d-d76f,U+d771-d787,U+d789-d78b,U+d78d-d78f,U+d791-d797,U+d79a,U+d79c,U+d79e-d7a3,U+f900-f909,U+f90b-f92e}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.2.woff2) format("woff2-variations");unicode-range:U+d679-d68b,U+d68e-d69e,U+d6a0,U+d6a2-d6a7,U+d6a9-d6c3,U+d6c6-d6c7,U+d6c9-d6cb,U+d6cd-d6d3,U+d6d5-d6d6,U+d6d8-d6e3,U+d6e5-d6e7,U+d6e9-d6fb,U+d6fd-d717,U+d719-d71f,U+d721-d722}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.3.woff2) format("woff2-variations");unicode-range:U+d5bc-d5c7,U+d5ca-d5cb,U+d5cd-d5cf,U+d5d1-d5d7,U+d5d9-d5da,U+d5dc,U+d5de-d5e3,U+d5e6-d5e7,U+d5e9-d5eb,U+d5ed-d5f6,U+d5f8,U+d5fa-d5ff,U+d602-d603,U+d605-d607,U+d609-d60f,U+d612-d613,U+d616-d61b,U+d61d-d637,U+d63a-d63b,U+d63d-d63f,U+d641-d647,U+d64a-d64c,U+d64e-d653,U+d656-d657,U+d659-d65b,U+d65d-d666,U+d668,U+d66a-d678}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.4.woff2) format("woff2-variations");unicode-range:U+d507,U+d509-d50b,U+d50d-d513,U+d515-d53b,U+d53e-d53f,U+d541-d543,U+d545-d54c,U+d54e,U+d550,U+d552-d557,U+d55a-d55b,U+d55d-d55f,U+d561-d564,U+d566-d567,U+d56a,U+d56c,U+d56e-d573,U+d576-d577,U+d579-d583,U+d585-d586,U+d58a-d5a4,U+d5a6-d5bb}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.5.woff2) format("woff2-variations");unicode-range:U+d464-d477,U+d47a-d47b,U+d47d-d47f,U+d481-d487,U+d489-d48a,U+d48c,U+d48e-d4e7,U+d4e9-d503,U+d505-d506}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.6.woff2) format("woff2-variations");unicode-range:U+d3bf-d3c7,U+d3ca-d3cf,U+d3d1-d3eb,U+d3ee-d3ef,U+d3f1-d3f3,U+d3f5-d3fb,U+d3fd-d400,U+d402-d45b,U+d45d-d463}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.7.woff2) format("woff2-variations");unicode-range:U+d2ff,U+d302-d304,U+d306-d30b,U+d30f,U+d311-d313,U+d315-d31b,U+d31e,U+d322-d324,U+d326-d327,U+d32a-d32b,U+d32d-d32f,U+d331-d337,U+d339-d33c,U+d33e-d37b,U+d37e-d37f,U+d381-d383,U+d385-d38b,U+d38e-d390,U+d392-d397,U+d39a-d39b,U+d39d-d39f,U+d3a1-d3a7,U+d3a9-d3aa,U+d3ac,U+d3ae-d3b3,U+d3b5-d3b7,U+d3b9-d3bb,U+d3bd-d3be}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.8.woff2) format("woff2-variations");unicode-range:U+d257-d27f,U+d281-d29b,U+d29d-d29f,U+d2a1-d2ab,U+d2ad-d2b7,U+d2ba-d2bb,U+d2bd-d2bf,U+d2c1-d2c7,U+d2c9-d2ef,U+d2f2-d2f3,U+d2f5-d2f7,U+d2f9-d2fe}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.9.woff2) format("woff2-variations");unicode-range:U+d1b4,U+d1b6-d1f3,U+d1f5-d22b,U+d22e-d22f,U+d231-d233,U+d235-d23b,U+d23d-d240,U+d242-d256}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.10.woff2) format("woff2-variations");unicode-range:U+d105-d12f,U+d132-d133,U+d135-d137,U+d139-d13f,U+d141-d142,U+d144,U+d146-d14b,U+d14e-d14f,U+d151-d153,U+d155-d15b,U+d15e-d187,U+d189-d19f,U+d1a2-d1a3,U+d1a5-d1a7,U+d1a9-d1af,U+d1b2-d1b3}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.11.woff2) format("woff2-variations");unicode-range:U+d04b-d04f,U+d051-d057,U+d059-d06b,U+d06d-d06f,U+d071-d073,U+d075-d07b,U+d07e-d0a3,U+d0a6-d0a7,U+d0a9-d0ab,U+d0ad-d0b3,U+d0b6,U+d0b8,U+d0ba-d0bf,U+d0c2-d0c3,U+d0c5-d0c7,U+d0c9-d0cf,U+d0d2,U+d0d6-d0db,U+d0de-d0df,U+d0e1-d0e3,U+d0e5-d0eb,U+d0ee-d0f0,U+d0f2-d104}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.12.woff2) format("woff2-variations");unicode-range:U+cfa2-cfc3,U+cfc5-cfdf,U+cfe2-cfe3,U+cfe5-cfe7,U+cfe9-cff4,U+cff6-cffb,U+cffd-cfff,U+d001-d003,U+d005-d017,U+d019-d033,U+d036-d037,U+d039-d03b,U+d03d-d04a}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.13.woff2) format("woff2-variations");unicode-range:U+cef0-cef3,U+cef6,U+cef9-ceff,U+cf01-cf03,U+cf05-cf07,U+cf09-cf0f,U+cf11-cf12,U+cf14-cf1b,U+cf1d-cf1f,U+cf21-cf2f,U+cf31-cf53,U+cf56-cf57,U+cf59-cf5b,U+cf5d-cf63,U+cf66,U+cf68,U+cf6a-cf6f,U+cf71-cf84,U+cf86-cf8b,U+cf8d-cfa1}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.14.woff2) format("woff2-variations");unicode-range:U+ce3c-ce57,U+ce5a-ce5b,U+ce5d-ce5f,U+ce61-ce67,U+ce6a,U+ce6c,U+ce6e-ce73,U+ce76-ce77,U+ce79-ce7b,U+ce7d-ce83,U+ce85-ce88,U+ce8a-ce8f,U+ce91-ce93,U+ce95-ce97,U+ce99-ce9f,U+cea2,U+cea4-ceab,U+cead-cee3,U+cee6-cee7,U+cee9-ceeb,U+ceed-ceef}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.15.woff2) format("woff2-variations");unicode-range:U+cd92-cd93,U+cd96-cd97,U+cd99-cd9b,U+cd9d-cda3,U+cda6-cda8,U+cdaa-cdaf,U+cdb1-cdc3,U+cdc5-cdcb,U+cdcd-cde7,U+cde9-ce03,U+ce05-ce1f,U+ce22-ce34,U+ce36-ce3b}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.16.woff2) format("woff2-variations");unicode-range:U+ccef-cd07,U+cd0a-cd0b,U+cd0d-cd1a,U+cd1c,U+cd1e-cd2b,U+cd2d-cd5b,U+cd5d-cd77,U+cd79-cd91}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.17.woff2) format("woff2-variations");unicode-range:U+cc3f-cc43,U+cc46-cc47,U+cc49-cc4b,U+cc4d-cc53,U+cc55-cc58,U+cc5a-cc5f,U+cc61-cc97,U+cc9a-cc9b,U+cc9d-cc9f,U+cca1-cca7,U+ccaa,U+ccac,U+ccae-ccb3,U+ccb6-ccb7,U+ccb9-ccbb,U+ccbd-cccf,U+ccd1-cce3,U+cce5-ccee}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.18.woff2) format("woff2-variations");unicode-range:U+cb91-cbd3,U+cbd5-cbe3,U+cbe5-cc0b,U+cc0e-cc0f,U+cc11-cc13,U+cc15-cc1b,U+cc1d-cc20,U+cc23-cc27,U+cc2a-cc2b,U+cc2d,U+cc2f,U+cc31-cc37,U+cc3a,U+cc3c}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.19.woff2) format("woff2-variations");unicode-range:U+caf4-cb47,U+cb4a-cb90}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.20.woff2) format("woff2-variations");unicode-range:U+ca4a-ca4b,U+ca4e-ca4f,U+ca51-ca53,U+ca55-ca5b,U+ca5d-ca60,U+ca62-ca83,U+ca85-cabb,U+cabe-cabf,U+cac1-cac3,U+cac5-cacb,U+cacd-cad0,U+cad2,U+cad4-cad8,U+cada-caf3}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.21.woff2) format("woff2-variations");unicode-range:U+c996-c997,U+c99a-c99c,U+c99e-c9bf,U+c9c2-c9c3,U+c9c5-c9c7,U+c9c9-c9cf,U+c9d2,U+c9d4,U+c9d7-c9d8,U+c9db,U+c9de-c9df,U+c9e1-c9e3,U+c9e5-c9e6,U+c9e8-c9eb,U+c9ee-c9f0,U+c9f2-c9f7,U+c9f9-ca0b,U+ca0d-ca28,U+ca2a-ca49}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.22.woff2) format("woff2-variations");unicode-range:U+c8e9-c8f4,U+c8f6-c8fb,U+c8fe-c8ff,U+c901-c903,U+c905-c90b,U+c90e-c910,U+c912-c917,U+c919-c92b,U+c92d-c94f,U+c951-c953,U+c955-c96b,U+c96d-c973,U+c975-c987,U+c98a-c98b,U+c98d-c98f,U+c991-c995}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.23.woff2) format("woff2-variations");unicode-range:U+c841-c84b,U+c84d-c86f,U+c872-c873,U+c875-c877,U+c879-c87f,U+c882-c884,U+c887-c88a,U+c88d-c8c3,U+c8c5-c8df,U+c8e1-c8e8}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.24.woff2) format("woff2-variations");unicode-range:U+c779-c77b,U+c77e-c782,U+c786,U+c78b,U+c78d,U+c78f,U+c792-c793,U+c795,U+c797,U+c799-c79f,U+c7a2,U+c7a7-c7ab,U+c7ae-c7bb,U+c7bd-c7c0,U+c7c2-c7c7,U+c7c9-c7dc,U+c7de-c7ff,U+c802-c803,U+c805-c807,U+c809,U+c80b-c80f,U+c812,U+c814,U+c817-c81b,U+c81e-c81f,U+c821-c823,U+c825-c82e,U+c830-c837,U+c839-c83b,U+c83d-c840}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.25.woff2) format("woff2-variations");unicode-range:U+c6bb-c6bf,U+c6c2,U+c6c4,U+c6c6-c6cb,U+c6ce-c6cf,U+c6d1-c6d3,U+c6d5-c6db,U+c6dd-c6df,U+c6e1-c6e7,U+c6e9-c6eb,U+c6ed-c6ef,U+c6f1-c6f8,U+c6fa-c703,U+c705-c707,U+c709-c70b,U+c70d-c716,U+c718,U+c71a-c71f,U+c722-c723,U+c725-c727,U+c729-c734,U+c736-c73b,U+c73e-c73f,U+c741-c743,U+c745-c74b,U+c74e-c750,U+c752-c757,U+c759-c773,U+c776-c777}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.26.woff2) format("woff2-variations");unicode-range:U+c5f5-c5fb,U+c5fe,U+c602-c605,U+c607,U+c609-c60f,U+c611-c61a,U+c61c-c623,U+c626-c627,U+c629-c62b,U+c62d,U+c62f-c632,U+c636,U+c638,U+c63a-c63f,U+c642-c643,U+c645-c647,U+c649-c652,U+c656-c65b,U+c65d-c65f,U+c661-c663,U+c665-c677,U+c679-c67b,U+c67d-c693,U+c696-c697,U+c699-c69b,U+c69d-c6a3,U+c6a6,U+c6a8,U+c6aa-c6af,U+c6b2-c6b3,U+c6b5-c6b7,U+c6b9-c6ba}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.27.woff2) format("woff2-variations");unicode-range:U+c517-c527,U+c52a-c52b,U+c52d-c52f,U+c531-c538,U+c53a,U+c53c,U+c53e-c543,U+c546-c547,U+c54b,U+c54d-c552,U+c556,U+c55a-c55b,U+c55d,U+c55f,U+c562-c563,U+c565-c567,U+c569-c56f,U+c572,U+c574,U+c576-c57b,U+c57e-c57f,U+c581-c583,U+c585-c586,U+c588-c58b,U+c58e,U+c590,U+c592-c596,U+c599-c5b3,U+c5b6-c5b7,U+c5ba,U+c5be-c5c3,U+c5ca-c5cb,U+c5cd,U+c5cf,U+c5d2-c5d3,U+c5d5-c5d7,U+c5d9-c5df,U+c5e1-c5e2,U+c5e4,U+c5e6-c5eb,U+c5ef,U+c5f1-c5f3}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.28.woff2) format("woff2-variations");unicode-range:U+c475-c4ef,U+c4f2-c4f3,U+c4f5-c4f7,U+c4f9-c4ff,U+c502-c50b,U+c50d-c516}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.29.woff2) format("woff2-variations");unicode-range:U+c3d0-c3d7,U+c3da-c3db,U+c3dd-c3de,U+c3e1-c3ec,U+c3ee-c3f3,U+c3f5-c42b,U+c42d-c463,U+c466-c474}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.30.woff2) format("woff2-variations");unicode-range:U+c32b-c367,U+c36a-c36b,U+c36d-c36f,U+c371-c377,U+c37a-c37b,U+c37e-c383,U+c385-c387,U+c389-c3cf}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.31.woff2) format("woff2-variations");unicode-range:U+c26a-c26b,U+c26d-c26f,U+c271-c273,U+c275-c27b,U+c27e-c287,U+c289-c28f,U+c291-c297,U+c299-c29a,U+c29c-c2a3,U+c2a5-c2a7,U+c2a9-c2ab,U+c2ad-c2b3,U+c2b6,U+c2b8,U+c2ba-c2bb,U+c2bd-c2db,U+c2de-c2df,U+c2e1-c2e2,U+c2e5-c2ea,U+c2ee,U+c2f0,U+c2f2-c2f5,U+c2f7,U+c2fa-c2fb,U+c2fd-c2ff,U+c301-c307,U+c309-c30c,U+c30e-c312,U+c315-c323,U+c325-c328,U+c32a}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.32.woff2) format("woff2-variations");unicode-range:U+c1bc-c1c3,U+c1c5-c1df,U+c1e1-c1fb,U+c1fd-c203,U+c205-c20c,U+c20e,U+c210-c217,U+c21a-c21b,U+c21d-c21e,U+c221-c227,U+c229-c22a,U+c22c,U+c22e,U+c230,U+c233-c24f,U+c251-c257,U+c259-c269}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.33.woff2) format("woff2-variations");unicode-range:U+c101-c11b,U+c11f,U+c121-c123,U+c125-c12b,U+c12e,U+c132-c137,U+c13a-c13b,U+c13d-c13f,U+c141-c147,U+c14a,U+c14c-c153,U+c155-c157,U+c159-c15b,U+c15d-c166,U+c169-c16f,U+c171-c177,U+c179-c18b,U+c18e-c18f,U+c191-c193,U+c195-c19b,U+c19d-c19e,U+c1a0,U+c1a2-c1a4,U+c1a6-c1bb}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.34.woff2) format("woff2-variations");unicode-range:U+c049-c057,U+c059-c05b,U+c05d-c05f,U+c061-c067,U+c069-c08f,U+c091-c0ab,U+c0ae-c0af,U+c0b1-c0b3,U+c0b5,U+c0b7-c0bb,U+c0be,U+c0c2-c0c7,U+c0ca-c0cb,U+c0cd-c0cf,U+c0d1-c0d7,U+c0d9-c0da,U+c0dc,U+c0de-c0e3,U+c0e5-c0eb,U+c0ed-c0f3,U+c0f6,U+c0f8,U+c0fa-c0ff}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.35.woff2) format("woff2-variations");unicode-range:U+bfa7-bfaf,U+bfb1-bfc4,U+bfc6-bfcb,U+bfce-bfcf,U+bfd1-bfd3,U+bfd5-bfdb,U+bfdd-c048}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.36.woff2) format("woff2-variations");unicode-range:U+bf07,U+bf09-bf3f,U+bf41-bf4f,U+bf52-bf54,U+bf56-bfa6}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.37.woff2) format("woff2-variations");unicode-range:U+be56,U+be58,U+be5c-be5f,U+be62-be63,U+be65-be67,U+be69-be74,U+be76-be7b,U+be7e-be7f,U+be81-be8e,U+be90,U+be92-bea7,U+bea9-becf,U+bed2-bed3,U+bed5-bed6,U+bed9-bee3,U+bee6-bf06}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.38.woff2) format("woff2-variations");unicode-range:U+bdb0-bdd3,U+bdd5-bdef,U+bdf1-be0b,U+be0d-be0f,U+be11-be13,U+be15-be43,U+be46-be47,U+be49-be4b,U+be4d-be53}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.39.woff2) format("woff2-variations");unicode-range:U+bd03,U+bd06,U+bd08,U+bd0a-bd0f,U+bd11-bd22,U+bd25-bd47,U+bd49-bd58,U+bd5a-bd7f,U+bd82-bd83,U+bd85-bd87,U+bd8a-bd8f,U+bd91-bd92,U+bd94,U+bd96-bd98,U+bd9a-bdaf}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.40.woff2) format("woff2-variations");unicode-range:U+bc4e-bc83,U+bc86-bc87,U+bc89-bc8b,U+bc8d-bc93,U+bc96,U+bc98,U+bc9b-bc9f,U+bca2-bca3,U+bca5-bca7,U+bca9-bcb2,U+bcb4-bcbb,U+bcbe-bcbf,U+bcc1-bcc3,U+bcc5-bccc,U+bcce-bcd0,U+bcd2-bcd4,U+bcd6-bcf3,U+bcf7,U+bcf9-bcfb,U+bcfd-bd02}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.41.woff2) format("woff2-variations");unicode-range:U+bb90-bba3,U+bba5-bbab,U+bbad-bbbf,U+bbc1-bbf7,U+bbfa-bbfb,U+bbfd-bbfe,U+bc01-bc07,U+bc09-bc0a,U+bc0e,U+bc10,U+bc12-bc13,U+bc17,U+bc19-bc1a,U+bc1e,U+bc20-bc23,U+bc26,U+bc28,U+bc2a-bc2c,U+bc2e-bc2f,U+bc32-bc33,U+bc35-bc37,U+bc39-bc3f,U+bc41-bc42,U+bc44,U+bc46-bc48,U+bc4a-bc4d}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.42.woff2) format("woff2-variations");unicode-range:U+bae6-bafb,U+bafd-bb17,U+bb19-bb33,U+bb37,U+bb39-bb3a,U+bb3d-bb43,U+bb45-bb46,U+bb48,U+bb4a-bb4f,U+bb51-bb53,U+bb55-bb57,U+bb59-bb62,U+bb64-bb8f}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.43.woff2) format("woff2-variations");unicode-range:U+ba30-ba37,U+ba3a-ba3b,U+ba3d-ba3f,U+ba41-ba47,U+ba49-ba4a,U+ba4c,U+ba4e-ba53,U+ba56-ba57,U+ba59-ba5b,U+ba5d-ba63,U+ba65-ba66,U+ba68-ba6f,U+ba71-ba73,U+ba75-ba77,U+ba79-ba84,U+ba86,U+ba88-baa7,U+baaa,U+baad-baaf,U+bab1-bab7,U+baba,U+babc,U+babe-bae5}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.44.woff2) format("woff2-variations");unicode-range:U+b96e-b973,U+b976-b977,U+b979-b97b,U+b97d-b983,U+b986,U+b988,U+b98a-b98d,U+b98f-b9ab,U+b9ae-b9af,U+b9b1-b9b3,U+b9b5-b9bb,U+b9be,U+b9c0,U+b9c2-b9c7,U+b9ca-b9cb,U+b9cd,U+b9d2-b9d7,U+b9da,U+b9dc,U+b9df-b9e0,U+b9e2,U+b9e6-b9e7,U+b9e9-b9f3,U+b9f6,U+b9f8,U+b9fb-ba2f}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.45.woff2) format("woff2-variations");unicode-range:U+b8bf-b8cb,U+b8cd-b8e0,U+b8e2-b8e7,U+b8ea-b8eb,U+b8ed-b8ef,U+b8f1-b8f7,U+b8fa,U+b8fc,U+b8fe-b903,U+b905-b917,U+b919-b91f,U+b921-b93b,U+b93d-b957,U+b95a-b95b,U+b95d-b95f,U+b961-b967,U+b969-b96c}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.46.woff2) format("woff2-variations");unicode-range:U+b80d-b80f,U+b811-b817,U+b81a,U+b81c-b823,U+b826-b827,U+b829-b82b,U+b82d-b833,U+b836,U+b83a-b83f,U+b841-b85b,U+b85e-b85f,U+b861-b863,U+b865-b86b,U+b86e,U+b870,U+b872-b8af,U+b8b1-b8be}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.47.woff2) format("woff2-variations");unicode-range:U+b74d-b75f,U+b761-b763,U+b765-b774,U+b776-b77b,U+b77e-b77f,U+b781-b783,U+b785-b78b,U+b78e,U+b792-b796,U+b79a-b79b,U+b79d-b7a7,U+b7aa,U+b7ae-b7b3,U+b7b6-b7c8,U+b7ca-b7eb,U+b7ee-b7ef,U+b7f1-b7f3,U+b7f5-b7fb,U+b7fe,U+b802-b806,U+b80a-b80b}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.48.woff2) format("woff2-variations");unicode-range:U+b6a7-b6aa,U+b6ac-b6b0,U+b6b2-b6ef,U+b6f1-b727,U+b72a-b72b,U+b72d-b72e,U+b731-b737,U+b739-b73a,U+b73c-b743,U+b745-b74c}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.49.woff2) format("woff2-variations");unicode-range:U+b605-b60f,U+b612-b617,U+b619-b624,U+b626-b69b,U+b69e-b6a3,U+b6a5-b6a6}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.50.woff2) format("woff2-variations");unicode-range:U+b55f,U+b562-b583,U+b585-b59f,U+b5a2-b5a3,U+b5a5-b5a7,U+b5a9-b5b2,U+b5b5-b5ba,U+b5bd-b604}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.51.woff2) format("woff2-variations");unicode-range:U+b4a5-b4b6,U+b4b8-b4bf,U+b4c1-b4c7,U+b4c9-b4db,U+b4de-b4df,U+b4e1-b4e2,U+b4e5-b4eb,U+b4ee,U+b4f0,U+b4f2-b513,U+b516-b517,U+b519-b51a,U+b51d-b523,U+b526,U+b528,U+b52b-b52f,U+b532-b533,U+b535-b537,U+b539-b53f,U+b541-b544,U+b546-b54b,U+b54d-b54f,U+b551-b55b,U+b55d-b55e}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.52.woff2) format("woff2-variations");unicode-range:U+b3f8-b3fb,U+b3fd-b40f,U+b411-b417,U+b419-b41b,U+b41d-b41f,U+b421-b427,U+b42a-b42b,U+b42d-b44f,U+b452-b453,U+b455-b457,U+b459-b45f,U+b462-b464,U+b466-b46b,U+b46d-b47f,U+b481-b4a3}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.53.woff2) format("woff2-variations");unicode-range:U+b342-b353,U+b356-b357,U+b359-b35b,U+b35d-b35e,U+b360-b363,U+b366,U+b368,U+b36a-b36d,U+b36f,U+b372-b373,U+b375-b377,U+b379-b37f,U+b381-b382,U+b384,U+b386-b38b,U+b38d-b3c3,U+b3c6-b3c7,U+b3c9-b3ca,U+b3cd-b3d3,U+b3d6,U+b3d8,U+b3da-b3f7}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.54.woff2) format("woff2-variations");unicode-range:U+b27c-b283,U+b285-b28f,U+b292-b293,U+b295-b297,U+b29a-b29f,U+b2a1-b2a4,U+b2a7-b2a9,U+b2ab,U+b2ad-b2c7,U+b2ca-b2cb,U+b2cd-b2cf,U+b2d1-b2d7,U+b2da,U+b2dc,U+b2de-b2e3,U+b2e7,U+b2e9-b2ea,U+b2ef-b2f3,U+b2f6,U+b2f8,U+b2fa-b2fb,U+b2fd-b2fe,U+b302-b303,U+b305-b307,U+b309-b30f,U+b312,U+b316-b31b,U+b31d-b341}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.55.woff2) format("woff2-variations");unicode-range:U+b1d6-b1e7,U+b1e9-b1fc,U+b1fe-b203,U+b206-b207,U+b209-b20b,U+b20d-b213,U+b216-b21f,U+b221-b257,U+b259-b273,U+b275-b27b}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.56.woff2) format("woff2-variations");unicode-range:U+b120-b122,U+b126-b127,U+b129-b12b,U+b12d-b133,U+b136,U+b138,U+b13a-b13f,U+b142-b143,U+b145-b14f,U+b151-b153,U+b156-b157,U+b159-b177,U+b17a-b17b,U+b17d-b17f,U+b181-b187,U+b189-b18c,U+b18e-b191,U+b195-b1a7,U+b1a9-b1cb,U+b1cd-b1d5}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.57.woff2) format("woff2-variations");unicode-range:U+b05f-b07b,U+b07e-b07f,U+b081-b083,U+b085-b08b,U+b08d-b097,U+b09b,U+b09d-b09f,U+b0a2-b0a7,U+b0aa,U+b0b0,U+b0b2,U+b0b6-b0b7,U+b0b9-b0bb,U+b0bd-b0c3,U+b0c6-b0c7,U+b0ca-b0cf,U+b0d1-b0df,U+b0e1-b0e4,U+b0e6-b107,U+b10a-b10b,U+b10d-b10f,U+b111-b112,U+b114-b117,U+b119-b11a,U+b11c-b11f}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.58.woff2) format("woff2-variations");unicode-range:U+afac-afb7,U+afba-afbb,U+afbd-afbf,U+afc1-afc6,U+afca-afcc,U+afce-afd3,U+afd5-afe7,U+afe9-afef,U+aff1-b00b,U+b00d-b00f,U+b011-b013,U+b015-b01b,U+b01d-b027,U+b029-b043,U+b045-b047,U+b049,U+b04b,U+b04d-b052,U+b055-b056,U+b058-b05c,U+b05e}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.59.woff2) format("woff2-variations");unicode-range:U+af03-af07,U+af09-af2b,U+af2e-af33,U+af35-af3b,U+af3e-af40,U+af44-af47,U+af4a-af5c,U+af5e-af63,U+af65-af7f,U+af81-afab}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.60.woff2) format("woff2-variations");unicode-range:U+ae56-ae5b,U+ae5e-ae60,U+ae62-ae64,U+ae66-ae67,U+ae69-ae6b,U+ae6d-ae83,U+ae85-aebb,U+aebf,U+aec1-aec3,U+aec5-aecb,U+aece,U+aed0,U+aed2-aed7,U+aed9-aef3,U+aef5-af02}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.61.woff2) format("woff2-variations");unicode-range:U+ad9c-ada3,U+ada5-adbf,U+adc1-adc3,U+adc5-adc7,U+adc9-add2,U+add4-addb,U+addd-addf,U+ade1-ade3,U+ade5-adf7,U+adfa-adfb,U+adfd-adff,U+ae02-ae07,U+ae0a,U+ae0c,U+ae0e-ae13,U+ae15-ae2f,U+ae31-ae33,U+ae35-ae37,U+ae39-ae3f,U+ae42,U+ae44,U+ae46-ae49,U+ae4b,U+ae4f,U+ae51-ae53,U+ae55}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.62.woff2) format("woff2-variations");unicode-range:U+ace2-ace3,U+ace5-ace6,U+ace9-acef,U+acf2,U+acf4,U+acf7-acfb,U+acfe-acff,U+ad01-ad03,U+ad05-ad0b,U+ad0d-ad10,U+ad12-ad1b,U+ad1d-ad33,U+ad35-ad48,U+ad4a-ad4f,U+ad51-ad6b,U+ad6e-ad6f,U+ad71-ad72,U+ad77-ad7c,U+ad7e,U+ad80,U+ad82-ad87,U+ad89-ad8b,U+ad8d-ad8f,U+ad91-ad9b}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.63.woff2) format("woff2-variations");unicode-range:U+ac25-ac2c,U+ac2e,U+ac30,U+ac32-ac37,U+ac39-ac3f,U+ac41-ac4c,U+ac4e-ac6f,U+ac72-ac73,U+ac75-ac76,U+ac79-ac7f,U+ac82,U+ac84-ac88,U+ac8a-ac8b,U+ac8d-ac8f,U+ac91-ac93,U+ac95-ac9b,U+ac9d-ac9e,U+aca1-aca7,U+acab,U+acad-acaf,U+acb1-acb7,U+acba-acbb,U+acbe-acc0,U+acc2-acc3,U+acc5-acdf}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.64.woff2) format("woff2-variations");unicode-range:U+99df,U+99ed,U+99f1,U+99ff,U+9a01,U+9a08,U+9a0e-9a0f,U+9a19,U+9a2b,U+9a30,U+9a36-9a37,U+9a40,U+9a43,U+9a45,U+9a4d,U+9a55,U+9a57,U+9a5a-9a5b,U+9a5f,U+9a62,U+9a65,U+9a69-9a6a,U+9aa8,U+9ab8,U+9ad3,U+9ae5,U+9aee,U+9b1a,U+9b27,U+9b2a,U+9b31,U+9b3c,U+9b41-9b45,U+9b4f,U+9b54,U+9b5a,U+9b6f,U+9b8e,U+9b91,U+9b9f,U+9bab,U+9bae,U+9bc9,U+9bd6,U+9be4,U+9be8,U+9c0d,U+9c10,U+9c12,U+9c15,U+9c25,U+9c32,U+9c3b,U+9c47,U+9c49,U+9c57,U+9ce5,U+9ce7,U+9ce9,U+9cf3-9cf4,U+9cf6,U+9d09,U+9d1b,U+9d26,U+9d28,U+9d3b,U+9d51,U+9d5d,U+9d60-9d61,U+9d6c,U+9d72,U+9da9,U+9daf,U+9db4,U+9dc4,U+9dd7,U+9df2,U+9df8-9dfa,U+9e1a,U+9e1e,U+9e75,U+9e79,U+9e7d,U+9e7f,U+9e92-9e93,U+9e97,U+9e9d,U+9e9f,U+9ea5,U+9eb4-9eb5,U+9ebb,U+9ebe,U+9ec3,U+9ecd-9ece,U+9ed4,U+9ed8,U+9edb-9edc,U+9ede,U+9ee8,U+9ef4,U+9f07-9f08,U+9f0e,U+9f13,U+9f20,U+9f3b,U+9f4a-9f4b,U+9f4e,U+9f52,U+9f5f,U+9f61,U+9f67,U+9f6a,U+9f6c,U+9f77,U+9f8d,U+9f90,U+9f95,U+9f9c,U+ac02-ac03,U+ac05-ac06,U+ac09-ac0f,U+ac17-ac18,U+ac1b,U+ac1e-ac1f,U+ac21-ac23}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.65.woff2) format("woff2-variations");unicode-range:U+338c-339c,U+339f-33a0,U+33a2-33cb,U+33cf-33d0,U+33d3,U+33d6,U+33d8,U+33db-33dd,U+4e01,U+4e03,U+4e07-4e08,U+4e11,U+4e14-4e15,U+4e18-4e19,U+4e1e,U+4e32,U+4e38-4e39,U+4e42-4e43,U+4e45,U+4e4d-4e4f,U+4e56,U+4e58-4e59,U+4e5d-4e5e,U+4e6b,U+4e6d,U+4e73,U+4e76-4e77,U+4e7e,U+4e82,U+4e86,U+4e88,U+4e8e,U+4e90-4e92,U+4e94-4e95,U+4e98,U+4e9b,U+4e9e,U+4ea1-4ea2,U+4ea4-4ea6,U+4ea8,U+4eab,U+4ead-4eae,U+4eb6,U+4ec0-4ec1,U+4ec4,U+4ec7,U+4ecb,U+4ecd,U+4ed4-4ed5,U+4ed7-4ed9,U+4edd,U+4edf,U+4ee4,U+4ef0,U+4ef2,U+4ef6-4ef7,U+4efb,U+4f01,U+4f09,U+4f0b,U+4f0d-4f11,U+4f2f,U+4f34,U+4f36,U+4f38,U+4f3a,U+4f3c-4f3d}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.66.woff2) format("woff2-variations");unicode-range:U+3136,U+3138,U+313a-3140,U+3143-3144,U+3150,U+3152,U+3154-3156,U+3158-315b,U+315d-315f,U+3162,U+3164-318c,U+318e,U+3200-321b,U+3231,U+3239,U+3251-325a,U+3260-327b,U+327e-327f,U+328a-3290,U+3294,U+329e,U+32a5,U+3380-3384,U+3388-338b}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.67.woff2) format("woff2-variations");unicode-range:U+2f7d,U+2f7f-2f8b,U+2f8e-2f90,U+2f92-2f97,U+2f99-2fa0,U+2fa2-2fa3,U+2fa5-2fa9,U+2fac-2fb1,U+2fb3-2fbc,U+2fc1-2fca,U+2fcd-2fd4,U+3003,U+3012-3019,U+301c,U+301e-3020,U+3036,U+3041,U+3043,U+3045,U+3047,U+3049,U+304e,U+3050,U+3052,U+3056,U+305a,U+305c,U+305e,U+3062,U+3065,U+306c,U+3070-307d,U+3080,U+3085,U+3087,U+308e,U+3090-3091,U+30a1,U+30a5,U+30a9,U+30ae,U+30b1-30b2,U+30b4,U+30b6,U+30bc-30be,U+30c2,U+30c5,U+30cc,U+30d2,U+30d4,U+30d8-30dd,U+30e4,U+30e6,U+30e8,U+30ee,U+30f0-30f2,U+30f4-30f6,U+3133,U+3135}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.68.woff2) format("woff2-variations");unicode-range:U+2541-254b,U+25a4-25a9,U+25b1,U+25b5,U+25b9,U+25bf,U+25c1,U+25c3,U+25c9-25ca,U+25cc,U+25ce,U+25d0-25d1,U+25e6,U+25ef,U+260f,U+261d,U+261f,U+262f,U+2660,U+2664,U+2667-2669,U+266d,U+266f,U+2716,U+271a,U+273d,U+2756,U+2776-277f,U+278a-2793,U+2963,U+2965,U+2ac5-2ac6,U+2acb-2acc,U+2f00,U+2f04,U+2f06,U+2f08,U+2f0a-2f0b,U+2f11-2f12,U+2f14,U+2f17-2f18,U+2f1c-2f1d,U+2f1f-2f20,U+2f23-2f26,U+2f28-2f29,U+2f2b,U+2f2d,U+2f2f-2f32,U+2f38,U+2f3c-2f40,U+2f42-2f4c,U+2f4f-2f52,U+2f54-2f58,U+2f5a-2f66,U+2f69-2f70,U+2f72-2f76,U+2f78,U+2f7a-2f7c}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.69.woff2) format("woff2-variations");unicode-range:U+2479-2487,U+249c-24d1,U+24d3-24d7,U+24d9-24e9,U+24eb-24f4,U+2500-2501,U+2503,U+250c-2513,U+2515-2516,U+2518-2540}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.70.woff2) format("woff2-variations");unicode-range:U+215b-215e,U+2162-2169,U+2170-2179,U+2195-2199,U+21b0-21b4,U+21bc,U+21c0,U+21c4-21c5,U+21cd,U+21cf-21d4,U+21e0-21e3,U+21e6-21e9,U+2200,U+2202-2203,U+2206-2209,U+220b-220c,U+220f,U+2211,U+2213,U+221a,U+221d-2220,U+2222,U+2225-2227,U+2229-222c,U+222e,U+2234-2237,U+223d,U+2243,U+2245,U+2248,U+2250-2253,U+225a,U+2260-2262,U+2264-2267,U+226a-226b,U+226e-2273,U+2276-2277,U+2279-227b,U+2280-2287,U+228a-228b,U+2295-2297,U+22a3-22a5,U+22bb-22bc,U+22ce-22cf,U+22da-22db,U+22ee-22ef,U+2306,U+2312,U+2314,U+2467-2478}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.71.woff2) format("woff2-variations");unicode-range:U+81-82,U+84,U+a2-a5,U+a7-a8,U+aa,U+ac,U+b1-b3,U+b6,U+b8-ba,U+bc-be,U+c0,U+c2,U+c6-cb,U+ce-d0,U+d4,U+d8-d9,U+db-dc,U+de-df,U+e6,U+eb,U+ee-f0,U+f4,U+f7-f9,U+fb,U+fe-ff,U+111,U+126-127,U+132-133,U+138,U+13f-142,U+149-14b,U+152-153,U+166-167,U+2bc,U+2c7,U+2d0,U+2d8-2d9,U+2db-2dd,U+391-394,U+396-3a1,U+3a3-3a9,U+3b2-3b6,U+3b8,U+3bc,U+3be-3c1,U+3c3-3c9,U+2010,U+2015-2016,U+2018-2019,U+201b,U+201f-2021,U+2025,U+2030,U+2033-2036,U+203c,U+203e,U+2042,U+2074,U+207a-207f,U+2081-2084,U+2109,U+2113,U+2116,U+2121,U+2126,U+212b,U+2153-2154}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.72.woff2) format("woff2-variations");unicode-range:U+e8,U+2da,U+2160,U+2194,U+3054,U+3058,U+306d,U+3086,U+308d,U+30ac,U+30bb,U+30c4,U+30cd-30ce,U+30e2,U+3132,U+3146,U+3149,U+339d,U+4e3b,U+4f0a,U+4fdd,U+4fe1,U+5409,U+540c,U+5834,U+592a-592b,U+5b9a,U+5dde,U+5e0c,U+5e73,U+5f0f,U+60f3,U+653f,U+661f,U+662f,U+667a,U+683c,U+6b4c,U+6c11,U+767c,U+76ee,U+76f4,U+77f3,U+79d1,U+7a7a,U+7b2c,U+7d22,U+8207,U+8a00,U+8a71,U+9280,U+9580,U+958b,U+96c6,U+9762,U+98df,U+9ed1,U+ac2d,U+adc8,U+add3,U+af48,U+b014,U+b134-b135,U+b158,U+b2aa,U+b35f,U+b6a4,U+b9cf,U+bb63,U+bd23,U+be91,U+c29b,U+c3f4,U+c42c,U+c55c,U+c573,U+c58f,U+c78c,U+c7dd,U+c8f5,U+cad1,U+cc48,U+cf10,U+cf20,U+d03c,U+d07d,U+d2a0,U+d30e,U+d38d,U+d3a8,U+d3c8,U+d5e5,U+d5f9,U+d6e4,U+f90a,U+ff02,U+ff1c}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.73.woff2) format("woff2-variations");unicode-range:U+3b1,U+2466,U+25a1,U+25a3,U+261c,U+3008-3009,U+305b,U+305d,U+3069,U+30a7,U+30ba,U+30cf,U+30ef,U+3151,U+3157,U+4e4b,U+4e5f,U+4e8c,U+4eca,U+4ed6,U+4f5b,U+50cf,U+5149,U+5165,U+5171,U+5229,U+529b,U+5316,U+539f,U+53f2,U+571f,U+5728,U+58eb,U+591c,U+5b78,U+5c11,U+5c55,U+5ddd,U+5e02,U+5fb7,U+60c5,U+610f,U+611f,U+6625,U+66f8,U+6797,U+679c,U+682a,U+6d2a,U+706b,U+7406,U+767b,U+76f8,U+77e5,U+7acb,U+898b,U+8a69,U+8def,U+8fd1,U+901a,U+90e8,U+91cd,U+975e,U+ae14,U+ae6c,U+aec0,U+afc7,U+afc9,U+b01c,U+b028,U+b308,U+b311,U+b314,U+b31c,U+b524,U+b560,U+b764,U+b920,U+b9e3,U+bd48,U+be7d,U+c0db,U+c231,U+c270,U+c2e3,U+c37d,U+c3ed,U+c530,U+c6a5,U+c6dc,U+c7a4,U+c954,U+c974,U+d000,U+d565,U+d667,U+d6c5,U+d79d,U+ff1e}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.74.woff2) format("woff2-variations");unicode-range:U+131,U+2032,U+2465,U+2642,U+3048,U+3051,U+3083-3084,U+308f,U+30c0,U+30d1,U+30d3,U+30d6,U+30df,U+30e7,U+3153,U+4e16,U+4e8b,U+4ee5,U+5206,U+52a0,U+52d5,U+53e4,U+53ef,U+54c1,U+57ce,U+597d,U+5b8c,U+5ea6,U+5f8c,U+5f97,U+6210,U+6240,U+624b,U+6728,U+6bd4,U+7236,U+7269,U+7279,U+738b,U+7528,U+7530,U+767e,U+798f,U+8005,U+8a18,U+90fd,U+91cc,U+9577,U+9593,U+98a8,U+ac20,U+acf6,U+ad90,U+af5d,U+af80,U+afcd,U+aff0,U+b0a1,U+b0b5,U+b1fd,U+b2fc,U+b380,U+b51b,U+b584,U+b5b3,U+b8fd,U+b93c,U+b9f4,U+bb44,U+bc08,U+bc27,U+bc49,U+be55,U+be64,U+bfb0,U+bfc5,U+c178,U+c21f,U+c314,U+c4f1,U+c58d,U+c664,U+c698,U+c6a7,U+c6c1,U+c9ed,U+cac0,U+cacc,U+cad9,U+ccb5,U+cdcc,U+d0e4,U+d143,U+d320,U+d330,U+d54d,U+ff06,U+ff1f,U+ff5e}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.75.woff2) format("woff2-variations");unicode-range:U+b4,U+20a9,U+20ac,U+2190,U+24d8,U+2502,U+2514,U+2592,U+25c7-25c8,U+2663,U+3060,U+3064,U+3081,U+3088,U+30a3,U+30a6,U+30aa,U+30b5,U+30c7,U+30ca-30cb,U+30d0,U+30e3,U+30e5,U+339e,U+4e09,U+4eac,U+4f5c,U+5167-5168,U+516c,U+51fa,U+5408,U+540d,U+591a,U+5b57,U+6211,U+65b9,U+660e,U+6642,U+6700,U+6b63,U+6e2f,U+7063,U+7532,U+793e,U+81ea,U+8272,U+82b1,U+897f,U+8eca,U+91ce,U+ac38,U+ad76,U+ae84,U+aecc,U+b07d,U+b0b1,U+b215,U+b2a0,U+b310,U+b3d7,U+b52a,U+b618,U+b775,U+b797,U+bcd5,U+bd59,U+be80,U+bea8,U+bed1,U+bee4-bee5,U+c060,U+c2ef,U+c329,U+c3dc,U+c597,U+c5bd,U+c5e5,U+c69c,U+c9d6,U+ca29,U+ca5c,U+ca84,U+cc39,U+cc3b,U+ce89,U+cee5,U+cf65,U+cf85,U+d058,U+d145,U+d22d,U+d325,U+d37d,U+d3ad,U+d769,U+ff0c}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.76.woff2) format("woff2-variations");unicode-range:U+2161,U+2228,U+2299,U+2464,U+2517,U+2640,U+3042,U+304a,U+3053,U+3061,U+307f,U+3082,U+308c,U+3092,U+30a8,U+30ab,U+30ad,U+30b0,U+30b3,U+30b7,U+30c1,U+30c6,U+30c9,U+30d5,U+30d7,U+30de,U+30e0-30e1,U+30ec-30ed,U+4e0b,U+4e0d,U+4ee3,U+53f0,U+548c,U+5b89,U+5bb6,U+5c0f,U+611b,U+6771,U+6aa2,U+6bcd,U+6c34,U+6cd5,U+6d77,U+767d,U+795e,U+8ecd,U+9999,U+9ad8,U+ac07,U+ac1a,U+ac40,U+ad0c,U+ad88,U+ada4,U+ae01,U+ae65,U+aebd,U+aec4,U+afe8,U+b139,U+b205,U+b383,U+b38c,U+b42c,U+b461,U+b55c,U+b78f,U+b8fb,U+b9f7,U+bafc,U+bc99,U+bed8,U+bfcd,U+c0bf,U+c0f9,U+c167,U+c204,U+c20f,U+c22f,U+c258,U+c298,U+c2bc,U+c388,U+c501,U+c50c,U+c5b9,U+c5ce,U+c641,U+c648,U+c73d,U+ca50,U+ca61,U+cc4c,U+ceac,U+d0d4,U+d5f7,U+d6d7,U+ff1a}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.77.woff2) format("woff2-variations");unicode-range:U+2103,U+2463,U+25c6,U+25cb,U+266c,U+3001,U+300a,U+3046,U+304c-304d,U+304f,U+3055,U+3059,U+3063,U+3066-3068,U+306f,U+3089,U+30b8,U+30bf,U+314f,U+4e0a,U+570b,U+5730,U+5916,U+5929,U+5c71,U+5e74,U+5fc3,U+601d,U+6027,U+63d0,U+6709,U+6734,U+751f,U+7684,U+82f1,U+9053,U+91d1,U+97f3,U+ac2f,U+ac4d,U+adc4,U+ade4,U+ae41,U+ae4d-ae4e,U+aed1,U+afb9,U+b0e0,U+b299,U+b365,U+b46c,U+b480,U+b4c8,U+b7b4,U+b819,U+b918,U+baab,U+bab9,U+be8f,U+bed7,U+c0ec,U+c19f,U+c1a5,U+c3d9,U+c464,U+c53d,U+c553,U+c570,U+c5cc,U+c633,U+c6a4,U+c7a3,U+c7a6,U+c886,U+c9d9-c9da,U+c9ec,U+ca0c,U+cc21,U+cd1b,U+cd78,U+cdc4,U+cef8,U+cfe4,U+d0a5,U+d0b5,U+d0ec,U+d15d,U+d188,U+d23c,U+d2ac,U+d729,U+d79b,U+ff01,U+ff08-ff09,U+ff5c}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.78.woff2) format("woff2-variations");unicode-range:U+2039-203a,U+223c,U+25b3,U+25b7,U+25bd,U+25cf,U+266a,U+3002,U+300b,U+304b,U+3057,U+305f,U+306a-306b,U+307e,U+308a-308b,U+3093,U+30a2,U+30af,U+30b9,U+30c3,U+30c8,U+30e9-30eb,U+33a1,U+4e00,U+524d,U+5357,U+5b50,U+7121,U+884c,U+9751,U+ac94,U+aebe,U+aecd,U+af08,U+af41,U+af49,U+b010,U+b053,U+b109,U+b11b,U+b128,U+b154,U+b291,U+b2e6,U+b301,U+b385,U+b525,U+b5b4,U+b729,U+b72f,U+b738,U+b7ff,U+b837,U+b975,U+ba67,U+bb47,U+bc1f,U+bd90,U+bfd4,U+c27c,U+c324,U+c379,U+c3e0,U+c465,U+c53b,U+c58c,U+c610,U+c653,U+c6cd,U+c813,U+c82f,U+c999,U+c9e0,U+cac4,U+cad3,U+cbd4,U+cc10,U+cc22,U+ccb8,U+ccbc,U+cda5,U+ce84,U+cea3,U+cf67,U+cfe1,U+d241,U+d30d,U+d31c,U+d391,U+d401,U+d479,U+d5c9,U+d5db,U+d649,U+d6d4}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.79.woff2) format("woff2-variations");unicode-range:U+b0,U+e9,U+2193,U+2462,U+260e,U+261e,U+300e-300f,U+3044,U+30a4,U+30fb-30fc,U+314d,U+5973,U+6545,U+6708,U+7537,U+ac89,U+ac9c,U+acc1,U+ad04,U+ad75,U+ad7d,U+ae45,U+ae61,U+af42,U+b0ab,U+b0af,U+b0b3,U+b12c,U+b194,U+b1a8,U+b220,U+b258,U+b284,U+b2ff,U+b315,U+b371,U+b3d4-b3d5,U+b460,U+b527,U+b534,U+b810,U+b818,U+b98e,U+ba55,U+bbac,U+bc0b,U+bc40,U+bca1,U+bccd,U+bd93,U+be54,U+be5a,U+bf08,U+bf50,U+bf55,U+bfdc,U+c0c0,U+c0d0,U+c0f4,U+c100,U+c11e,U+c170,U+c20d,U+c274,U+c290,U+c308,U+c369,U+c539,U+c587,U+c5ff,U+c6ec,U+c70c,U+c7ad,U+c7c8,U+c83c,U+c881,U+cb48,U+cc60,U+ce69,U+ce6b,U+ce75,U+cf04,U+cf08,U+cf55,U+cf70,U+cffc,U+d0b7,U+d1a8,U+d2c8,U+d384,U+d47c,U+d48b,U+d5dd,U+d5e8,U+d720,U+d759,U+f981}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.80.woff2) format("woff2-variations");unicode-range:U+e0,U+e2,U+395,U+3b7,U+3ba,U+2460-2461,U+25a0,U+3010-3011,U+306e,U+30f3,U+314a,U+314c,U+5927,U+65b0,U+7e41,U+97d3,U+9ad4,U+ad49,U+ae0b,U+ae0d,U+ae43,U+ae5d,U+aecf,U+af3c,U+af64,U+afd4,U+b080,U+b084,U+b0c5,U+b10c,U+b1e8,U+b2ac,U+b36e,U+b451,U+b515,U+b540,U+b561,U+b6ab,U+b6b1,U+b72c,U+b730,U+b744,U+b800,U+b8ec,U+b8f0,U+b904,U+b968,U+b96d,U+b987,U+b9d9,U+bb36,U+bb49,U+bc2d,U+bc43,U+bcf6,U+bd89,U+be57,U+be61,U+bed4,U+c090,U+c130,U+c148,U+c19c,U+c2f9,U+c36c,U+c37c,U+c384,U+c3df,U+c575,U+c584,U+c660,U+c719,U+c816,U+ca4d,U+ca54,U+cabc,U+cb49,U+cc14,U+cff5,U+d004,U+d038,U+d0b4,U+d0d3,U+d0e0,U+d0ed,U+d131,U+d1b0,U+d31f,U+d33d,U+d3a0,U+d3ab,U+d514,U+d584,U+d6a1,U+d6cc,U+d749,U+d760,U+d799}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.81.woff2) format("woff2-variations");unicode-range:U+24,U+60,U+3b9,U+3bb,U+3bd,U+2191,U+2606,U+300c-300d,U+3131,U+3134,U+3139,U+3141-3142,U+3148,U+3161,U+3163,U+321c,U+4eba,U+5317,U+ac31,U+ac77,U+ac9f,U+acb9,U+acf0-acf1,U+acfd,U+ad73,U+af3d,U+b00c,U+b04a,U+b057,U+b0c4,U+b188,U+b1cc,U+b214,U+b2db,U+b2ee,U+b304,U+b4ed,U+b518,U+b5bc,U+b625,U+b69c-b69d,U+b7ac,U+b801,U+b86c,U+b959,U+b95c,U+b985,U+ba48,U+bb58,U+bc0c,U+bc38,U+bc85,U+bc9a,U+bf40,U+c068,U+c0bd,U+c0cc,U+c12f,U+c149,U+c1e0,U+c22b,U+c22d,U+c250,U+c2fc,U+c300,U+c313,U+c370,U+c3d8,U+c557,U+c580,U+c5e3,U+c62e,U+c634,U+c6f0,U+c74d,U+c783,U+c78e,U+c796,U+c7bc,U+c92c,U+ca4c,U+cc1c,U+cc54,U+cc59,U+ce04,U+cf30,U+cfc4,U+d140,U+d321,U+d38c,U+d399,U+d54f,U+d587,U+d5d0,U+d6e8,U+d770}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.82.woff2) format("woff2-variations");unicode-range:U+d7,U+ea,U+fc,U+2192,U+25bc,U+3000,U+3137,U+3145,U+315c,U+7f8e,U+ac13,U+ac71,U+ac90,U+acb8,U+ace7,U+ad7f,U+ae50,U+aef4,U+af34,U+afbc,U+b048,U+b09a,U+b0ad,U+b0bc,U+b113,U+b125,U+b141,U+b20c,U+b2d9,U+b2ed,U+b367,U+b369,U+b374,U+b3cb,U+b4ec,U+b611,U+b760,U+b81b,U+b834,U+b8b0,U+b8e1,U+b989,U+b9d1,U+b9e1,U+b9fa,U+ba4d,U+ba78,U+bb35,U+bb54,U+bbf9,U+bc11,U+bcb3,U+bd05,U+bd95,U+bdd4,U+be10,U+bed0,U+bf51,U+c0d8,U+c232,U+c2b7,U+c2eb,U+c378,U+c500,U+c52c,U+c549,U+c568,U+c598,U+c5c9,U+c61b,U+c639,U+c67c,U+c717,U+c78a,U+c80a,U+c90c-c90d,U+c950,U+c9e7,U+cbe4,U+cca9,U+cce4,U+cdb0,U+ce78,U+ce94,U+ce98,U+cf8c,U+d018,U+d034,U+d0f1,U+d1b1,U+d280,U+d2f8,U+d338,U+d380,U+d3b4,U+d610,U+d69f,U+d6fc,U+d758}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.83.woff2) format("woff2-variations");unicode-range:U+e7,U+2022,U+203b,U+25c0,U+2605,U+2661,U+3147,U+318d,U+672c,U+8a9e,U+acaa,U+acbc,U+ad1c,U+ae4a,U+ae5c,U+b044,U+b054,U+b0c8-b0c9,U+b2a6,U+b2d0,U+b35c,U+b364,U+b428,U+b454,U+b465,U+b4b7,U+b4e3,U+b51c,U+b5a1,U+b784,U+b790,U+b7ab,U+b7f4,U+b82c,U+b835,U+b8e9,U+b8f8,U+b9d8,U+b9f9,U+ba5c,U+ba64,U+babd,U+bb18,U+bb3b,U+bbff,U+bc0d,U+bc45,U+bc97,U+bcbc,U+be45,U+be75,U+be7c,U+bfcc,U+c0b6,U+c0f7,U+c14b,U+c2b4,U+c30d,U+c4f8,U+c5bb,U+c5d1,U+c5e0,U+c5ee,U+c5fd,U+c606,U+c6c5,U+c6e0,U+c708,U+c81d,U+c820,U+c824,U+c878,U+c918,U+c96c,U+c9e4,U+c9f1,U+cc2e,U+cd09,U+cea1,U+cef5,U+cef7,U+cf64,U+cf69,U+cfe8,U+d035,U+d0ac,U+d230,U+d234,U+d2f4,U+d31d,U+d575,U+d578,U+d608,U+d614,U+d718,U+d751,U+d761,U+d78c,U+d790}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.84.woff2) format("woff2-variations");unicode-range:U+2665,U+3160,U+4e2d,U+6587,U+65e5,U+ac12,U+ac14,U+ac16,U+ac81,U+ad34,U+ade0,U+ae54,U+aebc,U+af2c,U+afc0,U+afc8,U+b04c,U+b08c,U+b099,U+b0a9,U+b0ac,U+b0ae,U+b0b8,U+b123,U+b179,U+b2e5,U+b2f7,U+b4c0,U+b531,U+b538,U+b545,U+b550,U+b5a8,U+b6f0,U+b728,U+b73b,U+b7ad,U+b7ed,U+b809,U+b864,U+b86d,U+b871,U+b9bf,U+b9f5,U+ba40,U+ba4b,U+ba58,U+ba87,U+baac,U+bbc0,U+bc16,U+bc34,U+bd07,U+bd99,U+be59,U+bfd0,U+c058,U+c0e4,U+c0f5,U+c12d,U+c139,U+c228,U+c529,U+c5c7,U+c635,U+c637,U+c735,U+c77d,U+c787,U+c789,U+c8c4,U+c989,U+c98c,U+c9d0,U+c9d3,U+cc0c,U+cc99,U+cd0c,U+cd2c,U+cd98,U+cda4,U+ce59,U+ce60,U+ce6d,U+cea0,U+d0d0-d0d1,U+d0d5,U+d14d,U+d1a4,U+d29c,U+d2f1,U+d301,U+d39c,U+d3bc,U+d4e8,U+d540,U+d5ec,U+d640,U+d750}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.85.woff2) format("woff2-variations");unicode-range:U+5e,U+25b2,U+25b6,U+314e,U+ac24,U+ace1,U+ace4,U+ae68,U+af2d,U+b0d0,U+b0e5,U+b150,U+b155,U+b193,U+b2c9,U+b2dd,U+b3c8,U+b3fc,U+b410,U+b458,U+b4dd,U+b5a0,U+b5a4,U+b5bb,U+b7b5,U+b838,U+b840,U+b86f,U+b8f9,U+b960,U+b9e5,U+bab8,U+bb50,U+bc1d,U+bc24-bc25,U+bca8,U+bcbd,U+bd04,U+bd10,U+bd24,U+be48,U+be5b,U+be68,U+c05c,U+c12c,U+c140,U+c15c,U+c168,U+c194,U+c219,U+c27d,U+c2a8,U+c2f1,U+c2f8,U+c368,U+c554-c555,U+c559,U+c564,U+c5d8,U+c5fc,U+c625,U+c65c,U+c6b1,U+c728,U+c794,U+c84c,U+c88c,U+c8e0,U+c8fd,U+c998,U+c9dd,U+cc0d,U+cc30,U+ceec,U+cf13,U+cf1c,U+cf5c,U+d050,U+d07c,U+d0a8,U+d134,U+d138,U+d154,U+d1f4,U+d2bc,U+d329,U+d32c,U+d3d0,U+d3f4,U+d3fc,U+d56b,U+d5cc,U+d600-d601,U+d639,U+d6c8,U+d754,U+d765}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.86.woff2) format("woff2-variations");unicode-range:U+3c-3d,U+2026,U+24d2,U+314b,U+ac11,U+acf3,U+ad74,U+ad81,U+adf9,U+ae34,U+af43,U+afb8,U+b05d,U+b07c,U+b110,U+b118,U+b17c,U+b180,U+b18d,U+b192,U+b2cc,U+b355,U+b378,U+b4a4,U+b4ef,U+b78d,U+b799,U+b7a9,U+b7fd,U+b807,U+b80c,U+b839,U+b9b4,U+b9db,U+ba3c,U+bab0,U+bba4,U+bc94,U+be4c,U+c154,U+c1c4,U+c26c,U+c2ac,U+c2ed,U+c4f4,U+c55e,U+c561,U+c571,U+c5b5,U+c5c4,U+c654-c655,U+c695,U+c6e8,U+c6f9,U+c724,U+c751,U+c775,U+c7a0,U+c7c1,U+c874,U+c880,U+c9d5,U+c9f8,U+cabd,U+cc29,U+cc2c,U+cca8,U+ccab,U+ccd0,U+ce21,U+ce35,U+ce7c,U+ce90,U+cee8,U+cef4,U+cfe0,U+d070,U+d0b9,U+d0c1,U+d0c4,U+d0c8,U+d15c,U+d1a1,U+d2c0,U+d300,U+d314,U+d3ed,U+d478,U+d480,U+d48d,U+d508,U+d53d,U+d5e4,U+d611,U+d61c,U+d68d,U+d6a8,U+d798}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.87.woff2) format("woff2-variations");unicode-range:U+23,U+25,U+5f,U+a9,U+ac08,U+ac78,U+aca8,U+acac,U+ace8,U+ad70,U+adc0,U+addc,U+b137,U+b140,U+b208,U+b290,U+b2f5,U+b3c5,U+b3cc,U+b420,U+b429,U+b529,U+b530,U+b77d,U+b79c,U+b7a8,U+b7c9,U+b7f0,U+b7fc,U+b828,U+b860,U+b9ad,U+b9c1,U+b9c9,U+b9dd-b9de,U+b9e8,U+ba38-ba39,U+babb,U+bc00,U+bc8c,U+bca0,U+bca4,U+bcd1,U+bcfc,U+bd09,U+bdf0,U+be60,U+c0ad,U+c0b4,U+c0bc,U+c190,U+c1fc,U+c220,U+c288,U+c2b9,U+c2f6,U+c528,U+c545,U+c558,U+c5bc,U+c5d4,U+c600,U+c644,U+c6c0,U+c6c3,U+c721,U+c798,U+c7a1,U+c811,U+c838,U+c871,U+c904,U+c990,U+c9dc,U+cc38,U+cc44,U+cca0,U+cd1d,U+cd95,U+cda9,U+ce5c,U+cf00,U+cf58,U+d150,U+d22c,U+d305,U+d328,U+d37c,U+d3f0,U+d551,U+d5a5,U+d5c8,U+d5d8,U+d63c,U+d64d,U+d669,U+d734,U+d76c}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.88.woff2) format("woff2-variations");unicode-range:U+26,U+2b,U+3e,U+40,U+7e,U+ac01,U+ac19,U+ac1d,U+aca0,U+aca9,U+acb0,U+ad8c,U+ae09,U+ae38,U+ae40,U+aed8,U+b09c,U+b0a0,U+b108,U+b204,U+b298,U+b2d8,U+b2eb-b2ec,U+b2f4,U+b313,U+b358,U+b450,U+b4e0,U+b54c,U+b610,U+b780,U+b78c,U+b791,U+b8e8,U+b958,U+b974,U+b984,U+b9b0,U+b9bc-b9bd,U+b9ce,U+ba70,U+bbfc,U+bc0f,U+bc15,U+bc1b,U+bc31,U+bc95,U+bcc0,U+bcc4,U+bd81,U+bd88,U+c0c8,U+c11d,U+c13c,U+c158,U+c18d,U+c1a1,U+c21c,U+c4f0,U+c54a,U+c560,U+c5b8,U+c5c8,U+c5f4,U+c628,U+c62c,U+c678,U+c6cc,U+c808,U+c810,U+c885,U+c88b,U+c900,U+c988,U+c99d,U+c9c8,U+cc3d-cc3e,U+cc45,U+cd08,U+ce20,U+cee4,U+d074,U+d0a4,U+d0dd,U+d2b9,U+d3b8,U+d3c9,U+d488,U+d544,U+d559,U+d56d,U+d588,U+d615,U+d648,U+d655,U+d658,U+d65c}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.89.woff2) format("woff2-variations");unicode-range:U+d,U+7c,U+ac10,U+ac15,U+ac74,U+ac80,U+ac83,U+acc4,U+ad11,U+ad50,U+ad6d,U+adfc,U+ae00,U+ae08,U+ae4c,U+b0a8,U+b124,U+b144,U+b178,U+b274,U+b2a5,U+b2e8,U+b2f9,U+b354,U+b370,U+b418,U+b41c,U+b4f1,U+b514,U+b798,U+b808,U+b824-b825,U+b8cc,U+b978,U+b9d0,U+b9e4,U+baa9,U+bb3c,U+bc18,U+bc1c,U+bc30,U+bc84,U+bcf5,U+bcf8,U+bd84,U+be0c,U+be14,U+c0b0,U+c0c9,U+c0dd,U+c124,U+c2dd,U+c2e4,U+c2ec,U+c54c,U+c57c-c57d,U+c591,U+c5c5-c5c6,U+c5ed,U+c608,U+c640,U+c6b8,U+c6d4,U+c784,U+c7ac,U+c800-c801,U+c9c1,U+c9d1,U+cc28,U+cc98,U+cc9c,U+ccad,U+cd5c,U+cd94,U+cd9c,U+cde8,U+ce68,U+cf54,U+d0dc,U+d14c,U+d1a0,U+d1b5,U+d2f0,U+d30c,U+d310,U+d398,U+d45c,U+d50c,U+d53c,U+d560,U+d568,U+d589,U+d604,U+d6c4,U+d788}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.90.woff2) format("woff2-variations");unicode-range:U+ac04,U+ac1c,U+ac70,U+ac8c,U+acbd,U+acf5,U+acfc,U+ad00,U+ad6c,U+adf8,U+b098,U+b0b4,U+b294,U+b2c8,U+b300,U+b3c4,U+b3d9,U+b4dc,U+b4e4,U+b77c,U+b7ec,U+b85d,U+b97c,U+b9c8,U+b9cc,U+ba54,U+ba74,U+ba85,U+baa8,U+bb34,U+bb38,U+bbf8,U+bc14,U+bc29,U+bc88,U+bcf4,U+bd80,U+be44,U+c0c1,U+c11c,U+c120,U+c131,U+c138,U+c18c,U+c218,U+c2b5,U+c2e0,U+c544,U+c548,U+c5b4,U+c5d0,U+c5ec,U+c5f0,U+c601,U+c624,U+c694,U+c6a9,U+c6b0,U+c6b4,U+c6d0,U+c704,U+c720,U+c73c,U+c740,U+c744,U+c74c,U+c758,U+c77c,U+c785,U+c788,U+c790-c791,U+c7a5,U+c804,U+c815,U+c81c,U+c870,U+c8fc,U+c911,U+c9c4,U+ccb4,U+ce58,U+ce74,U+d06c,U+d0c0,U+d130,U+d2b8,U+d3ec,U+d504,U+d55c,U+d569,U+d574,U+d638,U+d654,U+d68c}
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url(/static/font-pretendard-variable.subset.91.woff2) format("woff2-variations");unicode-range:U+20-22,U+27-2a,U+2c-39,U+3a-3b,U+3f,U+41-4e,U+4f-5d,U+61-7b,U+7d,U+a0-a1,U+ab,U+ad-ae,U+b7,U+bb,U+bf,U+2013-2014,U+201c-201d,U+2122,U+ac00,U+ace0,U+ae30,U+b2e4,U+b85c,U+b9ac,U+c0ac,U+c2a4,U+c2dc,U+c774,U+c778,U+c9c0,U+d558}
@font-face{font-family:"JetBrains Mono";font-weight:400;font-style:normal;font-display:swap;src:url(/static/font-jetbrains-mono-regular.woff2) format("woff2")}
@font-face{font-family:"JetBrains Mono";font-weight:500;font-style:normal;font-display:swap;src:url(/static/font-jetbrains-mono-medium.woff2) format("woff2")}
/* IBM Plex Mono (@fontsource/ibm-plex-mono 5.3.0, Latin): the Click design's face for numbers, identifiers and paths (click-tokens.css --font-mono); letters outside its range fall to the next fonts of the stack. */
@font-face{font-family:"IBM Plex Mono";font-weight:400;font-style:normal;font-display:swap;src:url(/static/font-ibm-plex-mono-regular.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"IBM Plex Mono";font-weight:500;font-style:normal;font-display:swap;src:url(/static/font-ibm-plex-mono-medium.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"IBM Plex Mono";font-weight:600;font-style:normal;font-display:swap;src:url(/static/font-ibm-plex-mono-semibold.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
:root{
  color-scheme:light;
  --ds-font:"Pretendard Variable",Pretendard,-apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo","Malgun Gothic",system-ui,sans-serif;
  --ds-font-num:var(--ds-font);
  --ds-font-mono:"JetBrains Mono",ui-monospace,SFMono-Regular,Menlo,"Apple SD Gothic Neo",monospace;
  /* The redesign's values (리디자인 명세 4절, design/click.css :root). A screen's body is 14px and what stands beside it
     13px at least (user review 10-06, P2 12); only a menu group's name and a badge are 12-12.5px. */
  --ds-fs-xs:13px;--ds-fs-sm:14px;--ds-fs-md:14px;--ds-fs-lg:15px;--ds-fs-xl:18px;--ds-fs-2xl:20px;--ds-fs-figure:32px;--ds-fs-hero:48px;
  /* A booth screen read from 2 m (발표 모드): heading, figure, control and legend. */
  --ds-fs-stage-title:clamp(30px,2.6vw,52px);--ds-fs-stage-figure:clamp(30px,2.4vw,46px);--ds-fs-stage-control:17px;--ds-fs-stage-legend:16px;
  --ds-space-1:4px;--ds-space-2:8px;--ds-space-3:12px;--ds-space-4:16px;--ds-space-5:20px;--ds-space-6:28px;
  --ds-radius:12px;--ds-radius-s:8px;--ds-radius-xs:6px;
  --ds-dur-fast:120ms;--ds-dur:180ms;--ds-dur-attn:600ms;--ds-ease:cubic-bezier(.2,.7,.2,1);
  --ds-bg:#f5f6f8;--ds-surface:#fff;--ds-surface-2:#f7f8fa;--ds-surface-3:#eef0f4;
  --ds-line:#e6e8ee;--ds-line-strong:#cdd2dc;
  --ds-text:#0f1728;--ds-text-2:#444f66;--ds-text-3:#5e6a82;
  --ds-accent:#1f4fe0;--ds-accent-strong:#173fbc;--ds-accent-ink:#fff;--ds-accent-soft:#edf2ff;--ds-accent-text:#1a44c9;--ds-focus:#1f4fe0;
  /* The palette's meanings (명세 6.1): 관리됨·허용 ok · 조치 중 info · 미관리·위반 danger (a person must act) · 탐지만·일부
     연동·정책 없음 caution · 확인 필요 unknown (a dashed ring, hatched) · 차단·금지 blocked (a dark neutral, never red: it is
     the protection working) · 꺼짐·해당 없음 neutral. The plain token fills a dot, a band or a line; words in a state's
     colour take its -text token (the plain one is too light for 4.5:1 on a page). */
  --ds-ok:#12855f;--ds-ok-text:#0a6b4b;--ds-ok-soft:#e6f4ee;
  --ds-info:#3b74ea;--ds-info-text:#1b4dbd;--ds-info-soft:#eaf1fe;
  --ds-danger:#d8432f;--ds-danger-text:#b3261e;--ds-danger-soft:#fdecea;
  --ds-caution:#e08a2e;--ds-caution-text:#8f4a0b;--ds-caution-soft:#fdf1e2;
  --ds-unknown:#c9a227;--ds-unknown-text:#6f5200;--ds-unknown-soft:#fbf5dd;--ds-unknown-line:#d9be6a;--ds-unknown-2:var(--ds-unknown-line);
  --ds-blocked:#2f3a55;--ds-blocked-soft:#e9ecf2;--ds-neutral:#98a1b3;--ds-neutral-soft:#f0f2f5;--ds-muted:#8691a6;
  /* Click Agent's own colour: what Click did or proposes, and the button that hands it work. --ds-new is not used anew. */
  --ds-click:#6b4fe0;--ds-click-text:#5837c9;--ds-click-soft:#f3f0fe;--ds-click-line:#ddd5fb;
  --ds-new:#6b3fd4;--ds-new-soft:#efe9fd;
  /* The first line's figure (40px; 48px on a wide screen, 28px on a phone) and the rail's surface, a step under a card's. */
  --ds-fs-first:40px;--ds-rail-surface:var(--ds-surface-2);
  --ds-shadow:0 1px 2px rgba(15,23,40,.06);--ds-shadow-pop:0 12px 32px rgba(15,23,40,.14);
  --ds-brand-bg:#0a1230;--ds-nav-bg:#0d1738;--ds-nav-line:#1e2a52;--ds-nav-well:#14204a;
  --ds-nav-text:#e9eefc;--ds-nav-dim:#aab6d8;--ds-nav-hover:#16234f;
  --ds-nav-active-bg:#1c2f6e;--ds-nav-active-text:#fff;--ds-nav-active-mark:#6ea0ff;
  /* The dark stage: Agent Universe, 발표 모드, 로그인. */
  --ds-stage-bg:#0b1330;--ds-stage-2:#131c45;--ds-stage-line:rgba(255,255,255,.14);--ds-stage-text:#e9eefc;--ds-stage-dim:#aab6d8;--ds-tip-bg:#0d1738;--ds-tip-text:#f1f4fd;
  --ds-chevron:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M2.5 4.5 6 8l3.5-3.5' fill='none' stroke='%23475370' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  /* The older names keep working: they are the tokens. */
  --nav:var(--ds-accent);--nav-soft:var(--ds-accent-strong);--canvas:var(--ds-bg);--panel:var(--ds-surface);
  --line:var(--ds-line);--text:var(--ds-text);--muted:var(--ds-text-2);
  --mint:var(--ds-accent);--mint-dark:var(--ds-accent-text);--mint-soft:var(--ds-accent-soft);
  /* An older name in a state's colour was a colour for words: it is the state's -text token. */
  --amber:var(--ds-unknown-text);--amber-soft:var(--ds-unknown-soft);--red:var(--ds-danger-text);--red-soft:var(--ds-danger-soft);
  --blue:var(--ds-info-text);--shadow:var(--ds-shadow);--surface-2:var(--ds-surface-2);--surface-3:var(--ds-surface-3);
  --warn:var(--ds-unknown-text);--warn-bg:var(--ds-unknown-soft);
  --side:248px;
}
body{background:var(--ds-bg);color:var(--ds-text);font-family:var(--ds-font);font-size:var(--ds-fs-md);line-height:1.5;-webkit-font-smoothing:antialiased;font-feature-settings:"tnum" 1}
h1,h2,h3,h4{color:var(--ds-text)}
/* A heading a screen does not size is on the type scale, not the browser's 1.17em (16.38px). */
h3{font-size:var(--ds-fs-lg)}h4{font-size:var(--ds-fs-md)}
code,kbd,.drawer-ref{font-family:var(--ds-font-mono)}
small{font-size:var(--ds-fs-xs)}

/* Shell: brand band with the official logo, navigation, header, tabs. */
.sidebar{width:var(--side);background:var(--ds-nav-bg);color:var(--ds-nav-text);border-right:1px solid var(--ds-nav-line);padding:0 12px 14px}
.brand{margin:0 -12px 14px;height:64px;min-height:64px;padding:0 20px;background:var(--ds-brand-bg);border-bottom:1px solid var(--ds-nav-line);justify-content:flex-start}
.nav-item{position:relative;min-height:38px;margin:1px 0;padding:8px 12px;border:0;border-radius:var(--ds-radius-s);color:var(--ds-nav-dim);font-size:var(--ds-fs-md);font-weight:500}
.nav-item:hover{background:color-mix(in srgb,var(--ds-nav-active-mark) 8%,transparent);color:var(--ds-nav-dim)}
.nav-item.active{background:color-mix(in srgb,var(--ds-nav-active-mark) 12%,transparent);color:var(--ds-nav-dim);font-weight:650}
.nav-item.active .nav-icon{color:var(--ds-nav-active-mark)}
.nav-item.active::before{content:"";position:absolute;left:-12px;top:7px;bottom:7px;width:3px;border-radius:0 3px 3px 0;background:var(--ds-nav-active-mark)}
.nav-item:focus-visible{outline-color:var(--ds-nav-active-mark)}
.nav-divider{background:var(--ds-nav-line);margin:8px 12px}
.nav-count{background:var(--ds-nav-well);color:var(--ds-nav-text);border:1px solid var(--ds-nav-line);border-radius:999px;font-size:var(--ds-fs-xs);line-height:18px;padding:0 7px}
.nav-count[data-count="unknown"]{color:var(--ds-nav-dim);background:transparent}
/* What — is, as the menu's footnote: at the foot of the side bar over the footer's line, on the footer's text
   edge -- right under 설정 at the icons' edge it read as a piece of a menu item (router r2, issue-approvals r2). */
.nav-legend{margin:auto 12px 10px;padding:var(--ds-space-2) 12px 0;color:var(--ds-nav-dim);font-size:var(--ds-fs-xs)}
.nav-legend[hidden]{display:none}
@media(max-width:900px){.nav-legend{display:none}}

.workspace{margin-left:var(--side)}
.topbar{min-height:64px;padding:10px 32px;gap:16px;background:var(--ds-surface);border-bottom:1px solid var(--ds-line)}
.topbar>div:first-of-type{flex:0 1 auto;min-width:0}
.topbar h1{font-size:var(--ds-fs-xl);font-weight:700;letter-spacing:-.015em;margin:1px 0;white-space:nowrap}
.page-name{display:flex;align-items:center;gap:6px;min-width:0}
.page-name>h1{min-width:0;overflow:hidden;text-overflow:ellipsis}
.page-name>.page-help{flex:none}.page-name>.page-help[hidden]{display:none}
.breadcrumb{font-size:var(--ds-fs-xs)!important;letter-spacing:.04em;color:var(--ds-text-3)!important}.breadcrumb b{color:var(--ds-accent-text)}
/* Wide: the actions keep one row beside the title. Narrower, they wrap under it (the rules above). */
@media(max-width:1180px){.topbar{flex-wrap:wrap}.session-context{min-width:0}}
.menu-tabs{padding:0 32px;background:var(--ds-surface);border-bottom:1px solid var(--ds-line)}
.menu-tab{padding:11px 14px 10px;border:0;border-bottom:2px solid transparent;color:var(--ds-text-2);font-size:var(--ds-fs-md);font-weight:550}
.menu-tab:hover{background:color-mix(in srgb,var(--ds-accent) 8%,transparent);color:var(--ds-text-2)}
.menu-tab.active{background:color-mix(in srgb,var(--ds-accent) 10%,transparent);color:var(--ds-text-2);border-bottom-color:var(--ds-accent);font-weight:700}
/* A run of tabs under a group's name (app.js buildMenus): a thin line before it; the name is the group's label. */
.menu-tab-group{position:relative;display:flex;flex:none;gap:2px;margin-left:8px;padding-left:9px}
.menu-tab-group::before{content:"";position:absolute;left:0;top:12px;bottom:12px;width:1px;background:var(--ds-line-strong)}
.menu-tab-group[hidden]{display:none}
/* The logo is the link to the account's first screen (U1). */
a.brand{display:flex;align-items:center;color:inherit;text-decoration:none}
a.brand:focus-visible{outline:3px solid var(--ds-nav-active-mark);outline-offset:-3px}
main{max-width:1560px;padding:20px 32px 48px}
/* On a wide screen the header and the tab row keep the body's edges (the body stops at 1560px), so the
   title, tabs and content start and end on the same lines. */
@media(min-width:901px){.topbar,.menu-tabs{padding-left:max(32px,calc((100% - 1560px)/2 + 32px));padding-right:max(32px,calc((100% - 1560px)/2 + 32px))}}
/* What the open tab is for, once, above the page; the header keeps the title and the actions. */
.page-lead{margin:0 0 16px;color:var(--ds-text-2);font-size:var(--ds-fs-sm);max-width:86ch}
.page-lead:empty{display:none}
.avatar{background:var(--ds-accent-soft);color:var(--ds-accent-text);font-size:var(--ds-fs-xs)}
.session-context b{font-size:var(--ds-fs-sm)}.session-context small{font-size:var(--ds-fs-xs);color:var(--ds-text-2)}
.pill,.mode-badge{border:1px solid var(--ds-line);background:var(--ds-surface-2);color:var(--ds-text-2);font-size:var(--ds-fs-xs);font-weight:600;padding:5px 10px}
.nav-toggle{color:var(--ds-text)}

/* Controls: one primary look, a secondary, a text action; a select is drawn like an input. */
button{background:var(--ds-accent);color:var(--ds-accent-ink);border:1px solid transparent;border-radius:var(--ds-radius-s);font-size:var(--ds-fs-sm);font-weight:600;padding:8px 14px;transition:background-color var(--ds-dur-fast) var(--ds-ease),border-color var(--ds-dur-fast) var(--ds-ease),color var(--ds-dur-fast) var(--ds-ease)}
button:hover{filter:none}
/* The darker ground under the pointer is the plain button's alone (UR32-1): at no weight, any part that draws its own
   ground keeps it -- 찾기's 소유자·기기 and a Task's 기한 지남 took the blue under their grey words. */
:where(button:hover){background:var(--ds-accent-strong)}
button:disabled,button[aria-disabled="true"]{opacity:.5;cursor:not-allowed}
/* Reading is a button's quieter look only while it can be pressed: one that is off stays drawn off (gw-limits-g8-r2:
   조회 beside a company choice still loading was faded in dark and full in light). */
button[aria-busy="true"]:not(:disabled,[aria-disabled="true"]){cursor:progress;opacity:.75}
.ghost,.secondary{background:var(--ds-surface);border:1px solid var(--ds-line-strong);color:var(--ds-text)}
.ghost:hover,.secondary:hover{background:var(--ds-surface-2);border-color:var(--ds-text-3);color:var(--ds-text)}
.compact{padding:5px 10px;font-size:var(--ds-fs-xs)}
.text-action,.link-button{background:transparent;border:0;color:var(--ds-accent-text);font-weight:600}
.text-action{font-size:var(--ds-fs-sm);padding:4px 6px}
.text-action:hover,.link-button:hover{background:transparent;text-decoration:underline;text-underline-offset:3px}
/* U2: a control that moves to another screen is a link (a new tab opens it, its address opens the same place), drawn
   as the control it stands for -- the classes are the buttons' own, the box a button brings is said here. */
a:is(.secondary,.text-action,.ov-metric){text-decoration:none;cursor:pointer}
a.secondary{display:inline-block;border-radius:var(--ds-radius-s);font-size:var(--ds-fs-sm);font-weight:600;line-height:normal;padding:8px 14px;white-space:nowrap}
a.secondary.compact{padding:5px 10px;font-size:var(--ds-fs-xs)}
a.primary{display:inline-block;background:var(--ds-accent);color:var(--ds-accent-ink);border:1px solid transparent;border-radius:var(--ds-radius-s);font-size:var(--ds-fs-sm);font-weight:600;line-height:normal;padding:8px 14px;white-space:nowrap;text-decoration:none;cursor:pointer}
a.primary:hover{background:var(--ds-accent-strong)}
a.primary.compact{padding:5px 10px;font-size:var(--ds-fs-xs)}
a.text-action{display:inline-block;border-radius:var(--ds-radius-s);line-height:normal}
a.ov-metric:hover{background:var(--ds-surface-2);border-color:var(--ds-accent)}
.close,.close:hover{background:transparent;color:var(--ds-text-2)}
button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible,summary:focus-visible,a:focus-visible,.clickable:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--ds-focus);outline-offset:2px}
input,textarea,select{background-color:var(--ds-surface);color:var(--ds-text);border:1px solid var(--ds-line-strong);border-radius:var(--ds-radius-s);font-family:inherit;font-size:var(--ds-fs-sm)}
input::placeholder,textarea::placeholder{color:var(--ds-text-3)}
input:disabled,select:disabled,textarea:disabled{background-color:var(--ds-surface-3);color:var(--ds-text-3);cursor:not-allowed}
/* The arrow keeps its room whatever padding a toolbar gives its select. */
select:not([multiple]){padding-right:30px!important}
select{appearance:none;-webkit-appearance:none;background-image:var(--ds-chevron);background-repeat:no-repeat;background-position:right 10px center;background-size:12px}
input[type="checkbox"],input[type="radio"]{accent-color:var(--ds-accent)}
label,.detail-section>small{color:var(--ds-text-2);font-size:var(--ds-fs-xs)}
.segmented{border:1px solid var(--ds-line-strong);border-radius:var(--ds-radius-s);background:var(--ds-surface)}
.segmented button{background:transparent;color:var(--ds-text-2);border:0;border-radius:0;font-size:var(--ds-fs-sm);padding:7px 13px}
.segmented button:hover{background:var(--ds-surface-2)}
.segmented button[aria-pressed="true"]{background:var(--ds-accent-soft);color:var(--ds-accent-text);font-weight:700}
.chip,.chip-button{background:var(--ds-surface);border:1px solid var(--ds-line-strong);color:var(--ds-text);border-radius:999px;font-size:var(--ds-fs-xs);font-weight:550;padding:5px 11px}
.chip-button:hover{background:var(--ds-surface-2)}
.chip-button.active{background:var(--ds-accent);border-color:var(--ds-accent);color:var(--ds-accent-ink)}
.period-control{border-color:var(--ds-line-strong);background:var(--ds-surface)}
.period-control button{border:0;color:var(--ds-text-2);font-size:var(--ds-fs-xs)}
.period-control button.active{background:var(--ds-accent);color:var(--ds-accent-ink)}
.period-control button:not(.active):hover{background:var(--ds-surface-2);color:var(--ds-text)}
.tabs{border-bottom-color:var(--ds-line)}
.tab{color:var(--ds-text-2);font-size:var(--ds-fs-sm)}.tab:hover{background:transparent;color:var(--ds-text)}
.tab.active{color:var(--ds-text);border-color:var(--ds-accent);font-weight:700}
/* One shape for a tab that switches a panel: the older .tabs .tab (모델 연결, 자산 상세) draws as .ui-tabs [role=tab]. */
.tabs{gap:var(--ds-space-4);margin:0 0 var(--ds-space-4)}
.tab{padding:0 0 10px;font-size:var(--ds-fs-md);font-weight:500}
.tab.active,.tab[aria-selected="true"]{color:var(--ds-accent-text);border-bottom-color:var(--ds-accent);font-weight:700}

/* Text roles. */
.eyebrow{color:var(--ds-text-3);font-size:var(--ds-fs-xs);font-weight:650;letter-spacing:.06em}
.inventory-note{color:var(--ds-text-2);font-size:var(--ds-fs-sm)}
.empty,.module-empty,.module-pending{color:var(--ds-text-2);font-size:var(--ds-fs-sm)}

/* Surfaces: panel, table, key and value. */
.metric,article,.summary-strip,.overview-assets,.inv-facets,.lv-panel,.mc-table,.mc-summary div,.mb-roles,.cost-summary div,.lv-metrics div{background:var(--ds-surface);border:1px solid var(--ds-line);border-radius:var(--ds-radius);box-shadow:var(--ds-shadow)}
.cost-summary div,.lv-metrics div,.mc-summary div{box-shadow:none}
.evidence-pack,.glossary-grid>section{background:var(--ds-surface-2);border-color:var(--ds-line)}
.ov-head h3,.section-title h3{font-size:var(--ds-fs-lg);font-weight:700}
.table-wrap table{font-size:var(--ds-fs-sm)}
.table-wrap th,th,.mc-head{background:var(--ds-surface-2);color:var(--ds-text-2);font-size:var(--ds-fs-xs);font-weight:600;letter-spacing:0;text-transform:none}
.table-wrap th{padding:9px 14px;border-bottom:1px solid var(--ds-line-strong)}
.table-wrap td{padding:10px 14px;border-bottom:1px solid var(--ds-line);font-variant-numeric:tabular-nums}
.table-wrap tbody tr:hover,.clickable:hover{background:var(--ds-surface-2)}
.clickable:hover,.clickable:focus-visible{box-shadow:inset 3px 0 0 var(--ds-accent)}
.table-wrap td small,.name-cell small{font-size:var(--ds-fs-xs);color:var(--ds-text-2)}
/* The booth's 1080p screen is read from 2 m: there a list's rows are a size up, its head and a row's second line with
   them -- as 이슈, Control and 승인 already read, where 현황, 검색 and the Gateway lists stayed at 13px beside them.
   (A head as large as the rows broke onto two lines in the widest tables.) */
@media(min-width:1700px){.table-wrap table{font-size:var(--ds-fs-md)}.table-wrap th,.table-wrap td small,.name-cell small{font-size:var(--ds-fs-sm)}}
.kv{border-bottom:1px solid var(--ds-line);font-size:var(--ds-fs-sm);padding:9px 0}
.kv>span:first-child{color:var(--ds-text-2)}
.row,.detail-section,.mc-row,.mb-roles-row,.issue-bell-row,.glossary-item,.inv-facets details,.inv-server{border-color:var(--ds-line)}
.app-icon{background:var(--ds-surface-3);color:var(--ds-text-2)}
.mb-invite,.dv-cmd{background:var(--ds-surface-2);font-family:var(--ds-font-mono)}
.inv-facets summary{font-size:var(--ds-fs-sm)}.inv-facets summary b{background:var(--ds-accent-soft);color:var(--ds-accent-text)}
.inv-facets label{font-size:var(--ds-fs-xs);color:var(--ds-text)}

/* Figures: one number style. */
.ov-grid{gap:12px;grid-template-columns:repeat(auto-fill,minmax(176px,1fr))}
.ov-metric,.ov-metric.is-static{background:var(--ds-surface);border:1px solid var(--ds-line);border-radius:var(--ds-radius);color:var(--ds-text);padding:14px 16px;min-height:0;gap:2px}
button.ov-metric:hover{background:var(--ds-surface-2);border-color:var(--ds-accent)}
.ov-metric span{font-size:var(--ds-fs-sm);color:var(--ds-text-2);font-weight:550}
.ov-metric strong,.metric strong{font-family:var(--ds-font-num);font-size:var(--ds-fs-figure);font-weight:700;letter-spacing:-.025em;font-variant-numeric:tabular-nums;line-height:1.15;color:var(--ds-text)}
.ov-metric small{font-size:var(--ds-fs-xs);color:var(--ds-text-2);font-weight:400}
/* A Gateway screen's envelope line (gw-console-common envelopeLine): each part is one piece with its middle dot in
   front of it, so a wrapped line never ends on a dot alone; the lead of whichever part opens a line falls in the
   strip the line is clipped by, so a line does not open on a dot either. */
p[data-gwc-envelope]{--gwc-lead:14px;column-gap:0;margin-left:calc(-1 * var(--gwc-lead));clip-path:inset(-4px -4px -4px var(--gwc-lead))}
.gwc-part{display:inline-flex;align-items:center;gap:var(--ds-space-2);min-width:0;max-width:100%;padding-left:var(--gwc-lead,14px)}
.gwc-sep{flex:none;width:var(--gwc-lead,14px);margin:0 calc(-1 * var(--ds-space-2)) 0 calc(-1 * var(--gwc-lead,14px));text-align:center}
/* The last pull's instant is one piece: a narrow line broke it between 오후 and its hour. */
.gwc-pulled>span{white-space:nowrap}
/* A booth screen read from two metres: the lines that say an answer's state (how late, whose sample, a demo company's
   estimate) and their chips are body size, so 추정 and 수집 늦음 are read with the amounts (cost-g6-r2 at 1920). */
@media(min-width:1700px){p[data-gwc-envelope],p[data-gwc-demo]{font-size:var(--ds-fs-md)}:is(p[data-gwc-envelope],p[data-gwc-demo]) :is(.state,.tag,.prov-badge,small){font-size:var(--ds-fs-md)}[data-gwc-estimate]{font-size:var(--ds-fs-md)}}
/* Requests whose upstream answer was scripted, and of each cost kind the part that is theirs: a kind and its amount stay on one line. */
p[data-gwc-simulated]{display:block;margin:0 0 var(--ds-space-2);font-size:var(--ds-fs-xs);color:var(--ds-text-2)}
p[data-gwc-simulated="some"]{padding:var(--ds-space-2) var(--ds-space-3);border:1px solid var(--ds-line);border-radius:var(--ds-radius-s);background:var(--ds-surface-2)}
p[data-gwc-simulated] [data-gwc-estimate]{margin-right:var(--ds-space-2)}
p[data-gwc-simulated] b{font-weight:600;color:var(--ds-text)}
.gwc-kind{white-space:nowrap}
.lv-metrics b,.mc-summary b,.cost-summary b{font-size:var(--ds-fs-2xl);font-weight:700;font-variant-numeric:tabular-nums}
/* 판단 불가 is its own state: a dashed edge and its own colour, never drawn as 0 or as danger. */
.ov-metric.amber{border:1.5px dashed var(--ds-unknown);background:var(--ds-unknown-soft)}
.ov-metric.amber strong{color:var(--ds-unknown-text)}
.ov-metric.blue strong{color:var(--ds-info-text)}
/* 관리 밖 is known and bad: a solid edge in the danger colour. */
.ov-metric.red{border:1.5px solid var(--ds-danger);background:var(--ds-danger-soft)}
.ov-metric.red strong{color:var(--ds-danger-text)}

/* Marks: state, provenance, basis. Colour is never the only sign. */
.tag,.state{display:inline-block;border:0;border-radius:var(--ds-radius-xs);padding:2px 7px;font-size:var(--ds-fs-xs);font-weight:600;background:var(--ds-ok-soft);color:var(--ds-ok-text)}
.state{background:var(--ds-surface-3);color:var(--ds-text-2)}
.healthy,.allow,.executed{background:var(--ds-ok-soft);color:var(--ds-ok-text)}
.exceeded,.critical,.deny,.error{background:var(--ds-danger-soft);color:var(--ds-danger-text)}
.tag.amber,.unknown,.warning,.high,.approval_required,.pending,.issued{background:var(--ds-unknown-soft);color:var(--ds-unknown-text)}
.tag.amber{outline:1px dashed var(--ds-unknown);outline-offset:-1px}
.tag.red{background:var(--ds-danger-soft);color:var(--ds-danger-text)}
/* 치명 is told from 높음 at a glance wherever a severity is drawn (search, Universe, 알림, Control, 이슈): the same red, filled.
   Its words are the card's own colour, as button.danger's: white on dark's light red was 2.04:1 (axe, Air q71r3 controls:dark). */
.tag:is([data-severity="Critical"],[data-notify-severity="critical"]){background:var(--ds-danger-text);color:var(--ds-surface)}

/* Severity 중간: a solid mark of its own. The dashed amber above is Unknown's (판단 불가·미확인) alone. */
/* A caution that is a known fact (승인 대기, 한도 초과, 미승인, 알림) is this solid tone; .tag.amber's dashed edge says 판단 불가 and nothing else. */
.tag.medium,.tag.caution{background:var(--ds-caution-soft);color:var(--ds-caution-text)}
.tag.gray{background:var(--ds-surface-3);color:var(--ds-text-2)}
.tag.blue{background:var(--ds-info-soft);color:var(--ds-info-text)}
.prov-badge,.basis-badge{border-radius:var(--ds-radius-xs);padding:1px 6px;font-size:var(--ds-fs-xs);font-weight:600;line-height:18px}
.prov-badge[data-provenance="demo_environment"]{background:var(--ds-surface-3);color:var(--ds-text-2);border:1px solid var(--ds-line-strong)}
.prov-badge[data-provenance="synthetic"]{background:var(--ds-danger-soft);color:var(--ds-danger-text);border:1px solid var(--ds-danger)}
.prov-badge[data-provenance="unknown"]{background:var(--ds-unknown-soft);color:var(--ds-unknown-text);border:1px dashed var(--ds-unknown)}
/* A value's basis is small grey words after it, no chip (명세 6.1); a value seen directly has none. */
.basis-badge,.basis-badge[data-basis]{padding:0;border:0;border-radius:0;background:transparent;color:var(--ds-text-3);font-size:var(--ds-fs-sm);font-weight:400;line-height:inherit}
.basis-value[data-basis-value="unknown"]{color:var(--ds-muted)}
.banner{background:var(--ds-info-soft);border:1px solid var(--ds-line);color:var(--ds-text);border-radius:var(--ds-radius-s);font-size:var(--ds-fs-sm)}
.banner.amber,.auth-banner,.cp-credential:not(:empty),.dv-issued{background:var(--ds-unknown-soft);border-color:var(--ds-unknown-2);color:var(--ds-text)}
.auth-banner code{color:var(--ds-unknown-text)}
/* The sign-in frame says by its colour why it stands. Asked for the first time, or after signing out, it is the
   plain frame a form stands in; a session that ended, a sign-in the server refused or did not answer is a caution.
   The amber of 판단 불가 is not its colour: nothing here is unknown (whole-review F-038). */
.auth-banner{background:var(--ds-caution-soft);border-color:var(--ds-caution)}
.auth-banner:has(#auth-message:is([data-auth-message="needed"],[data-auth-message="sign-in"],[data-auth-message="signed-out"])),.auth-banner:has(#auth-message:not([data-auth-message])){background:var(--ds-surface);border-color:var(--ds-line-strong);box-shadow:var(--ds-shadow)}
.sign-in-page .auth-banner{background:var(--ds-surface);border-color:var(--ds-line-strong)}
.sign-in-page #auth-message:empty{display:none}
.sign-in-page #auth-message{padding:10px 12px;border-radius:var(--ds-radius-s);background:var(--ds-surface-2);color:var(--ds-text);font-size:var(--ds-fs-md)}
.sign-in-page #auth-message:not([data-auth-message="needed"],[data-auth-message="sign-in"],[data-auth-message="signed-out"]){background:var(--ds-caution-soft);color:var(--ds-caution-text)}
/* The sign-in page (index.html #sign-in-page). Until the server has said who is signed in the page is this and
   nothing else: the console is not drawn, so no menu or tile of it shows first or behind the form (app.js gate;
   user, 10-05). 'checking' is the first paint and a server that has not answered; 'signed-out' is the form. */
html[data-portal-gate]:not([data-portal-gate="open"]) .app-shell{display:none}
html[data-portal-gate="open"] .sign-in-page{display:none}
.sign-in-page{min-height:100vh;display:grid;place-items:center;padding:var(--ds-space-5) var(--ds-space-4);background:var(--ds-nav-bg)}
.sign-in-checking{margin:0;padding:var(--ds-space-4) var(--ds-space-5);border:1px solid var(--ds-nav-line);border-radius:var(--ds-radius);background:var(--ds-nav-well);color:var(--ds-nav-text);font-size:var(--ds-fs-lg)}
html:not([data-portal-gate="checking"]) .sign-in-checking{display:none}
/* Its words are a step larger than a form's inside the console: the page is the product's first, and at a booth it
   is read from where a visitor stands (independent review U50-8: at 12-14px only the heading was read from 2m).
   On a wall screen the card and its words are larger again (the last rule). */
.sign-in-page .auth-banner{grid-template-columns:minmax(0,1fr);gap:var(--ds-space-4);align-items:start;margin:0;padding:var(--ds-space-6) var(--ds-space-6) 28px;border-radius:12px;font-size:var(--ds-fs-lg);box-shadow:0 24px 60px rgba(4,10,30,.35)}
.sign-in-page .auth-banner .eyebrow{font-size:var(--ds-fs-sm)}
.sign-in-page .auth-banner h3{margin:2px 0 6px;font-size:var(--ds-fs-2xl);line-height:1.3}
.sign-in-page .auth-banner p{margin:0}
.sign-in-page .auth-form>p:not(.eyebrow),.sign-in-page #oidc-auth-form p{color:var(--ds-text-2);font-size:var(--ds-fs-md);text-wrap:balance}
.sign-in-page #oidc-auth-form:not([hidden]){display:grid;gap:var(--ds-space-3)}
.sign-in-page .auth-banner button{min-height:46px;margin-top:var(--ds-space-2);font-size:var(--ds-fs-lg)}
@media(min-width:1700px){.sign-in-checking{font-size:var(--ds-fs-xl)}.sign-in-page .auth-banner{gap:var(--ds-space-5);padding:var(--ds-space-6);font-size:var(--ds-fs-xl)}.sign-in-page .auth-banner .eyebrow{font-size:var(--ds-fs-lg)}.sign-in-page .auth-banner h3{font-size:calc(var(--ds-fs-2xl)*1.25)}.sign-in-page .auth-form label,.sign-in-page .auth-form>p:not(.eyebrow),.sign-in-page #oidc-auth-form p{font-size:var(--ds-fs-lg)}.sign-in-page .auth-form input,.sign-in-page .auth-banner button{min-height:52px;font-size:var(--ds-fs-xl)}}
.field-help{background:var(--ds-accent-soft);border-left-color:var(--ds-accent);color:var(--ds-text);font-size:var(--ds-fs-sm)}
.issue-bell-count{background:var(--ds-surface-3);color:var(--ds-text-2);font-size:var(--ds-fs-xs)}
.issue-bell-panel{background:var(--ds-surface);border-color:var(--ds-line);box-shadow:var(--ds-shadow-pop)}
.help-trigger,.help-center-button>span[aria-hidden]{border-color:var(--ds-line-strong);background:var(--ds-surface-2);color:var(--ds-text-2)}
.help-trigger:hover,.help-trigger:focus-visible{background:var(--ds-accent-soft);border-color:var(--ds-accent);color:var(--ds-accent-text)}
.entry-card{background:var(--ds-accent-soft);border-color:var(--ds-line);color:var(--ds-text)}
.entry-card:hover{background:var(--ds-surface-3);border-color:var(--ds-accent)}.entry-card small{color:var(--ds-text-2)}.entry-card b{color:var(--ds-accent-text)}

/* A state, said once for every screen: data-state="controlled | in_remediation | unmanaged | unknown".
   통제 중 and 조치 중 are a colour and their word; 관리 밖 a solid danger edge; 판단 불가 a dashed edge
   and, on a bar, stripes -- it is never drawn as 0 nor as danger. */
.ov-metric[data-state="controlled"] strong{color:var(--ds-ok-text)}
.ov-metric[data-state="in_remediation"] strong{color:var(--ds-info-text)}
.ov-metric[data-state="unmanaged"]{border:1.5px solid var(--ds-danger);background:var(--ds-danger-soft)}
.ov-metric[data-state="unmanaged"] strong{color:var(--ds-danger-text)}
.ov-metric[data-state="unknown"]{border:1.5px dashed var(--ds-unknown);background:var(--ds-unknown-soft)}
.ov-metric[data-state="unknown"] strong{color:var(--ds-unknown-text)}
.tag[data-state="controlled"]{background:var(--ds-ok-soft);color:var(--ds-ok-text);outline:0}
.tag[data-state="in_remediation"]{background:var(--ds-info-soft);color:var(--ds-info-text);outline:0}
.tag[data-state="unmanaged"]{background:var(--ds-danger-soft);color:var(--ds-danger-text);outline:0}
.tag[data-state="unknown"]{background:var(--ds-unknown-soft);color:var(--ds-unknown-text);outline:1px dashed var(--ds-unknown);outline-offset:-1px}

/* Shared pieces a screen composes. */
/* A detail page's parts (portal-ui.js detail; mock v24's detail head and facts grid). The state and why, one line that
   wraps whole words; then the facts an operator decides by, a label over its value under a hairline, two columns or
   more where there is room and one on a phone; a long value folds under its short form, opened under its own line. */
.detail-status{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--ds-space-1) var(--ds-space-2);margin:0 0 var(--ds-space-3);font-size:var(--ds-fs-md);line-height:1.5}
.detail-status>.tag{flex:none}
.detail-why{min-width:0;color:var(--ds-text);overflow-wrap:anywhere}
.detail-status-action{color:var(--ds-accent-text);font-weight:600;white-space:nowrap}
.detail-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));column-gap:var(--ds-space-6);margin:0 0 var(--ds-space-4)}
.detail-fact{display:flex;flex-direction:column;gap:2px;min-width:0;padding:var(--ds-space-2) 0;border-top:1px solid var(--ds-line)}
.detail-fact>dt{display:flex;align-items:center;gap:var(--ds-space-1);color:var(--ds-text-2);font-size:var(--ds-fs-sm);font-weight:500}
.detail-fact>dd{min-width:0;margin:0;color:var(--ds-text);font-size:var(--ds-fs-md);overflow-wrap:anywhere}
/* A name goes to the next line whole (claude-haiku-4-5 broke at its hyphen on a phone); one longer than the line breaks. */
.detail-name,.detail-fold-list>li{display:inline-block;max-width:100%;overflow-wrap:anywhere}
.detail-none{color:var(--ds-text-2)}
.detail-fold{display:block;margin-top:var(--ds-space-1)}
.detail-fold>summary{display:inline-flex;align-items:center;gap:6px;min-height:24px;color:var(--ds-accent-text);font:500 13px/1.5 var(--ds-font);cursor:pointer;list-style:none}
.detail-fold>summary::-webkit-details-marker{display:none}
.detail-fold>summary::before{content:"";width:6px;height:6px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(-45deg);transition:transform var(--ds-dur-fast) var(--ds-ease)}
.detail-fold[open]>summary::before{transform:rotate(45deg)}
.detail-fold>summary:focus-visible{outline:2px solid var(--ds-focus);outline-offset:2px;border-radius:var(--ds-radius-xs)}
.detail-fold-body{padding:4px 0 0;color:var(--ds-text-2);font-size:13px;line-height:1.5}
.detail-fold-list{display:flex;flex-wrap:wrap;gap:var(--ds-space-1) var(--ds-space-3);margin:0;padding:0;list-style:none}
.detail-section-block{margin:0 0 var(--ds-space-5)}
.detail-section-block>h3{margin:0 0 var(--ds-space-2);font-size:var(--ds-fs-lg)}
/* A value nobody could confirm, where the value would be: the grey – with its why in the shared bubble, not a word or a warning chip per row. */
.quiet-unknown{color:var(--ds-text-3)}
/* A node on an evidence path whose name the server said it does not hold: said where the name would be, not drawn as a name. */
.su-node-name[data-name="unknown"]{color:var(--ds-text-3);font-weight:400}

/* A Korean line breaks between words, never inside one; an id, a path or a code value may break anywhere. */
body{word-break:keep-all;overflow-wrap:break-word}
code,kbd,samp,pre,.mono,.drawer-ref{word-break:normal;overflow-wrap:anywhere}
/* A separator dot keeps with the part after it: under keep-all WebKit breaks between '·' and a no-break space, so the
   dot and its space are one unbreakable box (' <span class="ui-dot">·&nbsp;</span>'). */
.ui-dot{white-space:nowrap}
/* A chip or a button is a box of its own in the line, and WebKit breaks between the dot's box and it: the dot and that
   box go in one piece that does not break (' <span class="ui-keep"><span class="ui-dot">·&nbsp;</span><button …>…</button></span>').
   The box's own words wrap as they did, and it is narrower than the line by the dot's room. */
.ui-keep{white-space:nowrap}
:where(.ui-keep > :not(.ui-dot)){white-space:normal;max-width:calc(100% - 1em)}
/* A frame's line written as text (portalUi.frame) holds its ' · ' as text: the dot goes with the word after it, so the
   line may break before the dot and never after it (' <span class="ui-dot-head">· 다음</span>'); the text is unchanged. */
.ui-dot-head{white-space:nowrap}

/* Stage 3 shared parts (every screen uses these names; a screen's own sheet only places them).
   - A figure tile that filters the list below it: button.ov-metric[aria-pressed="true"] is the one on.
   - A list in a card with its head inside: .ds-card > .ds-card-head (h3 + actions) + .table-wrap.
   - The filters in force: .su-active > .su-chip (a chip removes its filter).
   - A list with a detail beside it: .ds-split > .ds-split-main + .ds-side (sticky under the header).
   - A long name cut with its whole in the title: .ds-ellipsis (give title="<whole name>"). */
button.ov-metric[aria-pressed="true"]{border-color:var(--ds-accent);box-shadow:inset 0 0 0 1px var(--ds-accent);background:var(--ds-accent-soft)}
.ds-card{background:var(--ds-surface);border:1px solid var(--ds-line);border-radius:var(--ds-radius);overflow:hidden}
.ds-card-head{display:flex;justify-content:space-between;align-items:baseline;gap:var(--ds-space-3);flex-wrap:wrap;padding:var(--ds-space-4) 20px var(--ds-space-2)}
.ds-card-head h3{margin:0;font-size:var(--ds-fs-lg);font-weight:700}
/* A card whose first line is its heading, with no .ds-card-head: the heading stands at the card's own padding. A
   browser's heading margin put it 16-19px lower than every other card's (데이터 연결's two cards, Gateway 정책's). */
article>:where(h2,h3,h4,h5):first-child{margin-top:0}
/* A fold inside a sentence (원문, 세부 근거 ID -- clickCommon said() and ids()): its head is a word of the line, and what
   it holds opens as a block under that line, as wide as the line's block. As one inline-block the fold was a box of
   the line: opened, the sentence dropped to the box's last line (and was centred again in a centred frame), a fold
   that no longer fitted took the pressed head to the next line, and a table's columns were laid out again. Closed it
   stands as it did, to the pixel: the head's ::before is the list item that carries the browser's own marker. */
.ds-card>.table-wrap{border:0;border-radius:0}
.ds-side{position:sticky;top:var(--ds-space-4);max-height:calc(100vh - 2 * var(--ds-space-4));overflow:auto;background:var(--ds-surface);border:1px solid var(--ds-line);border-radius:var(--ds-radius);padding:var(--ds-space-4)}
@media(max-width:1180px){.ds-side{position:static;max-height:none}}

/* The page says its purpose once, in the shell's line under the title (.page-lead): a screen's own header
   sentence that repeats it is not shown (the views whose track asked: 화면5, Gateway's connections and control, usecases,
   issues, inventory, whose filter head says the rule, and insights, whose own hint line says its sentence). */
:is([data-page="devices"],[data-page="members"],[data-page="organization"],[data-page="reports"],[data-page="evidence"],[data-page="compliance"],[data-page="snapshots"],[data-page="coverage"],[data-page="audit-log"],[data-page="data-connections"],[data-page="notifications"],[data-page="router"],[data-page="router-diagnosis"],[data-page="router-verify"],[data-page="router-choices"],[data-page="click-activity"],[data-page="click-autonomy"],[data-page="click-control"],[data-page="click-patrol"],[data-page="issue-approvals"],[data-page="connections"],[data-page="control"],[data-page="usecases"],[data-page="issues"],[data-page="insights"],[data-page="inventory"],[data-page="my-usage"])>.content-header p:not(.eyebrow),:is([data-page="devices"],[data-page="members"],[data-page="organization"],[data-page="reports"],[data-page="evidence"],[data-page="compliance"],[data-page="snapshots"],[data-page="coverage"],[data-page="audit-log"],[data-page="data-connections"],[data-page="notifications"],[data-page="router"],[data-page="router-diagnosis"],[data-page="router-verify"],[data-page="router-choices"],[data-page="click-activity"],[data-page="click-autonomy"],[data-page="click-control"],[data-page="click-patrol"],[data-page="issue-approvals"],[data-page="connections"],[data-page="control"],[data-page="usecases"],[data-page="issues"],[data-page="insights"],[data-page="inventory"],[data-page="my-usage"]) .content-header>div>p:not(.eyebrow){display:none}

/* notify-inbox.js: the company's inbox under 설정 › 알림 and a member's own notices under 내 사용량 -- a card like
   the section above it, its view buttons a row that keeps clear of the line under it. Its lists and rows are drawn
   by the screen's own sheet (screens-notifications.css, .ntf-). */
.notify-place{margin-top:var(--ds-space-5);padding:18px 19px;border:1px solid var(--ds-line);border-radius:var(--ds-radius);background:var(--ds-surface)}
.notify-place:empty{display:none}
.notify-place h3{margin:0 0 var(--ds-space-1);font-size:var(--ds-fs-lg)}
.notify-place h3:not(:first-child){margin-top:var(--ds-space-5)}
.notify-tabs{display:flex;flex-wrap:wrap;gap:6px;margin:var(--ds-space-3) 0}
/* Which alerts are listed is a choice, drawn as the insights tabs draw theirs (insights.css): the chosen one tinted. */
.notify-tabs button{border-radius:999px}.notify-tabs button[aria-pressed="true"],.notify-tabs button[aria-pressed="true"]:hover{background:var(--ds-accent-soft);border:1px solid var(--ds-accent);color:var(--ds-accent-text);box-shadow:none;filter:none}

/* Its counts are read before the line that says what they hold: the figures in the text colour, a size up (two on a wide screen). */
.notify-counts{margin:var(--ds-space-1) 0 0;color:var(--ds-text-2);font-size:var(--ds-fs-sm)}
.notify-counts b{color:var(--ds-text);font-family:var(--ds-font-num);font-size:var(--ds-fs-lg);font-weight:700;font-variant-numeric:tabular-nums}
.notify-place .ui-skeleton{margin-top:var(--ds-space-3)}
@media(min-width:1700px){.notify-counts{font-size:var(--ds-fs-md)}.notify-counts b{font-size:var(--ds-fs-xl)}}
.notify-place [data-notify-seats]{margin:var(--ds-space-3) 0 0}

/* A day not chosen reads the same in every browser (.ui-date around an input[type=date] that carries data-empty
   while it has no value): the box's own format -- mm/dd/yyyy in an English browser, today in gray in another --
   is hidden until the box is focused or filled, and 날짜 선택 stands in its place. */
.ui-date{position:relative;display:inline-flex}
.ui-date input[data-empty]:not(:focus),.ui-date input[data-empty]:not(:focus)::-webkit-datetime-edit,.ui-date input[data-empty]:not(:focus)::-webkit-datetime-edit-year-field,.ui-date input[data-empty]:not(:focus)::-webkit-datetime-edit-month-field,.ui-date input[data-empty]:not(:focus)::-webkit-datetime-edit-day-field,.ui-date input[data-empty]:not(:focus)::-webkit-datetime-edit-text{color:transparent;-webkit-text-fill-color:transparent}
.ui-date:has(input[data-empty]:not(:focus))::before{content:"날짜 선택";position:absolute;left:11px;top:50%;transform:translateY(-50%);font-size:var(--ds-fs-sm);color:var(--ds-text-3);pointer-events:none}

/* portal-ui.js: what every screen says the same way. */
/* The kind of an amount is a small grey word after it: no chip, no brackets (명세 6.1, 7.1의 8). */
.ui-mark{display:inline;padding:0;border:0;color:var(--ds-text-3);font-size:var(--ds-fs-sm);font-weight:400;vertical-align:baseline}
.ui-money{white-space:nowrap;font-variant-numeric:tabular-nums}
/* The first line (portalUi.firstLine): one sentence with the screen's one large figure in it; the other numbers are
   a line under it (portalUi.subLine), never cards. A figure's colour is its meaning's (data-tone, the palette). */
.ds-first-line{margin:0 0 var(--ds-space-2);color:var(--ds-text);font-size:var(--ds-fs-lg);line-height:1.5;word-break:keep-all;overflow-wrap:break-word}
.ds-first-figure{margin:0 2px;font-size:var(--ds-fs-first);font-weight:700;letter-spacing:-.02em;line-height:1.1;font-variant-numeric:tabular-nums;vertical-align:-3px}
a.ds-first-figure{text-decoration:none;border-bottom:2px solid currentColor}
a.ds-first-figure:hover{border-bottom-width:3px}
.ds-first-line .help-trigger{margin-left:6px;vertical-align:2px}
.ds-mark{display:inline-block;margin-left:6px;padding:1px 6px;border:1px solid var(--ds-line-strong);border-radius:var(--ds-radius-xs);color:var(--ds-text-2);font-size:var(--ds-fs-xs);font-weight:600;vertical-align:3px}
.ds-sub-line{display:flex;flex-wrap:wrap;gap:var(--ds-space-1) var(--ds-space-5);margin:0 0 var(--ds-space-4);padding:0;list-style:none;color:var(--ds-text-2);font-size:var(--ds-fs-sm)}
.ds-sub-line b{margin-left:4px;color:var(--ds-text);font-variant-numeric:tabular-nums}
.ds-sub-line a{color:inherit;text-decoration:none}
.ds-sub-line a:hover .ds-sub-label,.ds-sub-line a:focus-visible .ds-sub-label{text-decoration:underline}
/* A number that opens its list by its screen's own opening (a search's whole query) is a button that reads as the
   link beside it does; the days' small line (insights.css draws it) stands after the figure. */
button.ds-line-go{min-height:0;padding:0;border:0;border-radius:0;background:none;box-shadow:none;color:inherit;font:inherit;text-align:inherit;cursor:pointer}
.ds-sub-line button.ds-line-go:hover .ds-sub-label,.ds-sub-line button.ds-line-go:focus-visible .ds-sub-label{text-decoration:underline}
button.ds-first-figure.ds-line-go{margin:0 2px;border-bottom:2px solid currentColor;font-size:var(--ds-fs-first);font-weight:700;letter-spacing:-.02em;line-height:1.1}
button.ds-first-figure.ds-line-go:hover{border-bottom-width:3px}
.ds-sub-trend{display:inline-block;margin-left:6px;vertical-align:-3px}
.ds-sub-trend .insights-spark{display:block}
:is(.ds-first-figure,.ds-sub-line b)[data-tone="ok"]{color:var(--ds-ok-text)}
:is(.ds-first-figure,.ds-sub-line b)[data-tone="info"]{color:var(--ds-info-text)}
:is(.ds-first-figure,.ds-sub-line b)[data-tone="danger"]{color:var(--ds-danger-text)}
:is(.ds-first-figure,.ds-sub-line b)[data-tone="unknown"]{color:var(--ds-unknown-text)}
:is(.ds-first-figure,.ds-sub-line b)[data-tone="caution"]{color:var(--ds-caution-text)}
:is(.ds-first-figure,.ds-sub-line b)[data-tone="blocked"]{color:var(--ds-blocked)}
/* 확인 필요 is never said by colour alone: its figure stands on a dotted line (the palette: 선은 점선). */
a.ds-first-figure[data-tone="unknown"]{border-bottom-style:dotted}
.ds-sub-line b[data-tone="unknown"]{border-bottom:1px dotted currentColor}
/* The page's one layout (portalUi.page; judged pick a7-directions-r1): head over the whole width, the body, and the
   page's place for its basis and summaries -- beside the body once the body keeps 940px (a 1600px window), under it
   before that, its cards side by side. Beside the body it stays in sight while the body scrolls. A page with no
   rail takes the width; a form keeps a width a line can be read at (.ds-readable). */
.ds-page{display:grid;gap:var(--ds-space-4);align-items:start}
.ds-page-head{min-width:0}
.ds-page-head>:last-child{margin-bottom:0}
.ds-page-main{display:grid;gap:var(--ds-space-4);align-content:start;min-width:0}
.ds-rail{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr));gap:var(--ds-space-4);align-content:start;min-width:0}
.ds-rail .ds-card{background:var(--ds-rail-surface)}
.ds-rail .ds-sub-line{flex-direction:column;gap:0;margin:0}
.ds-rail .ds-sub-line li{display:flex;justify-content:space-between;gap:var(--ds-space-3);padding:6px 0;border-top:1px solid var(--ds-line)}
.ds-rail .ds-sub-line li:first-child{border-top:0}
.ds-rail .ds-sub-line li>a{display:flex;flex:1;justify-content:space-between;gap:var(--ds-space-3)}
@media(min-width:1600px){
  :root{--ds-fs-first:48px}
  .ds-page:not([data-rail="none"]){grid-template-columns:minmax(0,1fr) 340px}
  .ds-page-head{grid-column:1/-1}
  .ds-rail{grid-template-columns:minmax(0,1fr);position:sticky;top:var(--ds-space-4);max-height:calc(100vh - 2 * var(--ds-space-4));overflow:auto}
}
@media(max-width:600px){.ds-first-line{font-size:var(--ds-fs-md)}:root{--ds-fs-first:28px}}
/* A menu's tab row that goes on past an edge fades there on a wide screen too (a phone's row has its own marks below). */
@media(min-width:901px){.menu-tab-row[data-more]{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 40px),transparent);mask-image:linear-gradient(90deg,#000 calc(100% - 40px),transparent)}.menu-tab-row[data-scrolled]{-webkit-mask-image:linear-gradient(90deg,transparent,#000 40px);mask-image:linear-gradient(90deg,transparent,#000 40px)}.menu-tab-row[data-scrolled][data-more]{-webkit-mask-image:linear-gradient(90deg,transparent,#000 40px,#000 calc(100% - 40px),transparent);mask-image:linear-gradient(90deg,transparent,#000 40px,#000 calc(100% - 40px),transparent)}}
/* A panel with nothing, a failed read, a refusal (리디자인 명세 6.8): the parts' .empty frame -- what is missing or not
   read in one line, when it comes or whom to ask, and one button where one helps; a failure is told by its words, not
   by a danger edge. */
.ui-frame{display:grid;gap:var(--ds-space-2);justify-items:center;align-content:start;padding:28px 20px;border:1px dashed var(--ds-line-strong);border-radius:var(--ds-radius);color:var(--ds-text-3);font-size:var(--ds-fs-sm);text-align:center}
.ui-frame b{max-width:60em;color:var(--ds-text);font-size:var(--ds-fs-md);font-weight:600}
.ui-frame b .lx-na{color:var(--ds-text-3);font-weight:500}
/* Its sentence keeps a reading width: a wide screen does not draw a reason and its next step as one 1,000px line. */
.ui-frame p{margin:0;max-width:60em}
/* The lines under a title are one account of what happened, read together: closer to each other than to the title or the button. */
.ui-frame p+p{margin-top:calc(-1 * var(--ds-space-1))}
.ui-frame[data-state="loading"]{border-style:solid;border-color:var(--ds-line);background:linear-gradient(90deg,var(--ds-surface-2) 25%,var(--ds-surface-3) 50%,var(--ds-surface-2) 75%);background-size:200% 100%;animation:ui-wait 1.4s linear infinite}
@keyframes ui-wait{from{background-position:200% 0}to{background-position:-200% 0}}
/* A shape that is visible on the page ground as well as in a card, in both themes: halfway between the line colours. */
.ui-skeleton{--ds-skeleton:color-mix(in srgb,var(--ds-line) 50%,var(--ds-line-strong));display:grid;gap:var(--ds-space-2)}
/* auto-fit: four tiles fill the row as the four drawn after them do (auto-fill left empty tracks, the row ended short). */
.ui-skeleton[data-skeleton="tiles"]{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:var(--ds-space-3)}
.ui-skeleton :is(.ui-skeleton-row,.ui-skeleton-tile,.ui-skeleton-line){display:block;border-radius:var(--ds-radius-xs);background:linear-gradient(90deg,var(--ds-skeleton) 25%,var(--ds-line) 50%,var(--ds-skeleton) 75%);background-size:200% 100%;animation:ui-wait 1.4s linear infinite}
.ui-skeleton-label{grid-column:1/-1;color:var(--ds-text-2);font-size:var(--ds-fs-sm)}
.ui-skeleton-row{height:54px}.ui-skeleton-tile{height:112px;border-radius:var(--ds-radius-s)}.ui-skeleton-line{height:16px;width:72%}.ui-skeleton-line:first-of-type{height:28px;width:40%}
button.danger{background:var(--ds-danger-text);color:var(--ds-surface);border-color:var(--ds-danger-text)}button.danger:hover{background:var(--ds-danger-text);filter:brightness(.92)}
/* The one dialog (명세 9.3): what cannot be taken back, an action that takes a reason, a value shown once. Its buttons are
   the parts' (redesign-rf1.css): 취소 plain, the action blue -- or in red words when it cannot be taken back. */
.ui-confirm{width:min(460px,calc(100vw - 32px));padding:24px;border-radius:14px}
.ui-confirm h3{margin:0 0 var(--ds-space-2);color:var(--ds-text);font-size:var(--ds-fs-xl);font-weight:700;letter-spacing:-.02em}.ui-confirm p{margin:0;color:var(--ds-text-2);font-size:var(--ds-fs-md)}
.ui-confirm .lx-stack{margin-top:var(--ds-space-4)}
.ui-confirm-actions{display:flex;justify-content:flex-end;gap:var(--ds-space-2);margin-top:var(--ds-space-5)}
.ui-tabs{display:flex;gap:var(--ds-space-4);border-bottom:1px solid var(--ds-line);margin:0 0 var(--ds-space-4);overflow-x:auto}
.ui-tabs [role="tab"]{padding:0 0 10px;border:0;border-bottom:2px solid transparent;border-radius:0;background:transparent;color:var(--ds-text-2);font-size:var(--ds-fs-md);font-weight:500;white-space:nowrap}
.ui-tabs [role="tab"]:hover{background:transparent;color:var(--ds-text)}
.ui-tabs [role="tab"][aria-selected="true"]{color:var(--ds-accent-text);border-bottom-color:var(--ds-accent);font-weight:700}
.ui-tab-count{color:var(--ds-text-3);font-size:var(--ds-fs-xs);font-weight:500}

dialog{background:var(--ds-surface);color:var(--ds-text);border:1px solid var(--ds-line);border-radius:var(--ds-radius);box-shadow:var(--ds-shadow-pop)}
dialog::backdrop,dialog.drawer::backdrop{background:rgba(10,16,34,.45)}
dialog.drawer{border-radius:0;border-left:1px solid var(--ds-line)}
dialog.drawer .close{background:var(--ds-surface-3)}
.app-tooltip{background:var(--ds-tip-bg);color:var(--ds-tip-text);border:0;border-radius:var(--ds-radius-s);font-size:var(--ds-fs-sm);box-shadow:var(--ds-shadow-pop)}
.app-view.active{animation:page-in var(--ds-dur) var(--ds-ease)}
@media(max-width:900px){
  :root{--side:0px}
  .sidebar{width:min(280px,86vw);padding:0 12px 14px}
  .sidebar .brand{margin:0 -12px 14px;padding:0 20px}
  .nav-item.active::before{left:-12px}
  .topbar,.menu-tabs{padding-left:16px;padding-right:16px}
  main{padding:16px 16px 40px}
}
@media(max-width:600px){.topbar h1{font-size:var(--ds-fs-lg)}}
/* The path above the title: the product's name in front of it gives way on a phone, where a tab's longer name
   (준수·목적 제한) otherwise broke onto a second line beside the header's buttons. */
.breadcrumb .breadcrumb-root{padding:0}
@media(max-width:600px){.breadcrumb .breadcrumb-root{display:none}}
/* A menu's tabs on a narrow screen: the row's right edge fades where it goes on, and its last tab scrolls clear of the fade;
   scrolled from its start (portal-ui.js data-scrolled), its left edge fades too. The shell leaves the row at the
   start of a tab, the tab's name beginning where the left fade ends (app.js placeTabRow, which gives a row's end
   the space that takes: --menu-tab-tail). A row that goes on past an edge has a mark beside that edge, in the
   row's own margin: the faded name alone did not say the row scrolls (control-g5-r1 at 390: '한도·차'). The marks
   are not pressed; the row is swiped, and the keyboard's focus brings a tab in. */
@media(max-width:900px){.menu-tab-row{padding-right:calc(28px + var(--menu-tab-tail,0px));-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 28px),transparent);mask-image:linear-gradient(90deg,#000 calc(100% - 28px),transparent)}.menu-tab-row[data-scrolled]{-webkit-mask-image:linear-gradient(90deg,transparent,#000 28px,#000 calc(100% - 28px),transparent);mask-image:linear-gradient(90deg,transparent,#000 28px,#000 calc(100% - 28px),transparent)}.menu-tabs{position:relative}.menu-tabs:has(.menu-tab-row[data-scrolled]:not([hidden]))::before,.menu-tabs:has(.menu-tab-row[data-more]:not([hidden]))::after{position:absolute;top:0;bottom:0;display:grid;place-items:center;width:16px;color:var(--ds-text-2);font-size:var(--ds-fs-lg);line-height:1;pointer-events:none}.menu-tabs:has(.menu-tab-row[data-scrolled]:not([hidden]))::before{left:0;content:'\2039'}.menu-tabs:has(.menu-tab-row[data-more]:not([hidden]))::after{right:0;content:'\203A'}}
/* A phone's header: the menu button, the page's name and the icons on one row; the company choice, when shown,
   on the row under them. The account's name is the avatar's alone there. */
@media(max-width:600px){
  .topbar{flex-wrap:nowrap;align-items:center;gap:8px;min-height:0}
  .topbar>div:first-of-type{flex:1 1 0;min-width:0;overflow:hidden}
  /* A menu's name is said whole: a name breaks between its words onto a second line (consistency c3.70 at 390:
     'LLM Gate…'), and only a longer one (an entity's, up to 80 letters) ends in … there. */
  .page-name>h1{white-space:normal;word-break:keep-all;overflow-wrap:anywhere;overflow:hidden;line-height:1.2;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}
  /* The title's help mark is a small one right after the name: the path line above keeps the cell's whole width (a
     tab's name of seven letters is 88 of its 89px; beside the mark it broke after 허용 모델·, c3.72). */
  .page-name{gap:4px}
  .page-name>.page-help{width:16px;height:16px;min-width:16px;font-size:10px}
  
  
  
  /* The account is its avatar alone, without the caret, which gives the name 25px: the longest word of a menu's name,
     'Governance' (95px on Linux Chromium in Pretendard 700), had 93px beside the caret at 390 and broke inside the word
     under a third line (nwconfirm b135, viewer: 'AI Governance' 20px under its box); it has 114px now. The button is
     named under its wrap, past the account's own rules further down. */
  .account-label,.account-caret{display:none}
  
}
/* Narrower phones (360, an Android's width: 'Governance' broke there too, in 83px): the header's sides are 12px, its
   cells' gaps 4px and the icons side by side, the account standing on no gap, which gives the name 114px; under 340
   the sides and the name are a step smaller too (320: 'Agent Universe' two whole lines; on Linux Chromium 'Universe'
   and 'Gateway' are 61px in Pretendard 700 and the name's 59px cut them to 'Univers'/'e' there), and the icons are
   32px squares, named past their own rules further down: 'Governance' broke in the name's 84px at 320 (ph99, GOV
   99dc63bc: 16px under its box); it has 98px. */
@media(max-width:380px){.topbar{padding-left:12px;padding-right:12px;gap:4px}}
@media(max-width:340px){.topbar{padding-left:10px;padding-right:10px}.page-name>h1{font-size:var(--ds-fs-md)}}
/* The shell waiting for the server (app.js wait block): a thin bar under the tabs that takes no room, shown only
   after a call has waited a moment, on every screen; and the line that says the server was not reached. */
/* The bar's own 3px strip, taken back from the flow (no shift), clipping the bar as it runs: it never widens the page. */
.shell-wait{position:relative;height:3px;margin-bottom:-3px;overflow:hidden;z-index:5}
.shell-wait::after{content:'';position:absolute;top:0;left:-30%;width:30%;height:3px;border-radius:0 2px 2px 0;background:var(--ds-accent);animation:shell-wait 1.2s var(--ds-ease) infinite}
@keyframes shell-wait{from{left:-30%}to{left:100%}}
.shell-offline{display:flex;flex-wrap:wrap;align-items:center;gap:var(--ds-space-2) var(--ds-space-3)}
.shell-offline>span{flex:1 1 32em;min-width:0}
.shell-offline[hidden]{display:none}
@media(prefers-reduced-motion:reduce){.shell-wait::after{animation:none;left:0;width:100%;opacity:.55}}
/* Reduced motion: no transition at all. At .01ms every property change (transition-property is all by default) was a
   transition whose first frame drew the old value: a help bubble opened where the last one was (Air c3.77, 600px). */
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:0s!important}}

/* The shell after the user review of 10-06: the header's actions are icons and one account menu (who is signed in,
   the company, 로그아웃); the side bar's workspace card names the company and the role; its foot is the brand and
   the connection (app.js sayHealth). */
.issue-bell-count{min-width:20px;text-align:center;border-radius:999px;line-height:18px;padding:0 6px}
/* Click에게 묻기 (click-ask.js draws the button into the header's slot): its words stay its name, drawn as the icon. */
#click-ask-open{display:inline-grid;place-items:center;width:36px;height:36px;padding:0;border-color:transparent;background:transparent;color:var(--ds-text-2);font-size:0;line-height:0;overflow:hidden}
#click-ask-open[hidden]{display:none}
/* Until that module has drawn it, the slot of a button that will be shown keeps its room (app.js data-opener); a module
   list that failed (module-loader.js data-modules) leaves no empty room. */
html:not([data-modules="failed"]):not([data-modules="partial"]) #click-ask-slot:empty[data-opener="awaited"]{display:block;width:36px;height:36px}
#click-ask-open:hover{background:var(--ds-surface-2);border-color:var(--ds-line);color:var(--ds-text)}
#click-ask-open::before{content:"";width:20px;height:20px;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='4' y='8' width='16' height='12' rx='3'/%3E%3Cpath d='M12 4v4M9 13.5h.01M15 13.5h.01M9.5 17h5'/%3E%3C/svg%3E") center/20px 20px no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='4' y='8' width='16' height='12' rx='3'/%3E%3Cpath d='M12 4v4M9 13.5h.01M15 13.5h.01M9.5 17h5'/%3E%3C/svg%3E") center/20px 20px no-repeat}
.account-wrap{position:relative;margin-left:4px}
.account-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--ds-fs-sm);font-weight:600}
.account-label:empty{display:none}
/* From 1440 an address of 40 letters is said whole (Air c3.79: 'qa-granted-member@demo-company-a.example' cut 43px in
   22rem); every view's title and tab row stayed where they were with the company choice shown, swept 1181-1600.
   28rem, not 26: Linux Chromium draws that address 344px wide in Pretendard, 3px more than 26rem's label (Air f68c0e02);
   at 28rem it is 419px whole, and a longer one at the 448px cap leaves every view's title, tab row and width as they were
   (1440-1920, with and without the company choice). */
.account-panel{position:absolute;right:0;top:calc(100% + 6px);z-index:40;display:flex;flex-direction:column;width:max-content;min-width:250px;max-width:min(420px,calc(100vw - 24px));padding:6px;background:var(--ds-surface);border:1px solid var(--ds-line);border-radius:var(--ds-radius);box-shadow:var(--ds-shadow-pop)}
.account-panel[hidden]{display:none}
.account-panel .session-context{display:flex;max-width:none;margin:0 0 4px;padding:10px 10px 12px;border-bottom:1px solid var(--ds-line);line-height:1.4}
.account-panel .session-context b{font-size:var(--ds-fs-md);white-space:normal;overflow-wrap:anywhere}
.account-panel .session-context small{margin-top:2px;font-size:var(--ds-fs-sm);white-space:normal}
@media(max-width:600px){.account-panel{position:fixed;left:auto;right:12px;top:58px}}

.sign-in-page .auth-banner>div:first-child{display:contents}

/* Every screen's 새로고침 is the one icon button 현황 has (screen-consistency on rh c3.63: AI 자산 said it in words). */
.icon-refresh{display:inline-grid;place-items:center;width:34px;height:34px;min-width:34px;padding:0;border-radius:var(--ds-radius-s)}
.icon-refresh svg{display:block}

/* UX-00 portal-states (portal-states.js): the five empties apart by shape and words, not by colour alone (포털 UI·UX 개선
   1절 4, review 09). A real zero keeps the frame's quiet dashed line; what is not known has a side line of its own kind. */
.ui-frame[data-ui-kind]{position:relative}
.ui-frame[data-ui-kind="unconnected"],.ui-frame[data-ui-kind="unsupported"]{border-style:solid;border-color:var(--ds-line);background:var(--ds-neutral-soft)}
.ui-frame[data-ui-kind="forbidden"]{border-style:solid;border-color:var(--ds-line);border-left:3px solid var(--ds-blocked);background:var(--ds-blocked-soft)}
.ui-frame[data-ui-kind="stale"],.ui-frame[data-ui-kind="failed"]{border-style:solid;border-color:var(--ds-caution-soft);border-left:3px solid var(--ds-caution);background:var(--ds-caution-soft)}
.ui-frame[data-ui-kind="pending"],.ui-frame[data-ui-kind="insufficient"]{border-color:var(--ds-unknown-line);background:var(--ds-unknown-soft)}
.ui-frame[data-ui-kind] .lx-btn+.lx-btn{margin-left:var(--ds-space-2)}
/* A cell's state dot by kind: 미연결 a ring, 권한 없음 a square, 수집 지연·불러오지 못함 a half dot, 판정 보류·자료 부족 the dashed ring. */
.lx-st[data-ui-kind="unconnected"]::before,.lx-st[data-ui-kind="unsupported"]::before{border:1.5px solid var(--ds-neutral);background:transparent}
.lx-st[data-ui-kind="forbidden"]::before{border-radius:2px;background:var(--ds-blocked)}
.lx-st[data-ui-kind="stale"]::before,.lx-st[data-ui-kind="failed"]::before{border:1.5px solid var(--ds-caution);background:linear-gradient(90deg,var(--ds-caution) 50%,transparent 50%)}
.lx-st[data-ui-kind="pending"]::before,.lx-st[data-ui-kind="insufficient"]::before{border:1.5px dashed var(--ds-unknown);background:transparent}
.lx-st[data-ui-kind="none"],.lx-st[data-ui-kind="filtered"]{color:var(--ds-text-3)}
/* 설정 저장 → 발행 → 기기 수신 → 적용 보고: one step a line, its state in words beside its mark. */
.ui-stages{display:flex;flex-wrap:wrap;gap:var(--ds-space-2) var(--ds-space-4);margin:0;padding:0;list-style:none;font-size:var(--ds-fs-sm)}
.ui-stage{display:flex;align-items:flex-start;gap:8px;min-width:0}
.ui-stage+.ui-stage::before{content:"\203A";color:var(--ds-text-3);margin-right:var(--ds-space-2)}
.ui-stage-dot{flex:none;width:10px;height:10px;margin-top:5px;border-radius:50%;border:1.5px solid var(--ds-neutral);background:transparent}
.ui-stage[data-stage-state="done"] .ui-stage-dot{border-color:var(--ds-ok);background:var(--ds-ok)}
.ui-stage[data-stage-state="current"] .ui-stage-dot{border-color:var(--ds-info);background:linear-gradient(90deg,var(--ds-info) 50%,transparent 50%)}
.ui-stage[data-stage-state="failed"] .ui-stage-dot{border-color:var(--ds-caution);background:var(--ds-caution)}
.ui-stage[data-stage-state="unsupported"] .ui-stage-dot{border-color:var(--ds-neutral);background:linear-gradient(135deg,transparent 45%,var(--ds-neutral) 45%,var(--ds-neutral) 55%,transparent 55%)}
.ui-stage[data-stage-state="unknown"] .ui-stage-dot{border-style:dashed;border-color:var(--ds-unknown)}
.ui-stage-body{display:grid;gap:1px;min-width:0}
.ui-stage-name{font-weight:600;color:var(--ds-text)}
.ui-stage-state{color:var(--ds-text-2)}
.ui-stage[data-stage-state="waiting"] .ui-stage-state,.ui-stage[data-stage-state="unsupported"] .ui-stage-state,.ui-stage[data-stage-state="unknown"] .ui-stage-state{color:var(--ds-text-3)}
.ui-stage[data-stage-state="failed"] .ui-stage-state{color:var(--ds-caution-text)}
.ui-stage-meta,.ui-stage-note{color:var(--ds-text-3);font-size:var(--ds-fs-xs);overflow-wrap:anywhere}
/* An internal code a detail keeps: small mono, selectable, with its copy button. */
.ui-raw{display:inline-flex;align-items:center;flex-wrap:wrap;gap:6px;min-width:0}
.ui-raw-label{color:var(--ds-text-3);font-size:var(--ds-fs-xs)}
.ui-raw code{font-size:var(--ds-fs-xs);color:var(--ds-text-2);overflow-wrap:anywhere;user-select:all}

/* UX-10: the readiness message is above the chat input; keep Send at the end. */
[data-page="click-chat"] .lc-compose-f{justify-content:flex-end}

/* UX-04 F04-1: eight rule columns scroll inside their own keyboard-accessible region. */
#web-ai-rules-review-root,#web-ai-rules-review-root [data-web-ai-review-body]{min-width:0;max-width:100%}
#web-ai-rules-review-root .web-ai-review-table{width:100%;min-width:0;max-width:100%;overflow-x:auto;contain:inline-size}
#web-ai-rules-review-root .web-ai-review-table table{min-width:1120px;table-layout:fixed}
#web-ai-rules-review-root .web-ai-review-table th{white-space:normal;vertical-align:top;overflow-wrap:anywhere}
#web-ai-rules-review-root .web-ai-review-table th:first-child{width:240px}
#web-ai-rules-review-root .web-ai-review-table td{vertical-align:top;overflow-wrap:anywhere;word-break:normal}
#web-ai-rules-review-root .web-ai-review-table td small{display:block}
#web-ai-rules-review-root .web-ai-review-table .link-button{padding:0;text-align:left;white-space:normal;overflow-wrap:anywhere}
#web-ai-rules-review-root .web-ai-review-table tr.lx-sel{background:var(--ds-surface-2)}
#web-ai-rules-review-root .web-ai-review-table:focus-visible{outline:2px solid var(--ds-accent);outline-offset:-2px}
