/* PulseBoard renewal 2026-10-18 (lf-sourcetrail-pulse).
   The signed-in V2 shell is shown standalone and inside the Hub workspace frame
   (≈975–1314px wide by default). These rules follow the width of the content area
   (.main container) rather than the window, so tables, page heads and KPI cards
   keep their shape when the sidebar takes part of a narrow frame. */
.shell .main{container:pbmain/inline-size;min-width:0}
.shell .btn,.shell .iconbtn{white-space:nowrap}
.shell .pagehead>div:first-child{min-width:0;flex:1 1 320px}
.shell .pagehead .sub{max-width:72ch}
.shell .card.kpi{height:auto;min-height:112px}
.shell .card.kpi b{overflow-wrap:anywhere;line-height:1.25}
.shell .table .tr>*{min-width:0}
/* Tables switch to row cards by their own width (they often share the row with a side panel). */
.shell .table{container:pbtable/inline-size}
/* Status messages rendered as badges in rows (e.g. STALE reason) must wrap, not run off the row. */
.shell .tr .badge{white-space:normal;max-width:100%;height:auto;line-height:1.45;text-align:left}
.shell .table .tr small,.shell .table .tr .muted{overflow-wrap:anywhere}

/* Monitor list: the 90px "최근" column broke the timestamp over three lines. */
.shell .tr[style*="1.1fr 90px 90px"]{grid-template-columns:minmax(0,1fr) 96px 178px!important;gap:10px}
.shell .tr[style*="1.1fr 90px 90px"]>*:last-child{white-space:nowrap}

