/* Shared portal design. Loaded after legacy layout CSS and before page-specific styles. */
.wp-workspace{max-width:1480px;margin-inline:auto;--record-accent:#315fe1}.wp-workspace>.container-fluid{padding-inline:0}.wp-workspace .vm-hero{margin-bottom:24px}.wp-workspace.wp-invoices .vm-hero,.wp-workspace.wp-expenses .vm-hero,.wp-workspace.wp-quotes .vm-hero{background:linear-gradient(115deg,#123a41,#246472)}.wp-workspace.wp-documents .vm-hero,.wp-workspace.wp-document-requests .vm-hero{background:linear-gradient(115deg,#282347,#51417e)}
.wp-actions{display:flex;justify-content:space-between;align-items:center;gap:14px;flex-wrap:wrap;padding:14px 18px;border:1px solid #e3eaf5;background:#fff;border-radius:12px;margin-bottom:22px}.wp-actions-label{font-size:12px;font-weight:650;color:#5a6d8a}.wp-actions>.d-flex{flex-wrap:wrap}.wp-actions a{font-size:12px!important}
.wp-workspace .tv-stat-card>.d-flex:not(.tv-stat-icon){grid-column:1/-1}
.wp-section-label{font-size:10px;text-transform:uppercase;letter-spacing:1.3px;font-weight:700;color:#7a8ba4;margin:24px 0 13px}.wp-workspace .tv-stat-card{border-radius:14px;box-shadow:0 3px 16px #203c6505}.wp-workspace .tv-stat-icon{border-radius:12px}.wp-workspace .tv-card{border-radius:15px;box-shadow:0 3px 16px #203c6505}.wp-workspace .wp-filter-form{row-gap:12px}.wp-filter-title{display:flex;gap:8px;align-items:center;font-size:12px;color:#4a6286;font-weight:650;margin-bottom:14px}.wp-filter-title i{color:#6e89b5}
.wp-workspace .wp-record-table{width:100%;font-size:12px;border-collapse:collapse}.wp-workspace .wp-record-table th{background:#f7f9fd;color:#70839e;padding:15px 17px;font-size:10px;text-transform:uppercase;letter-spacing:.65px;font-weight:700;white-space:nowrap;border-bottom:1px solid #e6edf7}.wp-workspace .wp-record-table td{padding:16px 17px;border-bottom:1px solid #edf1f7;vertical-align:middle;color:#304560}.wp-workspace .wp-record-table tbody tr:hover{background:#fafcff}.wp-workspace .wp-record-table .badge{border-radius:6px;font-size:10px;padding:5px 8px}.wp-workspace .wp-record-table .btn,.wp-workspace .wp-record-table .tv-btn{font-size:11px;border-radius:8px;min-width:31px;min-height:31px}.wp-workspace .wp-record-table .dropdown-menu{min-width:175px}.wp-workspace .wp-record-table td>strong,.wp-workspace .wp-record-table td>.fw-semibold{color:#213957}.wp-workspace .wp-record-table td:first-child a:not(.btn):not(.tv-btn){color:#2b5197}
.wp-workspace .wp-empty-cell{padding:0!important;text-align:center}.wp-workspace .wp-empty-cell .vm-empty{padding:42px 22px}.wp-workspace .wp-record-table th:first-child,.wp-workspace .wp-record-table td:first-child{padding-left:22px}.wp-workspace .wp-record-table th:last-child,.wp-workspace .wp-record-table td:last-child{padding-right:22px}
.wp-workspace .wp-empty-cell .vm-empty .btn,.vm-page .table .vm-empty .btn{min-height:40px;padding:10px 16px!important;font-size:12px}
@media(max-width:767px){.wp-actions{padding:13px;gap:12px}.wp-actions>div{width:100%}.wp-actions a{padding:8px 11px!important}.wp-workspace .wp-record-table{min-width:700px}.wp-workspace .wp-record-table td,.wp-workspace .wp-record-table th{padding:12px}.wp-workspace .vm-hero{margin-bottom:18px}}
/* Module layouts: page-level composition for campaign and activity workspaces. */
.vm-page{max-width:1480px;margin-inline:auto;padding:0}
.vm-hero{display:grid;grid-template-columns:minmax(0,1fr) 280px;align-items:center;gap:30px;background:linear-gradient(115deg,#112340,#254b80);border-radius:20px;padding:30px 34px;margin-bottom:24px;color:#fff;overflow:hidden}
.vm-eyebrow{display:block;font-size:10px;font-weight:700;letter-spacing:1.8px;text-transform:uppercase;color:#bbd0f6;margin-bottom:12px}
.vm-hero h1{font-size:clamp(25px,2.7vw,37px);font-weight:750;line-height:1.2;letter-spacing:-.8px;color:#fff;margin:0 0 12px}
.vm-hero p{font-size:13px;line-height:1.9;color:#d5e2f7;max-width:570px;margin:0}
.vm-hero-actions{display:flex;gap:12px;align-items:center;margin-top:20px;flex-wrap:wrap}.vm-action{display:inline-flex;gap:9px;align-items:center;background:#fff;border:1px solid #fff;padding:11px 17px;color:#214475;border-radius:9px;font:inherit;font-size:12px;font-weight:650;text-decoration:none}.vm-action:hover{background:#eaf0ff;color:#214475}
.vm-hero-aside{background:#ffffff08;border:1px solid #647da1;border-radius:15px;padding:21px}.vm-hero-icon{width:43px;height:43px;display:grid;place-items:center;background:#ffffff15;border:1px solid #ffffff20;border-radius:12px;font-size:21px;color:#d3e2ff;margin-bottom:14px}.vm-hero-aside strong{display:block;font-size:13px;font-weight:600;color:#fff;margin-bottom:7px}.vm-hero-aside span{display:block;font-size:11px;line-height:1.9;color:#cfddf2}
.vm-steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:13px;margin-bottom:28px}.vm-step{display:flex;gap:12px;padding:16px 18px;border:1px solid #e3eaf5;border-radius:12px;background:#fff}.vm-step-number{width:28px;height:28px;background:#edf2ff;color:#4469c4;border-radius:9px;display:grid;place-items:center;font-size:10px;font-weight:700;flex-shrink:0}.vm-step strong{display:block;font-size:12px;color:#233b5b}.vm-step small{display:block;font-size:11px;line-height:1.7;color:#71829c;margin-top:4px}
.vm-heading{display:flex;align-items:center;justify-content:space-between;gap:15px;flex-wrap:wrap;margin:26px 0 16px}.vm-heading h2{font-size:19px;font-weight:700;color:#213757;margin:0 0 5px}.vm-heading p{font-size:12px;color:#6b7d97;margin:0}.vm-count{font-size:11px;background:#edf2ff;color:#4c69ac;padding:5px 10px;border-radius:7px;font-weight:600}
.vm-filters{display:flex;gap:10px;align-items:center;flex-wrap:wrap;padding:17px 19px;border-bottom:1px solid #e9eff8;background:#fff;border-radius:14px 14px 0 0}.vm-search{position:relative;flex:1;min-width:200px}.vm-search i{position:absolute;top:12px;left:12px;color:#8494ac}.vm-search input{padding-left:35px!important}.vm-filters .form-select{width:auto;min-width:130px}.vm-filters .form-control,.vm-filters .form-select{font-size:12px}.vm-page .tv-card{overflow:hidden}.vm-page .tv-stat-card{height:100%}.vm-page .tv-stat-card>.d-flex{grid-column:1/-1}.vm-page .table{min-width:720px}.vm-page .table td:first-child a:not(.btn):not(.tv-btn){color:#244d96;font-weight:600}.vm-page .table .btn{min-width:31px;min-height:31px;padding:5px 8px!important}.vm-page .table .progress{border-radius:8px;margin-top:6px;background:#eaf2ee}.vm-page .table .progress-bar{border-radius:8px}.vm-page .pagination{margin:0}.vm-page .vm-pagination{padding:16px 20px;border-top:1px solid #e9eff8}
.vm-empty{max-width:510px;margin:auto;padding:45px 20px;text-align:center}.vm-empty-icon{width:68px;height:68px;border-radius:21px;display:grid;place-items:center;background:#edf2ff;color:#6885d1;font-size:29px;margin:0 auto 19px}.vm-empty h3{font-size:19px;font-weight:700;color:#233957;margin:0 0 11px}.vm-empty p{font-size:12px;color:#6e809b;line-height:1.9;margin-bottom:19px}.vm-tip{display:flex;gap:10px;background:#eef4ff;border:1px solid #dce7fb;border-radius:11px;padding:15px 18px;font-size:11px;line-height:1.8;color:#526c94;margin-top:17px}.vm-tip i{font-size:15px;color:#5074c9}
.vm-modal-note{background:#eef4ff;border:1px solid #dfe9fb;border-radius:10px;padding:13px 15px;color:#55709a;font-size:12px;line-height:1.8;margin-bottom:19px}.vm-action:focus-visible{outline:3px solid #9ab7ff;outline-offset:4px}
.vm-detail>.d-flex:first-child{background:#fff;border:1px solid #e3eaf5;border-radius:16px;padding:23px;flex-wrap:wrap}.vm-detail h2{font-size:24px;letter-spacing:-.5px}.vm-detail>.d-flex:first-child form{border-left:1px solid #e3eaf5;padding-left:20px}.vm-page .list-group-item{border-color:#edf1f8}.vm-page .list-group-item:last-child{border-bottom:0}
@media(max-width:767px){.vm-hero{grid-template-columns:1fr;padding:24px;gap:22px}.vm-hero-aside{display:none}.vm-steps{grid-template-columns:1fr;gap:8px}.vm-step{padding:12px 15px}.vm-filters{padding:14px}.vm-search{width:100%;flex-basis:100%}.vm-filters .form-select{flex:1;min-width:0}.vm-empty{padding:34px 15px}.vm-hero h1{font-size:27px}}
body.vp-workspace {
    --ui-font: 'VisaPilot Sans', 'Segoe UI', -apple-system, BlinkMacSystemFont, Arial, sans-serif;
    --ui-ink: #192b47;
    --ui-muted: #63748d;
    --ui-line: #e3eaf3;
    --ui-canvas: #f6f8fc;
    --ui-primary: var(--brand-primary, var(--primary, #2454eb));
    --ui-radius: 14px;
    --ui-shadow: 0 3px 16px rgb(20 43 80 / 4%);
    --bs-body-font-family: var(--ui-font);
    --bs-body-color: var(--ui-ink);
    --bs-border-color: var(--ui-line);
    --bs-border-radius: 10px;
    --bs-border-radius-lg: 14px;
    font-family: var(--ui-font);
    font-size: 14px;
    line-height: 1.6;
    color: var(--ui-ink);
    background-color: var(--ui-canvas);
    -webkit-font-smoothing: antialiased;
    text-rendering: optimizeLegibility;
}
.vp-workspace :where(h1,h2,h3,h4,h5,h6,.fw-bold,.tv-page-title,.sa-page-title,.sa-card-title,.sa-metric-val) {
    font-family: var(--ui-font);
    line-height: 1.3;
    letter-spacing: -.025em;
}
.vp-workspace :where(h1,h2,h3,h4,h5,h6) { font-weight: 700; }
.vp-workspace :where(.tv-page-title,.sa-page-title) { font-size: clamp(21px, 2.1vw, 28px); font-weight: 700; }
.vp-workspace :where(.tv-page-sub,.sa-page-sub,.sa-card-sub) { color: var(--ui-muted); font-size: 12px; line-height: 1.7; }
.vp-workspace .text-muted { color: var(--ui-muted) !important; }
.vp-workspace :where(.tv-content,.sa-content,.cp-content) { padding: clamp(16px, 2.3vw, 30px); min-width: 0; }
.vp-workspace :where(.tv-main,.sa-main,.cp-main,.pp-main) { min-width: 0; }
.vp-workspace :where(.tv-page-header) { gap: 16px; flex-wrap: wrap; margin-bottom: 24px; }
.vp-workspace :where(.tv-topbar,.sa-topbar,.cp-topbar) { border-bottom-color: var(--ui-line); box-shadow: 0 2px 9px rgb(20 43 80 / 3%); }
.vp-workspace :where(.tv-topbar-title,.cp-topbar h1) { font-family: var(--ui-font); font-size: 18px; font-weight: 700; }
.vp-workspace :where(.card,.tv-card,.sa-card,.cp-card,.pp-card,.sa-metric-card) {
    border: 1px solid var(--ui-line);
    border-radius: var(--ui-radius);
    background-color: #fff;
    box-shadow: var(--ui-shadow);
}
.vp-workspace :where(.card-header,.tv-card-header,.sa-card-head) { background-color: #fff; border-bottom: 1px solid var(--ui-line); padding: 17px 21px; }
.vp-workspace :where(.card-body,.tv-card-body,.sa-card-body) { padding: 22px; }
.vp-workspace :where(.card-title,.tv-card-title,.sa-card-title) { font-size: 15px; font-weight: 700; }
.vp-workspace :where(.tv-stat-card) { display: grid; grid-template-columns: 44px minmax(0, 1fr); gap: 3px 13px; padding: 20px; border: 1px solid var(--ui-line); border-radius: var(--ui-radius); background: #fff; box-shadow: var(--ui-shadow); }
.vp-workspace :where(.tv-stat-card) > .tv-stat-icon { grid-row: 1 / 3; width: 44px; height: 44px; border-radius: 12px; font-size: 20px; }
.vp-workspace :where(.tv-stat-card) > :is(.tv-stat-value,.tv-stat-label) { grid-column: 2; }
.vp-workspace :where(.tv-stat-value,.sa-metric-val) { font-family: var(--ui-font); font-size: 28px; font-weight: 700; line-height: 1.2; font-variant-numeric: tabular-nums; }
.vp-workspace :where(.tv-stat-label,.sa-metric-label) { font-size: 11px; color: var(--ui-muted); line-height: 1.5; }
.vp-workspace :where(.btn,.tv-btn,.sa-btn,.auth-btn) { font-family: var(--ui-font); font-size: 12px; font-weight: 600; min-height: 40px; padding: 9px 15px; border-radius: 9px; gap: 7px; line-height: 1.5; transition: background-color .15s, border-color .15s, box-shadow .15s; }
.vp-workspace :where(.btn-primary,.tv-btn-primary,.sa-btn-primary) { background: var(--ui-primary); border-color: var(--ui-primary); color: #fff; box-shadow: 0 2px 5px rgb(20 43 80 / 8%); }
.vp-workspace :where(.btn-primary,.tv-btn-primary,.sa-btn-primary):hover { filter: brightness(.95); color: #fff; }
.vp-workspace :where(.btn-sm,.table .btn,.btn-group-sm>.btn) { min-height: 32px; padding: 6px 10px; font-size: 11px; }
.vp-workspace :where(.btn-outline-secondary,.tv-btn-secondary,.sa-btn-outline) { border: 1px solid #d9e2ef; background: #fff; color: #4b607e; }
.vp-workspace :where(.btn):disabled { opacity: .55; cursor: not-allowed; }
.vp-workspace :where(.form-label,.tv-form-label) { display: block; font-size: 12px; font-weight: 600; color: #40536e; margin-bottom: 7px; }
.vp-workspace :where(.form-control,.form-select,.tv-form-control,.auth-input) { font-family: var(--ui-font); font-size: 13px; line-height: 1.6; min-height: 42px; border: 1px solid #d7e1ef; border-radius: 9px; background-color: #fff; color: var(--ui-ink); padding: 9px 12px; box-shadow: none; }
.vp-workspace :where(.form-select) { padding-right: 34px; }
.vp-workspace :where(.auth-input.has-icon) { padding-left: 40px; }
.vp-workspace :where(.form-control,.form-select,.tv-form-control,.auth-input):focus { border-color: #799af0; outline: 0; box-shadow: 0 0 0 3px rgb(63 104 220 / 12%); }
.vp-workspace :where(.form-control,.tv-form-control)::placeholder { color: #8a99b0; opacity: 1; }
.vp-workspace :where(textarea.form-control,textarea.tv-form-control) { min-height: 106px; resize: vertical; }
.vp-workspace :where(.form-control,.form-select):disabled { background: #f3f6fa; color: #74839a; }
.vp-workspace :where(.is-invalid) { border-color: #dc3545; }
.vp-workspace :where(.invalid-feedback,.form-text) { font-size: 11px; line-height: 1.7; }
.vp-workspace :where(.table-responsive) { scrollbar-width: thin; scrollbar-color: #c6d3e7 transparent; }
.vp-workspace :where(.table) { --bs-table-bg: transparent; --bs-table-color: var(--ui-ink); --bs-table-border-color: #edf1f7; --bs-table-hover-bg: #f8faff; font-size: 12px; line-height: 1.6; margin-bottom: 0; }
.vp-workspace .table>:not(caption)>*>* { padding: 14px 17px; vertical-align: middle; }
.vp-workspace :where(.table) thead th { font-size: 10px; font-weight: 700; letter-spacing: .055em; text-transform: uppercase; color: #6a7e9a; background-color: #f7f9fd; white-space: nowrap; }
.vp-workspace :where(.table) td { overflow-wrap: anywhere; }
.vp-workspace :where(.badge) { font-size: 10px; font-weight: 600; line-height: 1.35; padding: 5px 8px; border-radius: 6px; letter-spacing: 0; }
.vp-workspace :where(.alert) { border-radius: 11px; padding: 14px 18px; font-size: 12px; line-height: 1.8; }
.vp-workspace :where(.alert-dismissible) { padding-right: 48px; }
.vp-workspace :where(.modal-content) { border: 1px solid var(--ui-line); border-radius: 16px; box-shadow: 0 24px 80px rgb(20 43 80 / 18%); }
.vp-workspace :where(.modal-header) { padding: 19px 23px; background: #f7faff; border-bottom: 1px solid var(--ui-line); border-radius: 16px 16px 0 0; }
.vp-workspace :where(.modal-title) { font-size: 16px; font-weight: 700; }
.vp-workspace :where(.modal-body) { padding: 23px; }
.vp-workspace :where(.modal-footer) { padding: 14px 23px; background: #fafcff; border-top: 1px solid var(--ui-line); border-radius: 0 0 16px 16px; }
.vp-workspace :where(.nav-tabs) { border-bottom-color: var(--ui-line); gap: 4px; }
.vp-workspace :where(.nav-tabs .nav-link) { font-size: 12px; padding: 11px 15px; font-weight: 600; border-radius: 9px 9px 0 0; color: #657792; }
.vp-workspace :where(.nav-tabs .nav-link.active) { color: var(--ui-primary); border-color: var(--ui-line) var(--ui-line) #fff; }
.vp-workspace :where(.dropdown-menu) { border: 1px solid var(--ui-line); border-radius: 11px; padding: 6px; box-shadow: 0 12px 35px rgb(20 43 80 / 10%); font-size: 12px; }
.vp-workspace :where(.dropdown-item) { padding: 9px 11px; border-radius: 6px; }
.vp-workspace :where(.pagination) { gap: 5px; flex-wrap: wrap; }
.vp-workspace :where(.page-link) { border-radius: 8px; border-color: var(--ui-line); font-size: 12px; min-width: 34px; min-height: 34px; text-align: center; color: var(--ui-primary); }
.vp-workspace :where(.page-item.active .page-link) { background: var(--ui-primary); border-color: var(--ui-primary); color: #fff; }
.vp-workspace :where(.tv-nav-link,.tv-nav-sub-link,.sa-nav-link,.cp-nav a,.pp-nav a) { font-family: var(--ui-font); font-size: 12px; line-height: 1.6; }
.vp-workspace :where(.tv-nav-section-label) { font-size: 10px; letter-spacing: .1em; }
.vp-workspace :where(.cp-brand-sub,.cp-user-email) { color: #9aacc6; }
.vp-workspace :where(.cp-sidebar) { overflow-y: auto; height: 100dvh; }
.vp-workspace :where(.cp-nav) { flex: 1; }
.vp-workspace :where(button,a,input,select,textarea,summary):focus-visible { outline: 3px solid #8eafff; outline-offset: 3px; }
.vp-workspace :where(input,select,textarea):focus-visible { outline-offset: 1px; }
@media(max-width:767px) {
    .vp-workspace :where(.tv-content,.sa-content,.cp-content) { padding: 16px; }
    .vp-workspace :where(.card-body,.tv-card-body,.sa-card-body) { padding: 17px; }
    .vp-workspace :where(.tv-page-header) { align-items: flex-start; gap: 12px; }
    .vp-workspace :where(.form-control,.form-select,.tv-form-control,.auth-input) { font-size: 16px; min-height: 44px; }
    .vp-workspace :where(.btn,.tv-btn,.sa-btn) { min-height: 42px; }
    .vp-workspace :where(.table .btn,.btn-sm) { min-height: 34px; }
    .vp-workspace .table>:not(caption)>*>* { padding: 12px; }
    .vp-workspace :where(.nav-tabs) { flex-wrap: nowrap; overflow-x: auto; }
    .vp-workspace :where(.nav-tabs .nav-link) { white-space: nowrap; }
    .vp-workspace :where(.modal-dialog) { margin: 12px; }
    .vp-workspace :where(.cp-topbar,.sa-topbar,.tv-topbar) { gap: 10px; }
}
@media(prefers-reduced-motion:reduce) {
    .vp-workspace *, .vp-workspace *::before, .vp-workspace *::after { scroll-behavior: auto !important; animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }
}
@media print {
    .vp-workspace { background: #fff; }
    .vp-workspace :where(.card,.tv-card,.sa-card,.cp-card) { box-shadow: none; }
}

/* Compact filter actions: allow wrapping without stretching individual buttons. */
.wp-workspace .wp-filter-actions{grid-column:1/-1;display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding-top:6px}
.wp-workspace .wp-filter-actions .tv-btn{flex:0 0 auto;width:auto;min-height:40px;display:inline-flex;align-items:center;justify-content:center;gap:6px;white-space:normal;text-align:center}
.wp-filter-downloads{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-left:auto}
.expense-filter-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;align-items:end}
.expense-filter-field{min-width:0}
.expense-filter-field .tv-form-control{width:100%;min-width:0}
@media(min-width:1600px){.expense-filter-grid{grid-template-columns:repeat(6,minmax(0,1fr))}}
@media(max-width:767px){.expense-filter-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.wp-filter-downloads{margin-left:0}}
@media(max-width:420px){.expense-filter-grid{grid-template-columns:minmax(0,1fr)}}
