/* BLACKSNOW V33: unified Perfex visual language, no application logic */
body.portal-body{
  --portal-page:#F8F6F8;--portal-surface:#FFFFFF;--portal-ink:#211D26;
  --portal-muted:#6E6571;--portal-stroke:#E8E1E7;--portal-accent:#88455A;
  --portal-accent-soft:#F4EAEE;--portal-sidebar:#211E27;--portal-radius:18px;
  --portal-shadow:0 9px 32px rgba(38,24,35,.035);
  font-size:14px;line-height:1.55;background:var(--portal-page);color:var(--portal-ink);
}
body.portal-body .app{grid-template-columns:246px minmax(0,1fr);background:var(--portal-page)}
body.portal-body .sidebar{background:var(--portal-sidebar);padding:25px 15px 20px;gap:17px}
body.portal-body .sidebar .brand{padding:0 10px 12px}
body.portal-body .sidebar .bs-logo{width:200px;max-width:100%;max-height:58px}
body.portal-body .sidebar-caption{font-size:10px;margin-bottom:3px;padding:11px 13px 5px;letter-spacing:.14em;color:#BDAFBC}
body.portal-body .sidebar .nav-item{min-height:43px;padding:10px 12px;margin:2px 0;gap:10px;border-radius:12px;font-size:13px;line-height:1.35}
body.portal-body .sidebar .ni{width:21px;font-size:17px}
body.portal-body .sidebar .nav-item.active{background:#88455A!important;border:1px solid #A86B7E!important;box-shadow:inset 3px 0 #E2B8C5!important}
body.portal-body .topbar{height:77px;padding:0 clamp(20px,3.1vw,52px);background:#fff;z-index:8}
body.portal-body .content{max-width:1520px;margin:0 auto;padding:clamp(25px,3vw,44px) clamp(20px,3.1vw,52px) 85px;min-width:0}
body.portal-body .content > *{min-width:0}
body.portal-body h1{font-size:clamp(32px,3.05vw,47px);line-height:1.09;letter-spacing:-.047em}
body.portal-body h2{font-size:clamp(19px,1.75vw,25px);line-height:1.19;letter-spacing:-.027em}
body.portal-body h3{font-size:17px;line-height:1.32}
body.portal-body :is(.intro,.v21-head,.v22-head,.finance-intro,.service-head){margin-bottom:24px}
body.portal-body :is(.intro,.v21-head,.v22-head,.service-head) p{color:var(--portal-muted);font-size:14px;line-height:1.65}
body.portal-body :is(.eyebrow,.v21-eyebrow,.v22-eyebrow){font-size:10px;letter-spacing:.13em;font-weight:800;text-transform:uppercase}
body.portal-body :is(.panel,.v21-panel,.v22-panel,.finance-panel,.finance-kpi,.invoice-metric,.invoice-table-panel,.service-panel,.service-kpi,.v21-project,.v21-kpi,.v22-kpi,.v22-article){background:#fff;border:1px solid var(--portal-stroke);border-radius:var(--portal-radius);box-shadow:var(--portal-shadow);color:var(--portal-ink);min-width:0}
body.portal-body :is(.v21-panel,.v22-panel,.finance-panel,.panel){padding:clamp(18px,1.75vw,27px)}
body.portal-body :is(.panel,.v21-panel,.v22-panel,.finance-panel,.finance-kpi,.invoice-metric,.service-kpi,.v21-kpi,.v22-kpi){transition:border-color .2s ease}
body.portal-body :is(.panel,.v21-panel,.v22-panel,.finance-panel,.finance-kpi,.invoice-metric,.service-kpi,.v21-kpi,.v22-kpi):hover{border-color:#D4C5CE}
body.portal-body :is(.panel.dark,.finance-kpi-dark,.invoice-metric.important,.detail-hero,.finance-document-header){background:#29242E!important;border-color:#29242E!important;color:white!important}
body.portal-body :is(.panel.dark,.finance-kpi-dark,.invoice-metric.important,.detail-hero,.finance-document-header) :is(h1,h2,h3,strong){color:white!important}
body.portal-body :is(.panel.dark,.finance-kpi-dark,.invoice-metric.important,.detail-hero,.finance-document-header) :is(p,small,span){color:#E1D7DE}
body.portal-body :is(.v21-kpis,.v22-kpis,.service-kpis,.finance-metrics,.invoice-metrics){gap:14px;margin-bottom:19px}
body.portal-body :is(.v21-kpi,.v22-kpi,.finance-kpi,.service-kpi,.invoice-metric){padding:22px 23px;min-height:132px;display:flex;flex-direction:column;justify-content:center}
body.portal-body :is(.v21-kpi,.v22-kpi,.finance-kpi,.service-kpi,.invoice-metric) strong{font-variant-numeric:tabular-nums;line-height:1.12;overflow-wrap:anywhere}
body.portal-body :is(.v21-kpi,.v22-kpi,.finance-kpi,.service-kpi,.invoice-metric) :is(small,.hint){font-size:12px;color:var(--portal-muted);line-height:1.55}
body.portal-body .v21-welcome{background:#F1E5EA;border:1px solid #E6D6DE;border-radius:20px;padding:27px 30px;gap:18px}
body.portal-body .v21-welcome :is(h1,h2){color:#211D26}
body.portal-body .v21-welcome p{color:#5D4B56;line-height:1.6}
body.portal-body .v21-welcome .v21-eyebrow{color:#85485B}
body.portal-body .v21-welcome .btn{white-space:normal}
body.portal-body .v21-banner{background:#29242E;border:1px solid #403440;border-radius:20px;min-height:0}
body.portal-body .v21-banner p{color:#DACFD6}
body.portal-body .v21-banner .v21-eyebrow{color:#D6A7B7}
body.portal-body .v21-dot,body.portal-body .v22-icon{background:#F1E4EA;color:#83465A;border-radius:12px}
body.portal-body .v21-datum{border-color:#EAE2E7}
body.portal-body .v21-progress,body.portal-body .v22-progress{background:#F0E6EC}
body.portal-body .v21-progress span,body.portal-body .v22-progress span{background:#A76077}
body.portal-body :is(.v21-message.staff,.v21-step.done,.v21-note,.v22-note){background:#F5EBEF;border-color:#EAD8E2;color:#604B58}
body.portal-body :is(.v21-message p,.v22-message p,.v21-project p,.v22-article p,.v21-event p){color:#5F5863}
body.portal-body .v21-step{border-color:#E8E1E7}
body.portal-body .v21-projectfoot a,body.portal-body .v21-table a,body.portal-body .v22-table a,body.portal-body .finance-table-link{color:#824356}
body.portal-body :is(.v21-panelhead,.v22-panelhead,.panel-title){align-items:baseline;gap:15px}
body.portal-body :is(.v21-panelhead h2,.v22-panelhead h2,.panel-title h2){font-size:20px}
body.portal-body :is(.v21-tablewrap,.v22-tablewrap,.finance-table-scroll,.table-wrap,.invoice-table-panel .table-wrap,.service-table-wrap){max-width:100%;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-color:#C8A7B5 #F4EFF2;scrollbar-width:thin}
body.portal-body :is(.v21-tablewrap,.v22-tablewrap,.finance-table-scroll,.table-wrap,.service-table-wrap)::-webkit-scrollbar{height:9px}
body.portal-body :is(.v21-tablewrap,.v22-tablewrap,.finance-table-scroll,.table-wrap,.service-table-wrap)::-webkit-scrollbar-thumb{background:#C8A7B5;border-radius:20px}
body.portal-body :is(table,.finance-table,.v21-table,.v22-table){border-collapse:collapse;max-width:none}
body.portal-body :is(table,.finance-table,.v21-table,.v22-table) th{color:#756D78;font-size:10px;letter-spacing:.095em;background:#FBF9FA;border-bottom:1px solid #E7DFE5}
body.portal-body :is(table,.finance-table,.v21-table,.v22-table) td{border-bottom:1px solid #EFE9ED;color:#302B34;font-size:12.5px;line-height:1.55}
body.portal-body :is(table,.finance-table,.v21-table,.v22-table) tbody tr:hover{background:#FCFAFB}
body.portal-body :is(.finance-kpi,.service-kpi,.invoice-metric) .value{font-variant-numeric:tabular-nums}
body.portal-body .finance-tabs{border-bottom-color:#E7DFE5;gap:8px}
body.portal-body .finance-tabs a{color:#665B66;border-radius:10px 10px 0 0}
body.portal-body .finance-tabs a.current{background:#F3E8ED;color:#783F53;box-shadow:inset 0 -3px #9A536A}
body.portal-body .finance-help{background:#F5EBEF;border-color:#E8D8E0;border-radius:18px}
body.portal-body .finance-help p{color:#64535E}
body.portal-body :is(.finance-table-link,.finance-kpi small,.finance-kpi>span,.finance-facts dt,.finance-totals>div){color:#645B66}
body.portal-body .finance-kpi-dark small,body.portal-body .finance-kpi-dark>span{color:#D9C7D3}
body.portal-body .service-actions,body.portal-body .v21-actions,body.portal-body .v22-actions{gap:10px;flex-wrap:wrap}
body.portal-body .btn{min-height:40px;padding:10px 17px;border-radius:999px;font-size:12px;transition:background .2s ease,border-color .2s ease}
body.portal-body .btn.primary{background:#88455A!important;color:#fff!important;border-color:#88455A!important}
body.portal-body .status{font-size:11px;font-weight:700;line-height:1.25;white-space:normal}
body.portal-body :is(.field input,.field textarea,.field select,.search,.v22-field input){border:1px solid #DCCED6;border-radius:12px;background:#fff;color:#2A2630;min-height:43px}
body.portal-body :is(.field input,.field textarea,.field select,.search,.v22-field input):focus{outline:3px solid #D9A6B8;outline-offset:1px;border-color:#9B5970}
body.portal-body .v22-day.today{background:#F7EDF2;border-color:#BF91A3}
body.portal-body .v22-calitem{background:#F4EAF0;color:#76495C}
body.portal-body .v22-calitem.peach{background:#F5EDE7;color:#80634C}
body.portal-body .v22-dot{background:#A76077}
body.portal-body .v22-article small{color:#855366}
body.portal-body :is(.v22-row,.v21-list a,.v21-serviceblock,.document,.datum){border-bottom-color:#EEE7EC}
body.portal-body :is(.v22-row a,.v21-list a,.v21-projectfoot a){color:#85485D}
body.portal-body .v22-field{color:#534A55}
body.portal-body :is(.v21-panel,.v22-panel,.finance-panel,.panel,.service-panel) :is(p,small){overflow-wrap:break-word}
body.portal-body a:focus-visible,body.portal-body button:focus-visible{outline:3px solid #B77E92;outline-offset:3px}
@media (max-width:1200px){body.portal-body .app{grid-template-columns:224px minmax(0,1fr)}body.portal-body .content{padding:30px 25px 72px}body.portal-body .sidebar .bs-logo{width:185px}body.portal-body .v21-layout,body.portal-body .v22-grid{grid-template-columns:minmax(0,1fr)}}
@media (max-width:900px){body.portal-body .v21-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}body.portal-body :is(.finance-metrics,.service-kpis,.v22-kpis){grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:760px){body.portal-body .app{display:block}body.portal-body .sidebar{width:min(86vw,294px);position:fixed;z-index:40;top:0;bottom:0;left:0;height:100dvh;transform:translateX(-110%);box-shadow:14px 0 40px rgba(25,17,27,.2)}body.portal-body .sidebar.show{transform:translateX(0)}body.portal-body .mobile-nav-shade.show{z-index:39}body.portal-body .topbar{height:68px;padding:0 16px}body.portal-body .content{padding:25px 16px 70px}body.portal-body :is(.finance-metrics,.service-kpis,.v22-kpis,.v21-kpis){grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}body.portal-body :is(.v21-kpi,.v22-kpi,.finance-kpi,.service-kpi,.invoice-metric){padding:18px;min-height:118px}body.portal-body .v21-kpi strong{font-size:clamp(21px,5.5vw,29px)}body.portal-body .v21-welcome{padding:22px;flex-direction:column;align-items:flex-start}body.portal-body .v21-panel,body.portal-body .v22-panel,body.portal-body .finance-panel{padding:19px}body.portal-body .v21-panelhead,body.portal-body .v22-panelhead{align-items:flex-start;flex-wrap:wrap}body.portal-body .finance-tabs{margin-bottom:17px}body.portal-body .v22-aside,body.portal-body .v21-aside{grid-template-columns:1fr}body.portal-body .v22-week{grid-template-columns:repeat(2,minmax(0,1fr))}body.portal-body .v21-cardgrid,body.portal-body .v22-articles{grid-template-columns:1fr}body.portal-body .finance-help{flex-direction:column;align-items:flex-start}}
@media (max-width:410px){body.portal-body :is(.finance-metrics,.service-kpis,.v22-kpis,.v21-kpis){grid-template-columns:1fr 1fr}body.portal-body :is(.v21-kpi,.v22-kpi,.finance-kpi,.service-kpi,.invoice-metric){padding:15px;min-height:111px}body.portal-body .v21-kpi strong{font-size:24px}body.portal-body .finance-kpi strong{font-size:23px}body.portal-body .breadcrumbs{font-size:11px}}
@media print{body.portal-body .sidebar,body.portal-body .mobile-menu,body.portal-body .top-actions{display:none!important}body.portal-body .app{display:block!important}body.portal-body .content{max-width:none;padding:0!important}body.portal-body :is(.panel,.v21-panel,.v22-panel,.finance-panel,.service-panel){box-shadow:none!important;break-inside:avoid}}
@media (prefers-reduced-motion:reduce){body.portal-body *{transition:none!important;animation:none!important}}