@container pbmain (max-width:1100px){
 .shell .grid.cols5{grid-template-columns:repeat(auto-fit,minmax(128px,1fr))!important}
 .shell .card.kpi b{font-size:clamp(20px,2.4cqi,24px)}
}
@container pbmain (max-width:980px){
 .shell .pagehead{flex-wrap:wrap;gap:12px;min-height:0;margin-bottom:16px}
 .shell .pagehead .actions{margin-left:0;flex-wrap:wrap}
 .shell .grid.cols4{grid-template-columns:repeat(2,minmax(0,1fr))!important}
 .shell .grid.cols3{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))!important}
 /* Data rows become compact cards instead of a squeezed multi-column grid. */
 .shell .card .tr{display:flex;flex-wrap:wrap;align-items:center;gap:6px 14px;padding:12px 14px;min-height:0}
 .shell .card .tr.th{display:none}
 .shell .card .tr>*:first-child{flex:1 0 100%;font-weight:700}
 .shell .card .tr>*:first-child>*+*{font-weight:400;color:#61737d}
}
@container pbtable (max-width:860px){
 .shell .table .tr{display:flex;flex-wrap:wrap;align-items:center;gap:6px 14px;padding:12px 14px;min-height:0}
 .shell .table .tr.th{display:none}
 .shell .table .tr>*:first-child{flex:1 0 100%;font-weight:700}
 .shell .table .tr>*:first-child>*+*{font-weight:400;color:#61737d}
 .shell .table .tr .signal-band{width:160px}
}
@container pbmain (max-width:640px){
 .shell .grid.cols5,.shell .grid.cols4{grid-template-columns:repeat(2,minmax(0,1fr))!important}
 .shell .grid.cols2,.shell .grid.cols3{grid-template-columns:minmax(0,1fr)!important}
 .shell .pagehead .actions{width:100%}
 .shell .pagehead .actions .btn{flex:1 1 auto;justify-content:center}
}

/* Public help: the 3-column layout (270/622/360) and the 780px search overflowed tablets. */
.public label.search{max-width:100%;box-sizing:border-box}
@media (max-width:1180px){
 .public .help-layout{grid-template-columns:220px minmax(0,1fr)!important}
 .public .help-layout>.helpaside{grid-column:1/-1;width:auto}
}
@media (max-width:760px){
 .public .help-layout{grid-template-columns:minmax(0,1fr)!important}
}

/* Public header on tablets: menu labels broke onto two lines and 로그아웃 dropped below the bar.
   Brand + account actions stay on the first row; the menu moves to a second, scrollable row. */
.pubnav .publinks a,.pubnav .pubactions .btn{white-space:nowrap}
@media (min-width:701px) and (max-width:1100px){
 .pubnav{height:auto;min-height:72px;padding:10px 0}
 .pubnav .pubrow{flex-wrap:wrap;row-gap:8px}
 .pubnav .pubactions{flex-wrap:nowrap;margin-left:auto}
 .pubnav .publinks{order:3;flex:1 0 100%;display:flex;gap:22px;overflow-x:auto;margin:0;padding:4px 0 2px}
}

/* Help: manual + video under the search */
.pb-help-resources{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:14px 0 0}
.pb-help-resources>span{color:#61737d;font-size:14px}
.pb-help-resources .btn{min-height:42px;font-size:14px}

/* Public pricing: three plan cards stayed side by side on phones and broke values per character. */
@media (max-width:1000px){.public .pubsection .grid.cols3{grid-template-columns:repeat(auto-fit,minmax(210px,1fr))!important}}
@media (max-width:640px){.public .pubsection .grid.cols3{grid-template-columns:minmax(0,1fr)!important}.public .pubsection .grid.cols3>.card{min-height:0!important}}

/* Maintenance week grid: 8 columns were clipped on narrow content (days after the 4th hidden). */
@container pbmain (max-width:760px){
 .shell .week{overflow-x:auto;grid-template-columns:72px repeat(7,minmax(64px,1fr))}
}

/* Contrast (WCAG AA 4.5:1 for normal text; audit 2026-10-18) */
.publinks a.active{color:#077650}
.shell .kpi small{color:#56676f}
.shell .th,.shell .tr.th{color:#526169}
.shell .mhead .x{color:#4d5c64}
.shell .mhead .x:hover{color:#1d2b33}

/* First run (A-10): three steps to the first check result */
.shell .pb-first-run{margin:0 0 16px;border-color:#9ee0c4;display:grid;gap:14px}
.pb-fr-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;flex-wrap:wrap}
.pb-fr-head small{display:block;color:#077650;font-size:13px;font-weight:800;letter-spacing:.04em}
.pb-fr-head h2{margin:2px 0 4px;font-size:20px}
.pb-fr-head p{margin:0;color:#56676f;font-size:15px}
.pb-fr-steps{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.pb-fr-steps li{display:flex;gap:10px;align-items:flex-start;padding:12px;border:1px solid #e1ebe7;border-radius:10px;background:#fbfdfc}
.pb-fr-steps b{flex:none;display:grid;place-items:center;width:28px;height:28px;border-radius:50%;background:#e7f7f0;color:#077650;font-size:14px}
.pb-fr-steps strong{display:block;font-size:15px}
.pb-fr-steps span{display:block;margin-top:3px;color:#56676f;font-size:14px;line-height:1.55}
.pb-field-msg{display:block;margin-top:6px;font-size:13px;color:#4d5c64}
.pb-field-msg.is-error{color:#b42318}
@container pbmain (max-width:760px){.pb-fr-steps{grid-template-columns:minmax(0,1fr)}}

/* Contrast and focus round 2 (audit 2026-10-19) */
:where(.public,.shell,.authbg) .eyebrow{color:#077650}
:where(.public,.shell,.authbg) .input:focus,:where(.public,.shell,.authbg) label.search input:focus{outline:none;border-color:#118c65;box-shadow:0 0 0 3px rgba(17,140,101,.28)}
:where(.public,.shell,.authbg) label.search:focus-within{border-color:#118c65;box-shadow:0 0 0 3px rgba(17,140,101,.28)}
/* Home page extra section (pulse-v2-home-expanded.css) colours to 4.5:1 */
#pb-extended-home .pb-value-number,#pb-extended-home .pb-step>span,.pb-value-number,.pb-step>span{color:#077650}
#pb-extended-home .pb-detail-copy p,#pb-extended-home .pb-detail-bullets span,.pb-detail-copy p,.pb-detail-bullets span{color:#56676f}
#pb-extended-home .pb-value-number{font-size:13px}

/* Contrast round 3 (audit 2026-10-19 08:37) */
.public .pubsection p,.public .pubsection .sub,#pb-extended-home p.pb-max-intro{color:#4f6069}
.authbg .sub,.statuspage .sub,.statuspage .muted,.pb-help-contact p{color:#56676f}
.shell .kpi em{color:#077650}
body.pb-v2-public-route .pb-v2-public-footer,body.pb-v2-public-route .pb-v2-public-footer nav a{color:#4f6069}

/* Contrast round 4 (audit 2026-10-19 09:3x, signed-in screens + password reset) */
.shell .sub,.authbg .sub,.shell .card p:not([class]){color:#56676f}
.shell .badge.gray,.public .badge.gray{color:#4d5c64}
