@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Montserrat:wght@600;700&family=Playfair+Display:wght@500;600;700&display=swap');
:root{--radius-card:16px;color-scheme:light;--bd-hover:#fafbfa;--forest: #1f3a33;--sage: #4d6b5c;--lavender: #b59ae8;--lavender-soft: #d9cbf5;--offwhite: #f8f8f6;--lavender-deep: #7e5fc4;--negative: #a8443c;--bg: var(--offwhite);--surface: #ffffff;--sidebar: var(--forest);--ink: #1b2a26;--ink-strong: var(--forest);--muted: #5b6661;--muted-strong: #5d6a65;--line: #e6e8e4;--line-soft: #eeefec;--line-strong: #dcdfda;--revenue: var(--forest);--cost: var(--lavender);--profit: var(--sage);--margin: var(--lavender-deep);--font-body: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-ui: Montserrat, Inter, -apple-system, BlinkMacSystemFont, sans-serif;--font-display: "Playfair Display", Georgia, "Times New Roman", serif}*{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font-body);font-weight:400;background:var(--bg);color:var(--ink);font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased}button{font-family:inherit}table{width:100%;border-collapse:collapse;min-width:940px}th{background:var(--offwhite);height:34px;text-align:left;font-family:var(--font-ui);font-size:9px;color:var(--muted-strong);font-weight:600;letter-spacing:.5px;padding:0 11px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);white-space:nowrap}td{height:36px;padding:0 11px;border-bottom:1px solid var(--line-soft);font-size:12.5px;color:var(--ink)}tbody th{background:none;border-top:0;font-family:var(--font-body);font-size:10px;font-weight:500;color:var(--lavender-deep);height:36px;text-align:left;letter-spacing:0}@media(max-width:1200px){}.account{display:flex;align-items:center;gap:9px;background:var(--surface);border:1px solid var(--line);border-radius:9px;padding:6px 8px 6px 6px}.account__email{font-size:12px;color:var(--muted-strong);max-width:20ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.account__out{background:none;border:0;border-left:1px solid var(--line);margin-left:2px;padding:3px 4px 3px 9px;cursor:pointer;font-family:var(--font-ui);font-weight:600;font-size:10px;letter-spacing:.3px;color:var(--sage)}.account__out:hover{color:var(--forest)}@media(max-width:800px){.account__email{max-width:14ch}}@media(max-width:520px){}:root{--bd-sidebar: #0B3D2E;--bd-sidebar-active: rgba(255, 255, 255, .1);--bd-purple: #8b5cf6;--bd-purple-deep: #7c3aed;--bd-purple-soft: #f1edfe;--bd-purple-pale: #d9cbf5;--bd-green-soft: #e9f5ee;--bd-green-text: #1d9e57;--bd-bg: #f7f8f7;--bd-card: #ffffff;--bd-border: #e9ebe8;--bd-ink: #16281f;--bd-muted: #616c67;--bd-muted-strong: #5d6a65}.bd-app{display:flex;min-height:100vh;background:var(--bd-bg)}.bd-sidebar{position:fixed;left:0;top:0;bottom:0;z-index:20;width:224px;background:var(--bd-sidebar);color:#fff;display:flex;flex-direction:column;padding:22px 14px 18px}.bd-brand{display:flex;align-items:center;gap:11px;padding:2px 8px 26px}.bd-brand__text{display:flex;flex-direction:column;line-height:1.05}.bd-brand__name{font-family:var(--font-display);font-weight:600;font-size:25px;letter-spacing:-.4px}.bd-brand__sub{font-family:var(--font-ui);font-weight:600;font-size:9px;letter-spacing:3.4px;color:#b9d4c7;margin-top:3px}
.bd-auth .bd-brand__sub{color:var(--bd-muted-strong)}.bd-nav{display:flex;flex-direction:column;gap:4px}.bd-nav__item{height:46px;border:0;border-radius:10px;background:transparent;color:#dcebe3;display:flex;align-items:center;gap:13px;padding:0 14px;font-family:var(--font-body);font-size:14px;font-weight:500;cursor:pointer;text-align:left;transition:background .15s ease}.bd-nav__item:hover{background:#ffffff0f}.bd-nav__item--active{background:var(--bd-sidebar-active);color:#fff;font-weight:600}.bd-nav__item svg{width:20px;height:20px;stroke:currentColor;fill:none;stroke-width:1.7;flex:none}.bd-sidebar__foot{margin-top:auto;display:flex;flex-direction:column;gap:12px}.bd-viewtoggle{display:flex;gap:4px;padding:4px;border-radius:12px;background:var(--bd-card);border:1px solid var(--bd-border)}.bd-viewtoggle__opt{flex:1;border:0;background:transparent;color:var(--bd-muted-strong);font-family:var(--font-body);font-size:12.5px;font-weight:600;padding:8px 6px;border-radius:8px;cursor:pointer;white-space:nowrap;transition:background .15s ease,color .15s ease}.bd-viewtoggle__opt:hover{color:var(--bd-ink)}.bd-viewtoggle__opt--active{background:var(--bd-sidebar);color:#fff}.bd-viewtoggle__opt--active:hover{color:#fff}.bd-sidebar .bd-viewtoggle{background:rgba(255,255,255,.07);border-color:rgba(255,255,255,.16)}.bd-sidebar .bd-viewtoggle__opt{color:#a9c4b6}.bd-sidebar .bd-viewtoggle__opt:hover{color:#fff}.bd-sidebar .bd-viewtoggle__opt--active{background:#fff;color:#14332a}.bd-sidebar .bd-viewtoggle__opt--active:hover{color:#14332a}.bd-landing__nav .bd-viewtoggle{flex:none}.bd-user{display:flex;align-items:center;gap:11px;background:transparent;border:0;color:#fff;padding:4px 6px;cursor:pointer;text-align:left;border-radius:10px}.bd-user:hover{background:#ffffff0f}.bd-user__avatar{width:38px;height:38px;border-radius:50%;background:#1d5c46;color:#fff;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;flex:none}.bd-user__text{display:flex;flex-direction:column;line-height:1.25;flex:1;min-width:0}.bd-user__name{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bd-user__role{font-size:12px;color:#a9c4b6}.bd-user>svg{width:16px;height:16px;stroke:#a9c4b6;fill:none;stroke-width:2;flex:none}.bd-main{margin-left:224px;width:calc(100% - 224px);display:flex;flex-direction:column;min-height:100vh}.bd-topbar{display:flex;justify-content:space-between;align-items:flex-start;gap:20px;padding:30px 36px 6px}.bd-topbar__title h1{font-family:var(--font-display);font-weight:600;font-size:31px;letter-spacing:-.5px;color:var(--bd-ink)}.bd-topbar__title p{margin-top:6px;font-size:13.5px;color:var(--bd-muted)}.bd-topbar__controls{display:flex;flex-direction:column;align-items:flex-end;gap:12px}.bd-topbar__row{display:flex;align-items:center;gap:12px}.bd-search{position:relative}.bd-search input{width:300px;height:44px;border:1px solid var(--bd-border);border-radius:12px;background:#fff;padding:0 40px 0 16px;font-size:13px;color:var(--bd-ink);outline:none}.bd-search input::placeholder{color:#a7b0ab}.bd-search input:focus{border-color:var(--bd-purple)}.bd-search svg{position:absolute;right:14px;top:50%;transform:translateY(-50%);width:17px;height:17px;stroke:#6b7470;fill:none;stroke-width:2;pointer-events:none}.bd-iconbtn{position:relative;width:44px;height:44px;border-radius:12px;border:1px solid var(--bd-border);background:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer}.bd-iconbtn svg{width:20px;height:20px;stroke:#3c4742;fill:none;stroke-width:1.7}.bd-iconbtn__badge{position:absolute;top:-6px;right:-6px;min-width:19px;height:19px;border-radius:10px;background:var(--bd-green-text);color:#fff;font-size:10.5px;font-weight:600;display:flex;align-items:center;justify-content:center;padding:0 5px}.bd-avatarbtn{display:flex;align-items:center;gap:4px;background:transparent;border:0;cursor:pointer;padding:0}.bd-avatarbtn__avatar{width:44px;height:44px;border-radius:50%;background:var(--bd-sidebar);color:#fff;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:600}.bd-avatarbtn svg{width:15px;height:15px;stroke:#3c4742;fill:none;stroke-width:2}.bd-datepill{display:flex;align-items:center;gap:9px;height:40px;padding:0 16px;background:#fff;border:1px solid var(--bd-border);border-radius:11px;font-size:13px;font-weight:500;color:#3c4742;cursor:pointer}.bd-datepill svg{width:16px;height:16px;stroke:#6b7470;fill:none;stroke-width:1.7}.bd-datepill svg:last-child{width:13px;height:13px}.bd-content{flex:1;padding:18px 36px 10px}.bd-card{background:var(--bd-card);border:1px solid var(--bd-border);border-radius:var(--radius-card);padding:22px 24px;box-shadow:0 1px 3px #16281f0a}.bd-card__head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:18px}.bd-card__head h2{font-family:var(--font-display);font-weight:600;font-size:17.5px;letter-spacing:-.2px;color:var(--bd-ink)}.bd-pillbtn{display:flex;align-items:center;gap:7px;height:34px;padding:0 14px;background:#fff;border:1px solid var(--bd-border);border-radius:9px;font-size:13px;font-weight:500;color:#3c4742;cursor:pointer}.bd-pillbtn svg{width:13px;height:13px;stroke:#6b7470;fill:none;stroke-width:2}.bd-linkbtn{display:flex;align-items:center;gap:6px;background:none;border:0;cursor:pointer;font-size:12.5px;font-weight:600;color:var(--bd-purple-deep);padding:0}.bd-linkbtn svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2}.bd-outlinebtn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;height:42px;margin-top:16px;background:#fff;border:1px solid var(--bd-border);border-radius:11px;font-size:13px;font-weight:600;color:#3c4742;cursor:pointer}.bd-outlinebtn:hover{border-color:var(--bd-purple);color:var(--bd-purple-deep)}.bd-outlinebtn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2}.bd-dot{width:9px;height:9px;border-radius:50%;display:inline-block;flex:none}.bd-dash{display:flex;flex-direction:column;gap:22px}.bd-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:28px;margin-bottom:26px}.bd-stat{background:var(--bd-card);border:1px solid var(--bd-border);border-radius:16px;padding:20px 22px;display:flex;gap:16px;align-items:flex-start;box-shadow:0 1px 3px #16281f0a}.bd-stat__icon{width:52px;height:52px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex:none}.bd-stat__icon svg{width:24px;height:24px;stroke-width:1.8;fill:none}.bd-stat__icon--green{background:var(--bd-sidebar)}.bd-stat__icon--green svg{stroke:#fff}.bd-stat__icon--purple{background:var(--bd-purple-soft)}.bd-stat__icon--purple svg{stroke:var(--bd-purple-deep)}.bd-stat__icon--mint{background:var(--bd-green-soft)}.bd-stat__icon--mint svg{stroke:var(--bd-green-text)}.bd-stat__body{min-width:0}.bd-stat__label{font-size:13px;color:var(--bd-muted-strong);font-weight:600}.bd-stat__value{font-size:28px;font-weight:700;letter-spacing:-.8px;color:var(--bd-ink);margin-top:5px;line-height:1.1}.bd-stat__sub{font-size:13px;color:var(--bd-muted);margin-top:5px}.bd-stat__foot{font-size:13px;font-weight:600;margin-top:7px}.bd-stat__foot--up{color:var(--bd-green-text)}.bd-stat__foot--link{color:var(--bd-purple-deep)}.bd-row{display:grid;gap:20px}.bd-row--charts{grid-template-columns:2fr 1fr}.bd-row--bottom{grid-template-columns:2.1fr 1fr .85fr;align-items:start}.bd-legend{display:flex;gap:22px;margin:-8px 0 6px;font-size:13px;color:var(--bd-muted-strong)}.bd-legend>span{display:flex;align-items:center;gap:7px}.bd-chart{margin:0 -8px -6px}.bd-tooltip{background:#fff;border:1px solid var(--bd-border);border-radius:10px;box-shadow:0 6px 18px #16281f1a;padding:10px 13px;font-size:13px}.bd-tooltip__date{font-weight:600;margin-bottom:6px;color:var(--bd-ink)}.bd-tooltip__row{display:flex;align-items:center;gap:7px;color:var(--bd-muted-strong);margin-top:4px}.bd-tooltip__row strong{margin-left:auto;padding-left:14px;color:var(--bd-ink)}.bd-donut{display:flex;flex-direction:column}.bd-donut__chart{position:relative}.bd-donut__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;pointer-events:none;line-height:1.3}.bd-donut__center span{font-size:12.5px;color:var(--bd-muted)}.bd-donut__center strong{font-size:30px;font-weight:600;letter-spacing:-.6px;color:var(--bd-ink)}.bd-donut__legend{list-style:none;margin-top:6px}.bd-donut__legend li{display:flex;align-items:center;gap:10px;padding:9px 2px;font-size:13px;border-bottom:1px solid #f1f3f1}.bd-donut__legend li:last-child{border-bottom:0}.bd-donut__label{color:var(--bd-muted-strong);flex:1}.bd-donut__pct{color:var(--bd-muted);font-size:13px;width:44px;text-align:right}.bd-donut__count{font-weight:600;color:var(--bd-ink);width:28px;text-align:right}.bd-campaigns{display:flex;flex-direction:column}.bd-campaign{display:grid;grid-template-columns:44px minmax(0,1.5fr) minmax(0,.7fr) minmax(0,.7fr) minmax(120px,.9fr) minmax(0,.8fr) minmax(0,.7fr) minmax(0,.8fr) minmax(150px,1.05fr) 30px;gap:12px;align-items:center;padding:21px 0;border-bottom:1px solid var(--bd-border);min-width:0}
.bd-campaign--manage{grid-template-columns:30px 44px minmax(0,1.5fr) minmax(0,.7fr) minmax(0,.7fr) minmax(120px,.9fr) minmax(0,.8fr) minmax(0,.7fr) minmax(0,.8fr) minmax(150px,1.05fr) 30px}.bd-campaigns__head{display:grid;grid-template-columns:44px minmax(0,1.5fr) minmax(0,.7fr) minmax(0,.7fr) minmax(120px,.9fr) minmax(0,.8fr) minmax(0,.7fr) minmax(0,.8fr) minmax(150px,1.05fr) 30px;gap:12px;align-items:center;padding:2px 0 10px;font-family:var(--font-ui);font-weight:700;font-size:10.5px;letter-spacing:.9px;color:var(--bd-muted-strong);text-transform:uppercase}.bd-campaigns__head--manage{grid-template-columns:30px 44px minmax(0,1.5fr) minmax(0,.7fr) minmax(0,.7fr) minmax(120px,.9fr) minmax(0,.8fr) minmax(0,.7fr) minmax(0,.8fr) minmax(150px,1.05fr) 30px}.bd-campaign:last-child{border-bottom:0;padding-bottom:2px}.bd-campaign:first-child{padding-top:2px}.bd-campaign__tile{width:44px;height:44px;border-radius:12px;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700;font-size:19px}.bd-campaign__name{display:flex;flex-direction:column;gap:3px;min-width:0;overflow:hidden}.bd-campaign__name strong{font-size:14px;font-weight:600;color:var(--bd-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.bd-campaign__name span{font-size:12.5px;color:var(--bd-muted)}.bd-campaign__col{display:flex;flex-direction:column;gap:6px}.bd-campaign__col strong{font-size:14px;font-weight:600;color:var(--bd-ink)}.bd-campaign__head{font-family:var(--font-ui);font-weight:700;font-size:11px;letter-spacing:.9px;color:var(--bd-muted-strong);text-transform:uppercase}.bd-badge{display:inline-block;align-self:flex-start;font-family:var(--font-ui);font-weight:600;font-size:10.5px;letter-spacing:.8px;padding:5px 11px;border-radius:7px}.bd-badge--live{background:var(--bd-green-soft);color:var(--bd-green-text)}.bd-badge--draft{background:var(--bd-purple-soft);color:var(--bd-purple-deep)}.bd-campaign__dash{color:#b9c0bb;font-size:16px}.bd-perf{display:flex;flex-direction:column;gap:7px}.bd-perf strong{font-size:14px;font-weight:600;color:var(--bd-ink)}.bd-perf__bar{display:block;height:6px;border-radius:3px;background:#edf0ed;overflow:hidden;max-width:110px}.bd-perf__bar span{display:block;height:100%;border-radius:3px;background:var(--bd-sidebar)}.bd-rowmenu{width:32px;height:32px;border-radius:8px;border:1px solid var(--bd-border);background:var(--bd-card);color:var(--bd-muted-strong);display:flex;align-items:center;justify-content:center;cursor:pointer}.bd-rowmenu svg{width:16px;height:16px;fill:var(--bd-muted-strong)}.bd-rowmenu:hover{border-color:var(--bd-purple)}.bd-activity{list-style:none;display:flex;flex-direction:column}.bd-activity li{display:flex;gap:13px;align-items:flex-start;padding:11px 0;border-bottom:1px solid #f1f3f1}.bd-activity li:last-child{border-bottom:0}.bd-activity li:first-child{padding-top:2px}.bd-activity__icon{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex:none}.bd-activity__icon svg{width:17px;height:17px;stroke-width:1.8;fill:none}.bd-activity__icon--mint{background:var(--bd-green-soft)}.bd-activity__icon--mint svg{stroke:var(--bd-green-text)}.bd-activity__icon--purple{background:var(--bd-purple-soft)}.bd-activity__icon--purple svg{stroke:var(--bd-purple-deep)}.bd-activity__body{min-width:0}.bd-activity__top{display:flex;gap:9px;align-items:baseline}.bd-activity__time{font-size:12px;color:var(--bd-muted);flex:none;width:58px}.bd-activity__top strong{font-size:13.5px;font-weight:600;color:var(--bd-ink);line-height:1.4}.bd-activity__campaign{font-size:12.5px;color:var(--bd-muted);display:block;margin-top:3px;margin-left:67px}.bd-actions{display:flex;flex-direction:column;gap:10px}.bd-action{display:flex;align-items:center;gap:11px;height:46px;padding:0 16px;background:#fff;border:1px solid var(--bd-border);border-radius:11px;font-size:13px;font-weight:500;color:#3c4742;cursor:pointer;text-align:left}.bd-action:hover{border-color:var(--bd-purple)}.bd-action svg{width:18px;height:18px;stroke:#6b7470;fill:none;stroke-width:1.7;flex:none}.bd-action--primary{background:var(--bd-purple-soft);border-color:var(--bd-purple-soft);color:var(--bd-purple-deep);font-weight:600}.bd-action--primary svg{stroke:var(--bd-purple-deep)}.bd-action--primary:hover{background:#e7defc;border-color:#e7defc}.bd-footer{display:flex;align-items:center;justify-content:center;gap:12px;padding:26px 36px 30px;font-size:13px;color:var(--bd-muted)}.bd-footer__brand{display:flex;align-items:center;gap:8px;font-family:var(--font-display);font-weight:600;color:var(--bd-ink);font-size:14px}.bd-footer__brand img{width:20px;height:auto}.bd-footer__sep{color:#cfd4d0}.bd-placeholder{background:var(--bd-card);border:1px solid var(--bd-border);border-radius:16px;padding:60px 40px;text-align:center}.bd-placeholder h2{font-family:var(--font-display);font-weight:600;font-size:24px;color:var(--bd-ink);margin-bottom:10px}.bd-placeholder p{color:var(--bd-muted);font-size:14px}.bd-financials-wrap .main{margin-left:0;width:100%;padding:0}@media(max-width:1280px){.bd-stats{grid-template-columns:repeat(2,1fr)}.bd-row--charts{grid-template-columns:1fr}.bd-row--bottom{grid-template-columns:1fr 1fr}}@media(max-width:900px){.bd-sidebar{display:none}.bd-main{margin-left:0;width:100%}.bd-row--bottom{grid-template-columns:1fr}.bd-topbar{flex-direction:column}.bd-topbar__controls{align-items:flex-start}}.bd-page{display:flex;flex-direction:column;gap:20px}.bd-pagehead{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.bd-pagehead__title h1{font-family:var(--font-display);font-size:31px;letter-spacing:-.5px;color:var(--bd-ink)}.bd-pagehead__title p{margin-top:6px;font-size:13.5px;color:var(--bd-muted)}.bd-pagehead__actions{display:flex;align-items:center;gap:12px}.bd-pagetitle{font-family:var(--font-display);font-size:31px;letter-spacing:-.5px;color:var(--bd-ink)}.bd-pagesub{margin-top:6px;font-size:13.5px;color:var(--bd-muted)}.bd-centerhead{text-align:center;font-size:17px;font-weight:600;color:var(--bd-ink);margin-top:8px}.bd-crumb{font-size:13px;color:var(--bd-muted)}.bd-crumb span{margin:0 6px}.bd-btn{display:inline-flex;align-items:center;gap:8px;border:0;border-radius:10px;padding:11px 18px;font-size:13.5px;font-weight:600;cursor:pointer}.bd-btn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2}.bd-btn--primary{background:var(--bd-purple);color:#fff}.bd-btn--primary:hover{background:var(--bd-purple-deep)}.bd-btn--green{background:var(--bd-sidebar);color:#fff}.bd-btn--outline{background:#fff;color:var(--bd-purple-deep);border:1px solid var(--bd-purple-pale)}.bd-ghostbtn{display:inline-flex;align-items:center;gap:7px;background:#fff;border:1px solid var(--bd-border);border-radius:9px;padding:9px 14px;font-size:13px;font-weight:600;color:var(--bd-ink);cursor:pointer}.bd-ghostbtn svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.8}.bd-ghostbtn--sm{padding:7px 11px;font-size:12px}.bd-ghostbtn--purple{color:var(--bd-purple-deep);border-color:var(--bd-purple-pale)}.bd-filterpill{display:inline-flex;align-items:center;gap:7px;background:var(--bd-card);border:1px solid var(--bd-border);border-radius:9px;padding:9px 13px;font-size:13px;font-weight:600;color:var(--bd-muted-strong);cursor:pointer}.bd-filterpill svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:2}.bd-filterpill--label svg{width:15px;height:15px}.bd-filterbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:var(--bd-card);border:1px solid var(--bd-border);border-radius:14px;padding:12px 14px}.bd-filterbar__spacer{flex:1}.bd-linkbtn{display:inline-flex;align-items:center;gap:6px;background:none;border:0;color:var(--bd-purple-deep);font-size:12.5px;font-weight:600;cursor:pointer}.bd-linkbtn svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2}.bd-linkbtn--center{margin:4px auto 14px}.bd-stats--4{grid-template-columns:repeat(4,1fr)}.bd-stats--5{grid-template-columns:repeat(5,1fr)}.bd-stats--6{grid-template-columns:repeat(6,1fr)}.bd-stats--7{grid-template-columns:repeat(7,minmax(0,1fr));gap:12px}.bd-stats--7 .bd-stat{padding:14px}.bd-stats--7 .bd-stat__value{font-size:20px;letter-spacing:-.4px}.bd-stats--7 .bd-stat__label{font-size:11px}.bd-stats--7 .bd-stat__sub{font-size:10.5px}@media(max-width:1150px){.bd-stats--7{grid-template-columns:repeat(4,minmax(0,1fr))}}.bd-stat--sm .bd-stat__value{font-size:21px}.bd-stat__icon--blue{background:#e8f1fe}.bd-stat__icon--blue svg{stroke:#2f6fed}.bd-stat__icon--pink{background:#fdeef3}.bd-stat__icon--pink svg{stroke:#e5486f}.bd-stat__icon--amber{background:#fdf3e3}.bd-stat__icon--amber svg{stroke:#d9932c}.bd-stat__foot--up-red{color:#e5486f}.bd-stat__foot--down{color:#1d9e57}.bd-stat__foot--flat{color:var(--bd-muted)}.bd-badge--paused{background:#fdf3e3;color:#c07f1a}.bd-badge--muted{background:#eef0ee;color:#8a938e}.bd-badge--blue{background:#e8f1fe;color:#2f6fed}.bd-badge--gray{background:#eef0ee;color:#6b7470}.bd-badge--pink{background:#fdeef3;color:#e5486f}.bd-badge--amber{background:#fdf3e3;color:#c07f1a}.bd-badge--attention{background:#fdeeee;color:#c0392b;font-size:9px;padding:3px 8px;letter-spacing:.6px}[data-theme="dark"] .bd-badge--attention{background:#3a1f1c;color:#f08a80}.bd-badge--mint{background:var(--bd-green-soft);color:var(--bd-green-text)}.bd-badge--purple{background:var(--bd-purple-soft);color:var(--bd-purple-deep)}.bd-card--flush{padding:0;overflow:hidden}.bd-card--flush .bd-card__head{padding:18px 22px 0}.bd-table{width:100%;border-collapse:collapse;font-size:14px}.bd-table thead th{text-align:left;font-size:12px;font-weight:700;letter-spacing:.8px;text-transform:uppercase;color:var(--bd-muted-strong);padding:12px 14px;border-bottom:1px solid var(--bd-border);white-space:nowrap}.bd-table tbody td{padding:13px 14px;font-weight:500;border-bottom:1px solid var(--bd-line-soft, #eef0ed);vertical-align:middle}.bd-table tbody tr:last-child td{border-bottom:0}.bd-table__rowlink{cursor:pointer}.bd-table__rowlink:hover{background:var(--bd-hover)}.bd-thr{display:block;text-align:right}.bd-table td:last-child{text-align:right}.bd-table th.num,.bd-table td.num{text-align:right}.bd-num{font-variant-numeric:tabular-nums;white-space:nowrap;font-weight:600;color:var(--bd-ink)}.bd-num--green{color:var(--bd-green-text);font-weight:700}.bd-num--red{color:#c0392b;font-weight:700}.bd-email{color:var(--bd-muted-strong)}.bd-table__total td{font-weight:700;background:var(--bd-hover);border-top:2px solid var(--bd-border)}.bd-tablewrap{overflow-x:auto}.bd-table--inner thead th{padding:9px 12px}.bd-table--inner tbody td{padding:10px 12px}.bd-cellmain{display:flex;align-items:center;gap:12px}.bd-cellmain strong{display:block;font-size:14px;font-weight:600}.bd-cellmain span{display:block;font-size:12.5px;color:var(--bd-muted);margin-top:2px}.bd-cellclient{display:flex;align-items:center;gap:8px;font-weight:600}.bd-tile{width:40px;height:40px;border-radius:10px;display:inline-flex;align-items:center;justify-content:center;color:#fff;font-weight:700;font-size:17px;flex:none}.bd-avatar{width:38px;height:38px;border-radius:50%;background:var(--bd-green-soft);color:var(--bd-sidebar);display:inline-flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;flex:none}.bd-avatars{display:flex;align-items:center}.bd-avatars .bd-avatar{margin-left:-8px;border:2px solid #fff}.bd-avatars .bd-avatar:first-child{margin-left:0}.bd-avatars__more{margin-left:6px;font-size:12px;color:var(--bd-muted);background:#eef0ee;border-radius:12px;padding:3px 8px}.bd-rowactions{display:flex;align-items:center;gap:8px;justify-content:flex-end}.bd-postedpct{color:var(--bd-purple-deep);font-weight:600;font-size:13px;margin-left:4px}.bd-delta{font-size:12px;color:var(--bd-green-text);font-weight:600}.bd-delta--muted{color:var(--bd-muted);font-weight:400}.bd-statussub{font-size:12px;color:var(--bd-muted);margin-top:2px}.bd-monthlink{color:var(--bd-purple-deep);font-weight:600}.bd-chevright{color:var(--bd-muted);font-size:18px}.bd-platform{display:inline-flex;align-items:center;gap:8px}.bd-platform__icon{font-size:15px}.bd-platforms{display:inline-flex;gap:5px}.bd-platform__dot{width:16px;height:16px;border-radius:50%;display:inline-block}.bd-progress{display:block;height:7px;background:var(--bd-border);border-radius:4px;margin-top:8px;overflow:hidden;min-width:70px}.bd-progress__fill{display:block;height:100%;background:var(--bd-purple);border-radius:4px}.bd-progress--sm{margin-top:5px;min-width:90px}.bd-progressring{--pct: 50;width:44px;height:44px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:11.5px;font-weight:700;color:var(--bd-green-text);background:conic-gradient(var(--bd-green-text) calc(var(--pct) * 1%),var(--bd-border) 0);position:relative}.bd-progressring span{background:var(--bd-card);width:34px;height:34px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center}.bd-pager{display:flex;align-items:center;justify-content:space-between;padding:14px 22px}.bd-pager__text{font-size:12.5px;color:var(--bd-muted)}.bd-pager__pages{display:flex;gap:6px}.bd-pager__btn{min-width:32px;height:32px;border:1px solid var(--bd-border);background:#fff;border-radius:8px;font-size:12.5px;font-weight:600;color:var(--bd-muted-strong);cursor:pointer}.bd-pager__btn--active{border-color:var(--bd-purple);color:var(--bd-purple-deep)}.bd-marginbar{display:flex;align-items:center;gap:10px}.bd-marginbar .bd-progress{flex:1;margin-top:0}.bd-detailhead{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.bd-detailhead__actions{display:flex;align-items:center;gap:10px}.bd-detailhead__id{display:flex;align-items:center;gap:16px}.bd-backlink{display:inline-flex;align-items:center;gap:6px;background:none;border:0;color:var(--bd-green-text);font-size:13px;font-weight:600;cursor:pointer;margin-bottom:8px}.bd-backlink svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2}.bd-detailtitle{font-family:var(--font-display);font-size:30px;letter-spacing:-.4px;display:flex;align-items:center;gap:12px}.bd-detailmeta{margin-top:6px;font-size:13px;color:var(--bd-muted)}.bd-campaignimg{width:72px;height:72px;border-radius:14px;background:var(--bd-sidebar);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-weight:700;font-size:22px;flex:none}.bd-tabs{display:flex;gap:4px;border-bottom:1px solid var(--bd-border);margin-top:4px}.bd-subtabs{display:flex;gap:6px}.bd-subtab{background:var(--bd-card);border:1px solid var(--bd-border);border-radius:9px;padding:9px 18px;font-size:13.5px;font-weight:600;color:var(--bd-muted);cursor:pointer}.bd-subtab--on{background:var(--bd-purple-soft);border-color:var(--bd-purple);color:var(--bd-purple-deep)}.bd-finsub{background:var(--bd-hover);border:1px solid var(--bd-border);border-radius:12px;padding:14px 16px}.bd-tab{background:none;border:0;padding:12px 16px;font-size:13.5px;font-weight:600;color:var(--bd-muted);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}.bd-tab--active{color:var(--bd-purple-deep);border-bottom-color:var(--bd-purple)}.bd-subhead{font-size:14px;font-weight:700;margin:6px 22px 0}.bd-card__head--stack{flex-direction:column;align-items:flex-start;gap:4px}.bd-card__head--stack p{font-size:12.5px;color:var(--bd-muted)}.bd-card__head--row{display:flex;align-items:center;justify-content:space-between}.bd-card__sub{font-size:13.5px;color:var(--bd-muted);margin-top:4px}.bd-card--pad{padding:26px}.bd-mutedtext{color:var(--bd-muted);font-size:13.5px}.bd-spark{width:120px;height:28px;margin-top:6px}.bd-creategrid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:6px}.bd-createcard{background:var(--bd-card);border:1px solid var(--bd-border);border-radius:16px;padding:30px 26px;display:flex;flex-direction:column;align-items:center;text-align:center;gap:10px}.bd-createcard__icon{width:64px;height:64px;border-radius:50%;display:flex;align-items:center;justify-content:center}.bd-createcard__icon svg{width:28px;height:28px;stroke-width:1.7;fill:none}.bd-createcard h3{font-size:16.5px}.bd-createcard p{font-size:13px;color:var(--bd-muted-strong);line-height:1.55}.bd-createcard ul{list-style:none;margin:6px 0 10px;display:flex;flex-direction:column;gap:8px}.bd-createcard li{display:flex;align-items:center;gap:9px;font-size:13px;color:var(--bd-muted-strong)}.bd-createcard li svg{width:15px;height:15px;stroke:var(--bd-green-text);fill:none;stroke-width:2.2;flex:none}.bd-createcard .bd-btn{margin-top:auto;width:100%;justify-content:center}.bd-hintbar{display:flex;align-items:center;gap:16px;background:#f4f1fd;border:1px solid var(--bd-purple-pale);border-radius:14px;padding:18px 22px;margin-top:4px}.bd-hintbar__icon{width:44px;height:44px;border-radius:50%;background:var(--bd-purple);display:flex;align-items:center;justify-content:center;flex:none}.bd-hintbar__icon svg{width:22px;height:22px;stroke:#fff;fill:none;stroke-width:1.8}.bd-hintbar strong{font-size:14px}.bd-hintbar p{font-size:13px;color:var(--bd-muted-strong);margin-top:4px;line-height:1.5}.bd-hintbar .bd-ghostbtn{margin-left:auto;flex:none}.bd-expandrow td{background:var(--bd-hover);padding:0!important}.bd-history{display:grid;grid-template-columns:340px 1fr;gap:24px;padding:20px 24px}.bd-history h4{font-size:12px;font-weight:700;letter-spacing:.8px;text-transform:uppercase;color:var(--bd-muted);margin-bottom:12px}.bd-history__facts dl{display:flex;flex-direction:column;gap:10px}.bd-history__facts dl>div{display:flex;align-items:center;justify-content:space-between;font-size:13.5px}.bd-history__facts dt{display:flex;align-items:center;gap:8px;color:var(--bd-muted-strong)}.bd-history__facts dt svg{width:15px;height:15px;stroke:var(--bd-muted);fill:none;stroke-width:1.7}.bd-history__facts dd{font-weight:700}.bd-portalabel{font-family:var(--font-ui);font-weight:600;font-size:9px;letter-spacing:1.6px;color:#90a89e;margin:4px 13px 12px}.bd-portalbtn{display:flex;align-items:center;gap:10px;width:100%;background:#ffffff12;border:1px solid rgba(255,255,255,.12);color:#fff;border-radius:9px;padding:10px 12px;font-size:12.5px;font-weight:600;cursor:pointer}.bd-portalbtn svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.7}.bd-portalbtn:hover{background:#ffffff1f}.bd-manager{border:1px solid rgba(255,255,255,.14);border-radius:10px;padding:13px 12px;display:flex;flex-direction:column;gap:8px}.bd-manager__avatar{width:34px;height:34px;border-radius:50%;background:#ffffff24;color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:12px;font-weight:700}.bd-manager__text{display:flex;flex-direction:column;gap:1px}.bd-manager__label{font-size:11.5px;color:#a9c4b6}.bd-manager__text strong{font-size:12.5px}.bd-manager__email{font-size:11.5px;color:#a9c4b6}.bd-outlinebtn--sm{padding:8px 10px;font-size:11.5px;justify-content:center}.bd-logout{display:flex;align-items:center;gap:9px;background:none;border:0;color:#cfe3d8;font-size:13px;font-weight:600;cursor:pointer;padding:6px 4px}.bd-logout svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.8}.bd-avatarbtn__name{display:flex;flex-direction:column;line-height:1.2;font-size:12.5px;font-weight:700;text-align:left}.bd-avatarbtn__name small{font-weight:400;color:var(--bd-muted);font-size:11.5px}.bd-iconbtn__badge--dot{width:9px;height:9px;min-width:0;padding:0}.bd-row--bottom3{display:grid;grid-template-columns:1.9fr 1fr;gap:20px;align-items:start}.bd-sidecol{display:flex;flex-direction:column;gap:20px}.bd-updates{list-style:none;display:flex;flex-direction:column}.bd-updates li{display:flex;gap:12px;padding:11px 0;border-bottom:1px solid var(--bd-line-soft, #eef0ed);align-items:flex-start}.bd-updates li:last-child{border-bottom:0}.bd-updates strong{display:block;font-size:13.5px;font-weight:600}.bd-updates span{font-size:12.5px;color:var(--bd-muted)}.bd-milestones{list-style:none;display:flex;flex-direction:column}.bd-milestones li{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--bd-line-soft, #eef0ed);font-size:13px}.bd-milestones li:last-child{border-bottom:0}.bd-milestones svg{width:16px;height:16px;stroke:var(--bd-muted);fill:none;stroke-width:1.7;flex:none}.bd-milestones .bd-badge{margin-left:auto}.bd-footer--client{justify-content:space-between}.bd-footer__tag{font-size:11px;letter-spacing:1.4px;color:var(--bd-muted);font-weight:600}.bd-notice{background:#fff8e6;border:1px solid #f0dfae;border-radius:10px;padding:11px 15px;font-size:13px;color:#7a5c14}.bd-notice--error{background:#fdeeee;border-color:#f3c1c1;color:#a8443c}.bd-search--sm input{width:190px;padding:8px 12px 8px 34px;font-size:12.5px}.bd-preview-badge{display:inline-block;vertical-align:middle;margin-left:10px;font-size:11px;font-weight:700;letter-spacing:1px;background:#f5e6ff;color:#7c3aed;border:1px solid #d9c2ff;border-radius:6px;padding:3px 8px}

/* Review surface refinements: responsive navigation, mobile table reflow, and system dark mode. */
html{color-scheme:light dark;overflow-x:hidden}body{overflow-x:hidden}.bd-app{min-width:0}.bd-main,.bd-content,.bd-page{min-width:0}.bd-preview-badge{white-space:nowrap}.bd-nav__item:focus-visible,.bd-ghostbtn:focus-visible,.bd-primarybtn:focus-visible,.bd-pillbtn:focus-visible,.bd-portalbtn:focus-visible,.bd-iconbtn:focus-visible,.bd-avatarbtn:focus-visible{outline:3px solid #b59ae8;outline-offset:2px}
@media (max-width:900px){
  .bd-sidebar{display:flex;top:0;bottom:0;width:112px;height:100vh;padding:14px 8px 12px;box-shadow:3px 0 18px rgba(5,35,26,.16);overflow-y:auto}
  .bd-brand{display:flex;justify-content:center;padding:0 0 14px}.bd-brand__mark{width:38px;height:38px;border-radius:9px}.bd-brand__mark img{width:25px}.bd-brand__text,.bd-sidebar__foot{display:none}
  .bd-nav{display:flex;flex-direction:column;gap:3px;height:auto;align-items:stretch}
  .bd-nav__item{min-width:0;height:49px;padding:5px 4px;justify-content:center;align-items:center;flex-direction:column;gap:3px;border-radius:8px;font-size:9px;line-height:1.08;text-align:center}
  .bd-nav__item svg{width:18px;height:18px}.bd-nav__item:last-child{display:flex}
  .bd-main{margin-left:112px;width:calc(100% - 112px);padding-bottom:0}.bd-content{padding:16px}.bd-topbar{padding:18px 16px 8px;gap:14px}.bd-topbar__title h1{font-size:25px}.bd-topbar__title p{font-size:12px}
  .bd-topbar__controls,.bd-topbar__row{width:100%}.bd-search{flex:1;min-width:0}.bd-search input{width:100%}.bd-datepill{align-self:flex-start}
  .bd-pagehead{flex-direction:column}.bd-pagehead__actions{width:100%;flex-wrap:wrap}.bd-pagehead__actions .bd-search{min-width:190px}.bd-pagetitle,.bd-pagehead__title h1{font-size:27px}
  .bd-row--bottom3,.bd-row--charts,.bd-row--bottom{grid-template-columns:1fr}.bd-card{min-width:0}.bd-chart{min-height:240px}
  .bd-footer{margin:14px 16px 10px;flex-wrap:wrap}.bd-footer__sep{display:none}
  .bd-table{display:block;width:100%;min-width:0!important;border-collapse:separate}.bd-table thead{display:none}.bd-table tbody,.bd-table tfoot{display:block}.bd-table tr{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:5px 12px;padding:12px 14px;border-bottom:1px solid var(--bd-border);width:100%}.bd-table td{display:block;width:auto!important;min-width:0;padding:3px 0!important;border:0!important;white-space:normal!important;overflow-wrap:anywhere}.bd-table td:first-child{grid-column:1/-1}.bd-table td:last-child{justify-self:end}.bd-table__total{background:var(--bd-green-soft)}
  .bd-filters{flex-wrap:wrap}.bd-filterbar{flex-wrap:wrap}.bd-stat__value{font-size:26px}
}
@media (max-width:560px){
  .bd-stats,.bd-stats--4,.bd-stats--5{grid-template-columns:1fr}.bd-content{padding:12px}.bd-topbar{padding:14px 12px 6px}.bd-topbar__row{display:grid;grid-template-columns:1fr auto auto}.bd-topbar__controls{gap:8px}.bd-page{gap:14px}.bd-pagehead__actions>*{flex:1 1 auto}.bd-pagehead__actions .bd-primarybtn{flex-basis:100%}.bd-card__head{align-items:flex-start;gap:8px;flex-wrap:wrap}.bd-nav__item span{font-size:8px}.bd-table tr{grid-template-columns:1fr}.bd-table td:first-child{grid-column:auto}.bd-avatarbtn svg{display:none}.bd-preview-badge{display:block;width:max-content;margin:6px 0 0}
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){--bd-hover:#1e2c27;--bd-bg:#0e1714;--bd-card:#15211d;--bd-border:#2a3933;--bd-ink:#f2f7f3;--bd-muted:#b4c3bc;--bd-muted-strong:#c1cec8;--bd-green-soft:#183126;--bd-purple-soft:#2b2441;--bd-purple-pale:#75659b;--bg:#0e1714;--surface:#15211d;--ink:#f2f7f3;--ink-strong:#f2f7f3;--muted:#a7b5af;--muted-strong:#c1cec8;--line:#2a3933;--line-soft:#24322d;--line-strong:#394942;--offwhite:#0e1714;--bd-line-soft:#24332d;--bd-danger:#f08a80;--bd-danger-soft:#3a1f1c;--negative:#ef9a90}
  html:not([data-theme="light"]) body,html:not([data-theme="light"]) .bd-app{background:var(--bd-bg);color:var(--bd-ink)}html:not([data-theme="light"]) .bd-card,html:not([data-theme="light"]) .bd-stat,html:not([data-theme="light"]) .bd-search,html:not([data-theme="light"]) .bd-iconbtn,html:not([data-theme="light"]) .bd-avatarbtn,html:not([data-theme="light"]) .bd-datepill,html:not([data-theme="light"]) .bd-pillbtn,html:not([data-theme="light"]) .bd-ghostbtn,html:not([data-theme="light"]) .bd-primarybtn,html:not([data-theme="light"]) .bd-filter,html:not([data-theme="light"]) .bd-table-wrap,html:not([data-theme="light"]) .bd-pagehead__actions input{background:var(--bd-card);border-color:var(--bd-border);color:var(--bd-ink)}
  html:not([data-theme="light"]) .bd-table tr,html:not([data-theme="light"]) .bd-table td,html:not([data-theme="light"]) .bd-table th,html:not([data-theme="light"]) .bd-activity li,html:not([data-theme="light"]) .bd-campaignrow{border-color:var(--bd-border)!important}html:not([data-theme="light"]) .bd-search input{color:var(--bd-ink)}html:not([data-theme="light"]) .bd-search input::placeholder{color:#83918b}html:not([data-theme="light"]) .bd-footer{color:var(--bd-muted)}html:not([data-theme="light"]) .bd-notice{background:#332b18;border-color:#5e4d22;color:#f4d98d}html:not([data-theme="light"]) .bd-preview-badge{background:#302644;color:#d9c2ff;border-color:#594279}
}
/* Forced dark theme (settings toggle), independent of OS preference */
html[data-theme="dark"]{color-scheme:dark;--bd-hover:#1e2c27;--bd-bg:#0e1714;--bd-card:#15211d;--bd-border:#2a3933;--bd-ink:#f2f7f3;--bd-muted:#b4c3bc;--bd-muted-strong:#c1cec8;--bd-green-soft:#183126;--bd-purple-soft:#2b2441;--bd-purple-pale:#75659b;--bg:#0e1714;--surface:#15211d;--ink:#f2f7f3;--ink-strong:#f2f7f3;--muted:#a7b5af;--muted-strong:#c1cec8;--line:#2a3933;--line-soft:#24322d;--line-strong:#394942;--offwhite:#0e1714;--bd-line-soft:#24332d;--bd-danger:#f08a80;--bd-danger-soft:#3a1f1c;--negative:#ef9a90}
html[data-theme="dark"] body,html[data-theme="dark"] .bd-app{background:var(--bd-bg);color:var(--bd-ink)}
html[data-theme="dark"] .bd-card,html[data-theme="dark"] .bd-stat,html[data-theme="dark"] .bd-search,html[data-theme="dark"] .bd-iconbtn,html[data-theme="dark"] .bd-avatarbtn,html[data-theme="dark"] .bd-datepill,html[data-theme="dark"] .bd-pillbtn,html[data-theme="dark"] .bd-ghostbtn,html[data-theme="dark"] .bd-primarybtn,html[data-theme="dark"] .bd-filter,html[data-theme="dark"] .bd-table-wrap,html[data-theme="dark"] .bd-pagehead__actions input{background:var(--bd-card);border-color:var(--bd-border);color:var(--bd-ink)}
html[data-theme="dark"] .bd-table tr,html[data-theme="dark"] .bd-table td,html[data-theme="dark"] .bd-table th,html[data-theme="dark"] .bd-activity li,html[data-theme="dark"] .bd-campaignrow{border-color:var(--bd-border)!important}
html[data-theme="dark"] .bd-search input{color:var(--bd-ink)}html[data-theme="dark"] .bd-search input::placeholder{color:#83918b}html[data-theme="dark"] .bd-footer{color:var(--bd-muted)}html[data-theme="dark"] .bd-notice{background:#332b18;border-color:#5e4d22;color:#f4d98d}html[data-theme="dark"] .bd-preview-badge{background:#302644;color:#d9c2ff;border-color:#594279}
html[data-theme="light"]{color-scheme:light}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}

@media (max-width:900px){
  .bd-campaigns{overflow:hidden}
  .bd-campaign{grid-template-columns:44px minmax(0,1fr) 34px !important;gap:10px !important;position:relative;padding:14px 0 !important}
  .bd-campaign>*{min-width:0;max-width:100%}.bd-campaign .bd-rowmenu{grid-column:3;grid-row:1;justify-self:end;align-self:start;position:static}
  .bd-campaign__tile{grid-column:1;grid-row:1}.bd-campaign__name{grid-column:2;grid-row:1}.bd-campaign__stat,.bd-campaign__performance{grid-column:2/4;width:100%;justify-self:start}
}

.bd-row--bottom3{grid-template-columns:minmax(0,1.9fr) minmax(0,1fr)}.bd-sidecol{min-width:0}.bd-row--bottom3>*{min-width:0}
@media (max-width:900px){
  .bd-campaign__col,.bd-campaign__col--perf{grid-column:2/4!important;width:100%!important;min-width:0!important;max-width:none!important}
  .bd-campaign__head{width:auto!important;max-width:none!important;white-space:normal!important;overflow:visible!important;text-overflow:clip!important}
  .bd-row--bottom3{grid-template-columns:1fr}
}
@media (max-width:560px){
  .bd-topbar__row{grid-template-columns:minmax(0,1fr) 40px 40px;gap:7px}
  .bd-search{width:100%;min-width:0}.bd-search input{width:100%;min-width:0;height:40px;padding-left:12px;padding-right:35px;font-size:11px}
  .bd-iconbtn,.bd-avatarbtn__avatar{width:40px;height:40px}.bd-avatarbtn{width:40px;min-width:0}.bd-avatarbtn__name{display:none}
}

/* Mobile review pass: the desktop rail becomes an on-demand drawer so content gets the full screen. */
.bd-mobile-menu,.bd-mobile-backdrop{display:none}
@media (max-width:900px){
  body.bd-mobile-nav-open{overflow:hidden}
  .bd-mobile-menu{display:flex;position:fixed;z-index:42;top:max(12px,env(safe-area-inset-top));left:12px;width:42px;height:42px;border:1px solid var(--bd-border);border-radius:11px;background:var(--bd-card);color:var(--bd-ink);align-items:center;justify-content:center;box-shadow:0 3px 14px rgba(9,36,28,.12);cursor:pointer}
  .bd-mobile-menu svg{width:21px;height:21px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round}
  .bd-mobile-nav-open .bd-mobile-menu{left:min(calc(82vw - 56px),230px);top:max(18px,env(safe-area-inset-top));background:rgba(255,255,255,.1);color:#fff;border-color:rgba(255,255,255,.18);box-shadow:none}
  .bd-mobile-backdrop{position:fixed;z-index:38;inset:0;background:rgba(7,29,22,.46);border:0;padding:0}
  .bd-mobile-nav-open .bd-mobile-backdrop{display:block}
  .bd-sidebar{display:none;z-index:40;top:0;bottom:0;left:0;width:min(82vw,286px);height:100dvh;padding:18px 14px calc(18px + env(safe-area-inset-bottom));box-shadow:8px 0 30px rgba(5,35,26,.26);overflow-y:auto}
  .bd-mobile-nav-open .bd-sidebar{display:flex}
  .bd-brand{display:flex;justify-content:flex-start;padding:2px 8px 20px}.bd-brand__mark{width:42px;height:42px;border-radius:10px}.bd-brand__mark img{width:28px}.bd-brand__text{display:flex}
  .bd-nav{align-items:stretch;gap:3px}.bd-nav__item{height:45px;padding:0 13px;justify-content:flex-start;align-items:center;flex-direction:row;gap:12px;border-radius:9px;font-size:13px;line-height:1.2;text-align:left}.bd-nav__item span{font-size:13px}.bd-nav__item svg{width:19px;height:19px}.bd-nav__item:last-child{display:flex}
  .bd-sidebar__foot{display:flex;margin-top:auto;padding-top:18px}
  .bd-main{margin-left:0;width:100%}.bd-content{padding:14px}.bd-topbar{padding:14px 14px 6px 66px;gap:10px}.bd-topbar__title h1{font-size:26px;line-height:1.08}.bd-topbar__title p{font-size:12.5px;line-height:1.45}
  .bd-topbar__controls{align-items:stretch;gap:8px}.bd-topbar__row{width:100%;display:flex;gap:8px}.bd-search{flex:1;min-width:0}.bd-search input{width:100%;height:40px;border-radius:10px}.bd-iconbtn,.bd-avatarbtn__avatar{width:40px;height:40px;border-radius:10px}.bd-datepill{height:38px;align-self:flex-start}
  .bd-role-switcher{width:100%;order:3}.bd-role-note{font-size:11.5px;line-height:1.45!important}
  .bd-page{gap:14px}.bd-pagehead,.bd-detailhead{gap:12px}.bd-pagehead__actions,.bd-detailhead__actions{width:100%;flex-wrap:wrap}.bd-pagetitle,.bd-pagehead__title h1,.bd-detailtitle{font-size:26px;line-height:1.12}.bd-pagesub,.bd-pagehead__title p,.bd-detailmeta{font-size:12.5px;line-height:1.5}
  .bd-card{padding:17px;border-radius:13px}.bd-card--flush{padding:0}.bd-card--flush .bd-card__head{padding:16px 16px 0}.bd-card__head{margin-bottom:14px}.bd-card__head h2{font-size:17px}.bd-stat{padding:16px;border-radius:13px;gap:12px}.bd-stat__icon{width:42px;height:42px}.bd-stat__icon svg{width:20px;height:20px}.bd-stat__value{font-size:25px}.bd-stat__label{font-size:11.5px}.bd-stat__sub,.bd-stat__foot{font-size:11.5px}
  .bd-row,.bd-dash{gap:14px}.bd-row--bottom3,.bd-row--charts,.bd-row--bottom,.bd-creategrid,.bd-history{grid-template-columns:1fr}.bd-history{padding:16px;gap:18px}.bd-hintbar{align-items:flex-start;padding:15px}.bd-hintbar .bd-ghostbtn{margin-left:0}.bd-campaignimg{width:54px;height:54px;border-radius:11px;font-size:18px}.bd-detailhead__id{gap:12px}
  .bd-tabs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0;border:1px solid var(--bd-border);border-radius:10px;overflow:hidden}.bd-tab{min-width:0;padding:10px 8px;border:0;border-right:1px solid var(--bd-border);border-bottom:1px solid var(--bd-border);margin:0;font-size:12px}.bd-tab--active{background:var(--bd-purple-soft);color:var(--bd-purple-deep)}
  .bd-metric-grid{grid-template-columns:1fr!important;gap:14px!important}.bd-chart-svg{width:100%;height:auto}.bd-chart-meta{flex-wrap:wrap;gap:8px!important}
  .bd-lead-overlay{left:0;top:0;bottom:0;padding:76px 14px calc(18px + env(safe-area-inset-bottom));z-index:18}.bd-leadflow{grid-template-columns:repeat(2,minmax(0,1fr))!important}.bd-lead-card{grid-template-columns:40px minmax(0,1fr)!important;gap:9px!important}.bd-lead-card .bd-badge,.bd-lead-card__actions{grid-column:2!important;justify-self:start!important}
  .bd-footer{margin:8px 14px 12px;padding:16px 0 calc(18px + env(safe-area-inset-bottom));font-size:11.5px;line-height:1.4;text-align:center}.bd-footer--client{justify-content:center}
  .bd-tablewrap{overflow:visible}.bd-table{display:block;width:100%;border-collapse:separate}.bd-table thead{display:none}.bd-table tbody,.bd-table tfoot{display:block}.bd-table tr{display:block;padding:13px 16px;border-bottom:1px solid var(--bd-border);width:100%}.bd-table td{display:flex!important;align-items:flex-start;justify-content:space-between;gap:16px;width:100%!important;min-width:0;padding:5px 0!important;border:0!important;white-space:normal!important;overflow-wrap:anywhere;text-align:right!important;font-size:12.5px}.bd-table td::before{content:attr(data-label);flex:0 0 42%;color:var(--bd-muted);font-size:10px;font-weight:700;letter-spacing:.45px;text-transform:uppercase;text-align:left}.bd-table td:first-child{display:block!important;text-align:left!important;padding-bottom:8px!important}.bd-table td:first-child::before{display:none}.bd-table td:last-child{justify-self:auto}.bd-table td[hidden]{display:none!important}.bd-table__total{background:var(--bd-green-soft)}.bd-cellmain,.bd-cellclient{justify-content:flex-start;text-align:left}.bd-rowactions{justify-content:flex-end}.bd-pager{padding:12px 16px;gap:10px;flex-wrap:wrap}
}
@media (max-width:560px){
  .bd-content{padding:10px}.bd-topbar{padding:12px 10px 6px 64px}.bd-mobile-menu{left:10px}.bd-page{gap:12px}
  .bd-stats,.bd-stats--4,.bd-stats--5,.bd-stats--6,.bd-stats--7{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.bd-stat{padding:13px;display:block}.bd-stat__icon{width:34px;height:34px;margin-bottom:9px}.bd-stat__icon svg{width:17px;height:17px}.bd-stat__value,.bd-stat--sm .bd-stat__value{font-size:21px;letter-spacing:-.3px}.bd-stat__sub{line-height:1.35}.bd-stat__foot{line-height:1.35}
  .bd-pagehead__actions>*{flex:1 1 auto}.bd-pagehead__actions .bd-btn--primary{flex-basis:100%}.bd-btn,.bd-ghostbtn,.bd-filterpill{min-height:40px;justify-content:center}.bd-card{padding:15px}.bd-card--flush{padding:0}.bd-card--flush .bd-card__head{padding:15px 14px 0}
  .bd-topbar__row{display:grid;grid-template-columns:minmax(0,1fr) 40px 40px;gap:7px}.bd-avatarbtn{width:40px;min-width:0}.bd-avatarbtn__name,.bd-avatarbtn>svg{display:none}.bd-search input{font-size:12px}.bd-preview-badge{display:inline-block;width:auto;margin:0 0 0 6px}
  .bd-campaign{grid-template-columns:40px minmax(0,1fr) 32px!important;padding:12px 0!important}.bd-campaign__tile{width:40px;height:40px;border-radius:10px}.bd-campaign__name strong{font-size:13px}.bd-campaign__col strong{font-size:12.5px}
  .bd-donut__chart{max-width:260px;margin:0 auto}.bd-chart{margin-left:-10px;margin-right:-10px}.bd-chart svg{max-width:100%}.bd-tooltip{display:none}.bd-activity__campaign{margin-left:0}.bd-activity__top{display:block}.bd-activity__time{width:auto;display:block;margin-bottom:3px}
  .bd-createcard{padding:22px 18px}.bd-hintbar{display:block}.bd-hintbar__icon{margin-bottom:10px}.bd-hintbar .bd-ghostbtn{width:100%;margin-top:12px}.bd-leadflow{grid-template-columns:1fr 1fr!important}.bd-leadstage{padding:14px!important}.bd-leadstage__count{font-size:22px!important}
  .bd-role-switcher label{font-size:8.5px}.bd-role-switcher select{font-size:11.5px;max-width:60%}.bd-role-note{display:none}.bd-datepill{font-size:12px;padding:0 12px}.bd-footer__sep{display:none}
}
@media (max-width:370px){.bd-stats,.bd-stats--4,.bd-stats--5,.bd-stats--6,.bd-stats--7{grid-template-columns:1fr}.bd-preview-badge{display:block;width:max-content;margin:5px 0 0}.bd-topbar__title h1{font-size:24px}}
/* Compact phone layout: every screen uses the full width, dense controls, and scannable record cards. */
@media (max-width:560px){
  .bd-topbar{padding:10px 10px 4px 62px}.bd-topbar__title h1{font-size:23px}.bd-topbar__title p{display:none}.bd-topbar__controls{gap:7px}.bd-mobile-menu{top:max(10px,env(safe-area-inset-top));width:40px;height:40px}.bd-mobile-nav-open .bd-mobile-menu{top:max(14px,env(safe-area-inset-top))}
  .bd-content{padding:8px 10px 10px}.bd-page,.bd-dash,.bd-row,.bd-sidecol,.bd-leads{gap:10px}.bd-pagehead,.bd-detailhead{gap:8px}.bd-pagehead__title h1,.bd-pagetitle,.bd-detailtitle{font-size:23px}.bd-pagesub,.bd-pagehead__title p,.bd-detailmeta{margin-top:4px;line-height:1.35}.bd-pagehead__actions,.bd-detailhead__actions{gap:7px}
  .bd-card{padding:13px;border-radius:12px}.bd-card--flush{padding:0}.bd-card--flush .bd-card__head{padding:13px 12px 0}.bd-card__head{margin-bottom:10px}.bd-card__head h2{font-size:16px}.bd-card__sub{font-size:11.5px}.bd-centerhead{margin-top:2px}
  .bd-stats,.bd-stats--4,.bd-stats--5,.bd-stats--6,.bd-stats--7{gap:8px}.bd-stat{min-height:0;padding:11px;border-radius:11px}.bd-stat__icon{width:30px;height:30px;margin-bottom:7px}.bd-stat__icon svg{width:16px;height:16px}.bd-stat__label{font-size:10.5px;line-height:1.25}.bd-stat__value,.bd-stat--sm .bd-stat__value{font-size:19px;margin-top:3px}.bd-stat__sub{font-size:10.5px;margin-top:3px}.bd-stat__foot{font-size:10.5px;margin-top:5px}
  .bd-filterbar{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;padding:9px;border-radius:11px}.bd-filterbar__spacer{display:none}.bd-filterbar>.bd-filterpill,.bd-filterbar>.bd-ghostbtn,.bd-filterbar>.bd-btn{width:100%;min-width:0;min-height:36px;padding:7px 9px;font-size:11px}.bd-filterbar>*:last-child:nth-child(odd){grid-column:1/-1}.bd-filterpill svg,.bd-ghostbtn svg{flex:none}
  .bd-btn,.bd-ghostbtn,.bd-filterpill,.bd-pillbtn{min-height:36px;padding:7px 11px;font-size:11.5px}.bd-pagehead__actions .bd-btn--primary{flex-basis:auto}.bd-pagehead__actions>*{flex:1 1 calc(50% - 4px)}
  .bd-table tr{padding:10px 12px}.bd-table td{height:auto!important;min-height:0!important;padding:3px 0!important;gap:10px;font-size:12px;line-height:1.3}.bd-table td::before{flex-basis:36%;font-size:9px;line-height:1.35}.bd-table td:first-child{padding-bottom:6px!important}.bd-cellmain{gap:9px}.bd-cellmain strong{font-size:12.5px}.bd-cellmain span{font-size:10.5px}.bd-cellclient{gap:6px}.bd-tile{width:34px;height:34px;border-radius:8px;font-size:14px}.bd-avatar{width:32px;height:32px;font-size:11px}.bd-avatars .bd-avatar{margin-left:-10px}.bd-badge{padding:4px 8px;font-size:8.5px}.bd-rowactions{gap:5px}.bd-rowactions .bd-ghostbtn{min-height:32px;padding:5px 8px}.bd-progressring{width:38px;height:38px}.bd-progressring span{width:29px;height:29px}.bd-pager{padding:10px 12px}.bd-pager__text{font-size:11px}.bd-pager__btn{min-width:30px;height:30px}
  .bd-campaign{padding:9px 0!important;gap:8px!important}.bd-campaign__tile{width:36px;height:36px;font-size:15px}.bd-campaign__name{gap:1px}.bd-campaign__name strong{font-size:12px}.bd-campaign__name span{font-size:10px}.bd-campaign__col{gap:2px}.bd-campaign__head{font-size:8px}.bd-campaign__col strong{font-size:11.5px}.bd-perf__bar{max-width:none}.bd-rowmenu{width:30px;height:30px}
  .bd-tabs{grid-template-columns:repeat(2,minmax(0,1fr))}.bd-tab{padding:8px 5px;font-size:11px;min-height:36px}.bd-campaignimg{width:46px;height:46px}.bd-detailhead__id{gap:9px}.bd-backlink{margin-bottom:4px}.bd-metric-grid{gap:10px!important}.bd-metric-card{padding-bottom:12px}.bd-chart-meta{font-size:10.5px;margin-bottom:0}.bd-chart-meta strong{font-size:13px}.bd-chart-svg{min-height:0;height:auto}.bd-chart{min-height:0}.bd-legend{gap:12px;font-size:10.5px}.bd-donut__legend li{padding:6px 2px}
  .bd-lead-overlay{padding:62px 10px calc(12px + env(safe-area-inset-bottom))}.bd-leadflow{gap:8px!important}.bd-leadstage{padding:10px!important;border-radius:10px}.bd-leadstage__count{font-size:19px!important;margin-top:3px}.bd-leadstage__label{font-size:10px}.bd-lead-card{padding:10px;gap:7px!important}.bd-lead-card__main strong{font-size:12.5px}.bd-lead-card__main span{font-size:10.5px}.bd-lead-card__actions{gap:5px}.bd-lead-card__actions .bd-ghostbtn{min-height:32px;padding:5px 9px}
  .bd-creategrid{gap:10px}.bd-createcard{padding:16px 14px;gap:7px}.bd-createcard__icon{width:44px;height:44px}.bd-createcard h3{font-size:15px}.bd-createcard p,.bd-createcard li{font-size:11.5px}.bd-createcard ul{gap:5px;margin:3px 0 6px}.bd-hintbar{padding:12px}.bd-history{padding:12px;gap:12px}
  .bd-footer{margin:4px 10px 8px;padding:12px 0 calc(12px + env(safe-area-inset-bottom))}
}
@media (max-width:370px){.bd-filterbar{grid-template-columns:1fr}.bd-filterbar>*:last-child:nth-child(odd){grid-column:auto}.bd-table td::before{flex-basis:40%}}
@media (prefers-color-scheme:dark) and (max-width:560px){.bd-table tr,.bd-filterbar{background:var(--bd-card)}.bd-table__total{background:var(--bd-green-soft)}}

/* Final phone polish: dense information cards instead of long, label/value stacks. */
@media (max-width:560px){
  .bd-topbar{padding-top:11px}.bd-topbar__title{min-width:0}.bd-topbar__title h1{font-size:21px;letter-spacing:-.35px;white-space:normal}.bd-preview-badge{font-size:8px;letter-spacing:.7px;padding:3px 6px;transform:translateY(-2px)}
  .bd-topbar__row{grid-template-columns:minmax(0,1fr) 38px 38px}.bd-search input,.bd-iconbtn,.bd-avatarbtn__avatar{height:38px}.bd-iconbtn,.bd-avatarbtn,.bd-avatarbtn__avatar{width:38px}.bd-role-switcher{min-height:38px;padding:4px 9px}.bd-datepill{height:36px}
  .bd-pagehead{padding:1px 2px 0}.bd-pagehead__title h1,.bd-pagetitle,.bd-detailtitle{font-size:22px}.bd-pagesub,.bd-pagehead__title p{font-size:11.5px}.bd-pagehead__actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));width:100%}.bd-pagehead__actions>*{width:100%;min-width:0}.bd-pagehead__actions>*:only-child{grid-column:1/-1}
  .bd-filterbar{grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;padding:8px}.bd-filterbar>.bd-filterpill,.bd-filterbar>.bd-ghostbtn,.bd-filterbar>.bd-btn{min-height:34px;padding:6px;font-size:10px}.bd-filterbar>*:last-child:nth-child(odd){grid-column:auto}.bd-filterbar .bd-filterpill--label{grid-column:span 1;background:var(--bd-green-soft);color:var(--bd-sidebar)}
  .bd-stats,.bd-stats--4,.bd-stats--5,.bd-stats--6,.bd-stats--7{grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}.bd-stat{padding:10px}.bd-stat__icon{float:left;margin:0 8px 5px 0}.bd-stat__body{min-width:0}.bd-stat__label{min-height:27px}.bd-stat__value,.bd-stat--sm .bd-stat__value{font-size:18px;clear:both}.bd-stat__sub,.bd-stat__foot{font-size:10px}
  .bd-table tr{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px 12px;padding:11px 12px}.bd-table td{display:block!important;text-align:left!important;padding:0!important;font-size:11.5px;line-height:1.3}.bd-table td::before{display:block;content:attr(data-label);margin-bottom:3px;color:var(--bd-muted);font-size:8px;font-weight:700;letter-spacing:.45px;text-transform:uppercase;text-align:left}.bd-table td:first-child{grid-column:1/-1;padding:0 0 8px!important;border-bottom:1px solid var(--bd-border)!important}.bd-table td:first-child::before{display:none}.bd-table td:last-child{justify-self:stretch;text-align:left!important}.bd-table td:last-child:not(:first-child){align-self:end}.bd-table .bd-rowactions{justify-content:flex-start}.bd-table .bd-cellmain,.bd-table .bd-cellclient{min-width:0}.bd-table__total td:first-child{border-bottom-color:color-mix(in srgb,var(--bd-green-text) 20%,transparent)!important}
  .bd-campaign{display:grid!important;grid-template-columns:36px minmax(0,1fr) minmax(0,1fr) 30px!important;gap:8px 10px!important;padding:11px 0!important}.bd-campaign__tile{grid-column:1;grid-row:1;width:36px;height:36px}.bd-campaign__name{grid-column:2/4;grid-row:1;align-self:center}.bd-campaign .bd-rowmenu{grid-column:4;grid-row:1}.bd-campaign>.bd-campaign__col{grid-column:auto!important;width:auto!important;padding-top:5px;border-top:1px solid var(--bd-border)}.bd-campaign>.bd-campaign__col:nth-child(3){grid-column:1/3!important}.bd-campaign>.bd-campaign__col:nth-child(4){grid-column:3/5!important}.bd-campaign>.bd-campaign__col:nth-child(5){grid-column:1/3!important}.bd-campaign>.bd-campaign__col:nth-child(6){grid-column:3/5!important}.bd-campaign__head{font-size:7.5px!important;letter-spacing:.6px}.bd-campaign__col strong{font-size:11px}.bd-campaign__col .bd-badge{margin-top:1px}.bd-perf__bar{height:4px}
  .bd-card__head{align-items:center}.bd-card__head .bd-pillbtn,.bd-card__head .bd-filterpill{min-height:32px;height:32px;padding:5px 9px}.bd-card__head h2{font-size:15px;line-height:1.15}.bd-card__head .bd-linkbtn{font-size:10.5px}.bd-card--table{padding:12px}.bd-card--flush .bd-card__head{padding:12px 12px 0}
  .bd-tabs{grid-template-columns:repeat(2,minmax(0,1fr))}.bd-tab{font-size:10.5px;line-height:1.2}.bd-detailhead{display:block}.bd-detailhead__id{margin-bottom:9px}.bd-detailhead__actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.bd-detailhead__actions>*{width:100%;justify-content:center}
  .bd-chart-svg{min-height:150px}.bd-chart-meta{gap:5px 12px!important}.bd-donut__chart{max-width:210px}.bd-donut__center strong{font-size:24px}.bd-createcard{align-items:flex-start;text-align:left}.bd-createcard__icon{align-self:center}.bd-createcard .bd-btn{align-self:stretch}.bd-leadflow{grid-template-columns:repeat(2,minmax(0,1fr))!important}.bd-lead-card{display:grid!important;grid-template-columns:34px minmax(0,1fr)!important}.bd-lead-card>.bd-avatar{grid-column:1;grid-row:1}.bd-lead-card__main{grid-column:2;grid-row:1}.bd-lead-card>.bd-badge,.bd-lead-card__actions{grid-column:2!important}.bd-lead-card__actions{width:auto!important}
}
@media (max-width:360px){.bd-filterbar{grid-template-columns:repeat(2,minmax(0,1fr))}.bd-pagehead__actions{grid-template-columns:1fr}.bd-stats,.bd-stats--4,.bd-stats--5,.bd-stats--6,.bd-stats--7{grid-template-columns:1fr}.bd-stat__label{min-height:0}.bd-stat__value{clear:none}.bd-table tr{grid-template-columns:1fr 1fr}}
@media (prefers-reduced-motion:reduce){.bd-sidebar{transition:none}}

.bd-safechart{width:100%;overflow:hidden;margin-top:10px}.bd-safechart svg{display:block;width:100%;height:auto;min-height:230px}.bd-safechart__grid line{stroke:var(--bd-border);stroke-width:1}.bd-safechart__axis{font:12px var(--font-body);fill:var(--bd-muted)}.bd-financials-safe .bd-table td{text-align:left}.bd-financials-safe .bd-table td:last-child{text-align:left}@media(max-width:560px){.bd-safechart svg{min-height:180px}.bd-financials-safe .bd-stats{grid-template-columns:1fr 1fr}.bd-financials-safe .bd-stat{min-width:0}.bd-financials-safe .bd-stat__value{font-size:20px}}@media(max-width:390px){.bd-financials-safe .bd-stats{grid-template-columns:1fr}}

[hidden]{display:none!important}.bd-role-switcher{display:flex;align-items:center;gap:9px;background:var(--bd-card);border:1px solid var(--bd-border);border-radius:11px;padding:6px 10px 6px 12px;color:var(--bd-muted-strong);box-shadow:0 1px 3px #16281f0a}.bd-role-switcher label{font-family:var(--font-ui);font-size:9px;font-weight:700;letter-spacing:.8px;text-transform:uppercase;white-space:nowrap}.bd-role-switcher select{appearance:none;border:0;background:transparent;color:var(--bd-ink);font:600 12px var(--font-body);padding:4px 22px 4px 2px;outline:none;background-image:linear-gradient(45deg,transparent 50%,var(--bd-muted) 50%),linear-gradient(135deg,var(--bd-muted) 50%,transparent 50%);background-position:calc(100% - 9px) 50%,calc(100% - 5px) 50%;background-size:4px 4px,4px 4px;background-repeat:no-repeat}.bd-role-note{font-size:11.5px;color:var(--bd-muted);line-height:1.45;max-width:360px}.bd-role-note strong{color:var(--bd-ink)}.bd-campaign-type{display:inline-flex;margin-left:8px;vertical-align:middle}.bd-metric-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}.bd-metric-card{padding-bottom:18px}.bd-metric-card .bd-card__head{margin-bottom:8px}.bd-chart-meta{display:flex;gap:18px;align-items:center;font-size:12px;color:var(--bd-muted);margin-bottom:4px;flex-wrap:wrap}.bd-chart-meta span{display:flex;align-items:center;gap:7px}.bd-chart-meta strong{color:var(--bd-ink);font-size:15px}.bd-chart-svg{display:block;width:100%;height:auto;min-height:220px}.bd-chart-axis{font:10px var(--font-body);fill:var(--bd-muted)}.bd-chart-grid{stroke:var(--bd-border);stroke-width:1}.bd-chart-line{fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:3}.bd-chart-dot{stroke:var(--bd-card);stroke-width:2}.bd-chart-area{fill:url(#bdViewsFill)}.bd-leads{display:flex;flex-direction:column;gap:20px}.bd-leadflow{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}.bd-leadstage{background:var(--bd-card);border:1px solid var(--bd-border);border-radius:14px;padding:17px}.bd-leadstage__count{font-family:var(--font-display);font-size:26px;color:var(--bd-ink);margin-top:6px}.bd-leadstage__label{font-size:12px;color:var(--bd-muted)}.bd-lead-card{background:var(--bd-card);border:1px solid var(--bd-border);border-radius:12px;padding:14px;display:flex;gap:12px;align-items:center}.bd-lead-card__main{flex:1;min-width:0}.bd-lead-card__main strong{display:block;font-size:13.5px;color:var(--bd-ink)}.bd-lead-card__main span{display:block;font-size:11.5px;color:var(--bd-muted);margin-top:3px}.bd-lead-card__actions{display:flex;gap:8px}.bd-foundation-note{background:var(--bd-green-soft);border:1px solid color-mix(in srgb,var(--bd-green-text) 24%,transparent);border-radius:11px;padding:12px 15px;font-size:12.5px;color:var(--bd-muted-strong);line-height:1.5}.bd-foundation-note strong{color:var(--bd-ink)}.bd-lead-overlay{position:fixed;z-index:15;left:224px;right:0;top:150px;bottom:46px;overflow:auto;background:var(--bd-bg);padding:24px 34px}.bd-lead-overlay .bd-page{max-width:1180px;margin:0 auto}
@media(max-width:900px){.bd-role-switcher{order:3;width:100%;justify-content:space-between}.bd-role-note{max-width:none}.bd-metric-grid,.bd-leadflow{grid-template-columns:1fr}.bd-chart-svg{min-height:180px}.bd-lead-card{align-items:flex-start;flex-wrap:wrap}.bd-lead-card__actions{width:100%}.bd-lead-overlay{left:0;top:146px;bottom:70px;padding:18px 16px}}
@media(prefers-color-scheme:dark){.bd-role-switcher{background:var(--bd-card)}.bd-chart-dot{stroke:var(--bd-card)}.bd-foundation-note{border-color:#315c46}.bd-role-switcher select{color:var(--bd-ink)}}


/* Public campaign landing and separate portal entrances for the foundation preview. */
body[data-portal-view]:not([data-portal-view="dashboard"]) #root{display:none}
body[data-portal-view]:not([data-portal-view="dashboard"]) .bd-mobile-menu,
body[data-portal-view]:not([data-portal-view="dashboard"]) .bd-mobile-backdrop{display:none!important}
.portal-shell{min-height:100vh;background:var(--bd-bg);color:var(--bd-ink)}
.portal-bar{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:18px clamp(18px,5vw,72px);border-bottom:1px solid var(--bd-border);background:var(--bd-card)}
.portal-bar__label{font-family:var(--font-ui);font-size:11px;font-weight:700;letter-spacing:.7px;color:var(--bd-sidebar)}
.portal-brand{display:flex;align-items:center;gap:11px;min-width:0}.portal-brand img{width:40px;height:40px;object-fit:contain;border-radius:10px}.portal-brand span{font-family:var(--font-display);font-size:20px;font-weight:600;letter-spacing:-.2px;color:var(--bd-ink);white-space:nowrap}
.portal-bar__actions{display:flex;align-items:center;gap:9px}
.portal-btn{min-height:40px;border:1px solid var(--bd-border);border-radius:9px;background:var(--bd-card);color:var(--bd-ink);padding:9px 15px;font-size:12.5px;font-weight:700;cursor:pointer}
.portal-btn:hover{border-color:var(--bd-purple);color:var(--bd-purple-deep)}
.portal-btn--primary{background:var(--bd-sidebar);border-color:var(--bd-sidebar);color:#fff}.portal-btn--primary:hover{background:#145540;border-color:#145540;color:#fff}
.portal-btn--quiet{background:transparent}
.portal-main{width:min(1180px,calc(100% - 36px));margin:0 auto;padding:clamp(36px,7vw,82px) 0 58px}
.portal-intro{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(280px,.7fr);gap:52px;align-items:end;padding-bottom:36px;border-bottom:1px solid var(--bd-border)}
.portal-intro h1{font-family:var(--font-display);font-size:clamp(38px,5.2vw,67px);line-height:.98;letter-spacing:-1.7px;max-width:780px;color:var(--bd-ink)}
.portal-intro p{font-size:14px;line-height:1.65;color:var(--bd-muted-strong)}
.portal-preview{display:inline-flex;margin-bottom:14px;padding:5px 9px;border-radius:6px;background:var(--bd-purple-soft);color:var(--bd-purple-deep);font:700 9px var(--font-ui);letter-spacing:1px}
.portal-sectionhead{display:flex;align-items:end;justify-content:space-between;gap:24px;margin:34px 0 18px}.portal-sectionhead h2{font-family:var(--font-display);font-size:25px;color:var(--bd-ink)}.portal-sectionhead p{font-size:12.5px;color:var(--bd-muted);max-width:54ch;line-height:1.5}
.portal-campaigns{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
.portal-campaign{background:var(--bd-card);border:1px solid var(--bd-border);border-radius:14px;padding:0 20px 20px;min-width:0;overflow:hidden}.portal-campaign__visual{position:relative;height:174px;margin:0 -20px 18px;display:flex;align-items:center;justify-content:center;overflow:hidden;background:#173c30}.portal-campaign__visual::before,.portal-campaign__visual::after{content:"";position:absolute;border-radius:50%;filter:none}.portal-campaign__visual::before{width:210px;height:210px;right:-72px;top:-108px;background:#b59ae8}.portal-campaign__visual::after{width:155px;height:155px;left:-44px;bottom:-96px;background:#e1d7f7}.portal-campaign:nth-child(2) .portal-campaign__visual{background:#472b72}.portal-campaign:nth-child(2) .portal-campaign__visual::before{background:#f0a7bf;width:170px;height:170px;right:-40px;top:-70px}.portal-campaign:nth-child(2) .portal-campaign__visual::after{background:#a8d6c1;width:190px;height:190px;left:-65px;bottom:-120px}.portal-campaign:nth-child(3) .portal-campaign__visual{background:#26363f}.portal-campaign:nth-child(3) .portal-campaign__visual::before{background:#d5a44e;width:190px;height:190px;right:-60px;top:-92px}.portal-campaign:nth-child(3) .portal-campaign__visual::after{background:#6f8d81;width:180px;height:180px;left:-60px;bottom:-112px}.portal-campaign__visual img,.portal-campaign__cover{position:relative;z-index:2;width:96px;height:96px;object-fit:contain;filter:drop-shadow(0 10px 22px rgba(0,0,0,.18))}.portal-campaign__cover{overflow:visible}.portal-campaign__cover *{vector-effect:non-scaling-stroke}.portal-campaign__visual .bd-badge{position:absolute;z-index:3;right:14px;top:14px}.portal-campaign__top{display:flex;align-items:start;justify-content:space-between;gap:12px}.portal-campaign__art{width:46px;height:46px;border-radius:11px;background:var(--bd-sidebar);color:#fff;display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-size:20px}.portal-campaign:nth-child(2) .portal-campaign__art{background:var(--bd-purple-deep)}.portal-campaign:nth-child(3) .portal-campaign__art{background:var(--bd-sage,#4d6b5c)}
.portal-campaign h3{font-size:15px;margin-top:18px;color:var(--bd-ink)}.portal-campaign__artist{font-size:11.5px;color:var(--bd-muted);margin-top:3px}.portal-campaign__copy{font-size:12.5px;line-height:1.55;color:var(--bd-muted-strong);margin-top:13px}.portal-campaign__facts{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:18px;padding-top:15px;border-top:1px solid var(--bd-border)}.portal-fact span{display:block;font:700 8.5px var(--font-ui);letter-spacing:.65px;color:var(--bd-muted);text-transform:uppercase}.portal-fact strong{display:block;font-size:12px;margin-top:4px;color:var(--bd-ink)}
.portal-footnote{margin-top:18px;font-size:12px;line-height:1.55;color:var(--bd-muted)}.portal-filters{display:flex;gap:7px;flex-wrap:wrap}.portal-filter{padding:6px 10px;border-radius:999px;border:1px solid var(--bd-border);background:var(--bd-card);color:var(--bd-muted-strong);font-size:10.5px;font-weight:700}.portal-filter--active{background:var(--bd-sidebar);border-color:var(--bd-sidebar);color:#fff}.portal-rate{margin-top:15px;padding:12px;border-radius:9px;background:var(--bd-green-soft);display:flex;align-items:baseline;justify-content:space-between;gap:12px}.portal-rate span{font:700 8.5px var(--font-ui);letter-spacing:.7px;text-transform:uppercase;color:var(--bd-muted)}.portal-rate strong{font-size:15px;color:var(--bd-sidebar)}.portal-budget{margin-top:15px}.portal-budget__head{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:10.5px;color:var(--bd-muted)}.portal-budget__head strong{color:var(--bd-ink);font-size:11px}.portal-budget__track{display:block;height:7px;border-radius:8px;background:var(--bd-border);overflow:hidden;margin-top:7px}.portal-budget__fill{display:block;height:100%;border-radius:8px;background:var(--bd-purple)}.portal-brief{margin-top:16px;padding-top:15px;border-top:1px solid var(--bd-border)}.portal-brief h4{font-size:11.5px;color:var(--bd-ink);margin-bottom:6px}.portal-brief p,.portal-brief li{font-size:11.5px;line-height:1.5;color:var(--bd-muted-strong)}.portal-brief ul{padding-left:17px;margin-top:8px;display:grid;gap:4px}.portal-platforms{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}.portal-platforms span{display:inline-flex;padding:4px 7px;border-radius:6px;background:var(--bd-purple-soft);color:var(--bd-purple-deep);font-size:10px;font-weight:700}
.portal-stage{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:28px;background:var(--bd-sidebar)}
.portal-panel{width:min(980px,100%);background:var(--bd-bg);border-radius:18px;padding:clamp(24px,4vw,42px);box-shadow:0 24px 60px rgba(3,30,22,.28)}
.portal-panel--narrow{width:min(620px,100%)}.portal-back{border:0;background:transparent;color:var(--bd-green-text);font-size:12.5px;font-weight:700;cursor:pointer;padding:0 0 18px}.portal-panel h1{font-family:var(--font-display);font-size:clamp(29px,4vw,42px);color:var(--bd-ink)}.portal-panel__lede{font-size:13.5px;line-height:1.6;color:var(--bd-muted-strong);margin:8px 0 24px;max-width:68ch}
.portal-choices{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.portal-choice{border:1px solid var(--bd-border);border-radius:13px;background:var(--bd-card);padding:19px;text-align:left;cursor:pointer;color:var(--bd-ink)}.portal-choice:hover{border-color:var(--bd-purple)}.portal-choice strong{display:block;font-size:14px}.portal-choice span{display:block;font-size:11.5px;line-height:1.5;color:var(--bd-muted);margin-top:6px}.portal-choice__arrow{margin-top:15px!important;color:var(--bd-purple-deep)!important;font-weight:700}
.portal-choice--wide{grid-column:1/-1}.portal-foundation{margin-top:18px;padding:12px 14px;border:1px solid var(--bd-border);border-radius:10px;color:var(--bd-muted);font-size:11.5px;line-height:1.55}
.creator-preview{display:flex;flex-direction:column;gap:16px}.creator-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}.creator-head__actions{display:flex;gap:8px}.creator-grid{display:grid;grid-template-columns:1.35fr .65fr;gap:16px}.creator-list{background:var(--bd-card);border:1px solid var(--bd-border);border-radius:14px;padding:20px}.creator-list h2{font-family:var(--font-display);font-size:19px;margin-bottom:14px}.creator-row{display:grid;grid-template-columns:40px 1fr auto;gap:11px;align-items:center;padding:13px 0;border-bottom:1px solid var(--bd-border)}.creator-row:last-child{border-bottom:0}.creator-row__mark{width:40px;height:40px;border-radius:9px;background:var(--bd-purple-soft);color:var(--bd-purple-deep);display:flex;align-items:center;justify-content:center;font-weight:700}.creator-row strong{font-size:13px}.creator-row span{display:block;font-size:10.5px;color:var(--bd-muted);margin-top:3px}.creator-status{font-size:9px!important;font-weight:700!important;color:var(--bd-green-text)!important;background:var(--bd-green-soft);padding:4px 7px;border-radius:6px}
.creator-profile{background:var(--bd-card);border:1px solid var(--bd-border);border-radius:14px;padding:20px}.creator-profile h2{font-family:var(--font-display);font-size:19px}.creator-profile dl{margin-top:16px}.creator-profile dl div{padding:11px 0;border-bottom:1px solid var(--bd-border)}.creator-profile dt{font-size:10px;color:var(--bd-muted)}.creator-profile dd{font-size:12.5px;font-weight:700;margin-top:4px}.portal-linked{display:flex;gap:6px;flex-wrap:wrap}.portal-linked span{padding:5px 8px;background:var(--bd-green-soft);border-radius:6px;font-size:10.5px;color:var(--bd-sidebar)}
.portal-followups{position:fixed;z-index:16;left:224px;right:0;top:150px;bottom:46px;overflow:auto;background:var(--bd-bg);padding:24px 34px}.portal-followups__inner{max-width:1100px;margin:0 auto}.followup-list{display:flex;flex-direction:column;gap:10px;margin-top:18px}.followup-row{display:grid;grid-template-columns:42px minmax(0,1fr) minmax(150px,.7fr) auto;gap:13px;align-items:center;background:var(--bd-card);border:1px solid var(--bd-border);border-radius:12px;padding:14px}.followup-row strong{font-size:13px}.followup-row p{font-size:12px;color:var(--bd-muted);margin-top:3px}.followup-platform{font-size:11.5px;color:var(--bd-muted-strong)}.followup-note{font-size:10.5px;color:var(--bd-purple-deep);font-weight:700}.portal-shell button:focus-visible,.portal-stage button:focus-visible{outline:3px solid var(--bd-purple-pale);outline-offset:2px}
@media(max-width:900px){.portal-intro{grid-template-columns:1fr;gap:20px}.portal-campaigns{grid-template-columns:1fr}.portal-followups{left:0;top:146px;bottom:70px;padding:18px 14px}.creator-grid{grid-template-columns:1fr}.followup-row{grid-template-columns:38px minmax(0,1fr);gap:10px}.followup-platform,.followup-note{grid-column:2}}
@media(max-width:560px){.portal-bar{padding:12px;align-items:center}.portal-brand{gap:8px}.portal-brand img{width:34px;height:34px;border-radius:8px}.portal-brand span{font-size:0}.portal-brand span::after{content:"Bloom";font-size:17px}.portal-bar__actions{width:auto;margin-left:auto;display:flex}.portal-btn{padding:8px 9px;font-size:11px}.portal-main{width:min(100% - 24px,1180px);padding:32px 0}.portal-intro h1{font-size:38px}.portal-sectionhead{display:block;margin-top:26px}.portal-sectionhead p{margin-top:7px}.portal-panel{padding:21px 16px;border-radius:14px}.portal-stage{padding:12px}.portal-choices{grid-template-columns:1fr}.portal-choice--wide{grid-column:auto}.creator-head{display:block}.creator-head__actions{margin-top:13px;display:grid;grid-template-columns:1fr 1fr}.creator-row{grid-template-columns:36px 1fr}.creator-status{grid-column:2;width:max-content}.portal-campaign{padding:16px}.portal-campaign__facts{grid-template-columns:1fr 1fr}}
@media(prefers-color-scheme:dark){.portal-stage{background:#081f18}.portal-btn--primary{color:#fff}.portal-choice__arrow{color:#bfa8f2!important}}
/* Bloom staff and client sign-in foundation. Authentication stays visibly inactive until the identity backend is connected. */
.portal-login{width:min(1020px,100%);min-height:620px;display:grid;grid-template-columns:minmax(0,.86fr) minmax(420px,1.14fr);overflow:hidden;border-radius:20px;background:var(--bd-card);box-shadow:0 28px 72px rgba(3,30,22,.34)}
.portal-login__story{position:relative;display:flex;flex-direction:column;padding:42px;color:#fff;background:#123f31;overflow:hidden}.portal-login__story::after{content:"";position:absolute;width:260px;height:260px;border-radius:50%;right:-125px;bottom:-95px;background:#b59ae8;opacity:.92}.portal-login__brand{position:relative;z-index:1;display:flex;align-items:center;gap:12px}.portal-login__brand img{width:48px;height:48px;object-fit:contain;border-radius:11px;background:#fff;padding:7px}.portal-login__brand strong{font-family:var(--font-display);font-size:21px}.portal-login__storycopy{position:relative;z-index:1;margin:auto 0}.portal-login__storycopy h2{font-family:var(--font-display);font-size:clamp(34px,4.2vw,52px);line-height:1.08;letter-spacing:-1px;max-width:9ch;padding-bottom:3px}.portal-login__storycopy p{margin-top:18px;max-width:36ch;font-size:13px;line-height:1.65;color:#d3e4dc}.portal-login__access{position:relative;z-index:1;display:grid;gap:11px;margin-top:30px}.portal-login__access span{display:flex;align-items:center;gap:10px;font-size:12px;color:#e7f0ec}.portal-login__access i{width:25px;height:25px;display:grid;place-items:center;border:1px solid rgba(255,255,255,.28);border-radius:50%;font-style:normal;font-size:10px;font-weight:700}.portal-login__aside{position:relative;z-index:1;margin-top:auto;font-size:10.5px;line-height:1.5;color:#a9c8ba;max-width:30ch}
.portal-login__formwrap{display:flex;flex-direction:column;justify-content:center;padding:42px clamp(34px,5vw,62px);background:var(--bd-card)}.portal-login__formwrap .portal-back{align-self:flex-start}.portal-login__eyebrow{font:700 9px var(--font-ui);letter-spacing:1.35px;color:var(--bd-purple-deep);margin-bottom:9px}.portal-login__formwrap h1{font-family:var(--font-display);font-size:clamp(32px,4vw,43px);line-height:1.05;color:var(--bd-ink)}.portal-login__lede{margin:9px 0 25px;font-size:13px;line-height:1.6;color:var(--bd-muted-strong)}.portal-login__form{display:grid;gap:17px}.portal-field{display:grid;gap:7px}.portal-field label{font-size:11.5px;font-weight:700;color:var(--bd-ink)}.portal-inputwrap{position:relative}.portal-inputwrap svg{position:absolute;left:14px;top:50%;transform:translateY(-50%);width:18px;height:18px;stroke:var(--bd-muted);fill:none;stroke-width:1.7;pointer-events:none}.portal-inputwrap input{width:100%;height:48px;border:1px solid var(--bd-border);border-radius:10px;background:var(--bd-bg);color:var(--bd-ink);padding:0 44px;font-size:13px;outline:none}.portal-inputwrap input:focus{border-color:var(--bd-purple);box-shadow:0 0 0 3px color-mix(in srgb,var(--bd-purple) 16%,transparent)}.portal-password-toggle{position:absolute;right:8px;top:50%;transform:translateY(-50%);height:32px;border:0;border-radius:7px;background:transparent;color:var(--bd-purple-deep);font-size:10.5px;font-weight:700;padding:0 7px;cursor:pointer}.portal-password-toggle:hover{background:var(--bd-purple-soft)}.portal-login__submit{height:48px;border:0;border-radius:10px;background:var(--bd-sidebar);color:#fff;font-size:13px;font-weight:700;cursor:pointer}.portal-login__submit:hover{background:#145540}.portal-login__status{display:none;padding:10px 12px;border-radius:9px;background:var(--bd-green-soft);color:var(--bd-muted-strong);font-size:11.5px;line-height:1.5}.portal-login__status[aria-hidden="false"]{display:block}.portal-login__preview{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-top:22px;padding-top:18px;border-top:1px solid var(--bd-border)}.portal-login__preview span{font-size:11.5px;line-height:1.45;color:var(--bd-muted)}.portal-login__preview button{flex:none;border:0;background:transparent;color:var(--bd-purple-deep);font-size:11.5px;font-weight:700;cursor:pointer;padding:6px}.portal-login__preview button:hover{text-decoration:underline}
@media(max-width:760px){.portal-stage--login{align-items:flex-start;padding:0;background:var(--bd-card)}.portal-login{min-height:100vh;grid-template-columns:1fr;border-radius:0;box-shadow:none}.portal-login__story{min-height:245px;padding:25px 24px}.portal-login__storycopy{margin:28px 0 0}.portal-login__storycopy h2{font-size:35px;max-width:12ch}.portal-login__storycopy p{margin-top:10px}.portal-login__access{display:none}.portal-login__aside{display:none}.portal-login__formwrap{padding:28px 24px 38px;justify-content:flex-start}.portal-login__preview{align-items:flex-start;flex-direction:column}.portal-login__preview button{padding-left:0}}
@media(prefers-color-scheme:dark){.portal-login__story{background:#0b3025}.portal-inputwrap input{background:#101b17}.portal-login__submit{background:#27664f}.portal-login__submit:hover{background:#327960}}


/* Login now routes from assigned account data; the old preview role control stays internal. */
.bd-role-switcher{display:none!important}.portal-login__demo{margin-top:14px;padding:11px 13px;border-radius:9px;background:var(--bd-green-soft);color:var(--bd-muted-strong);font-size:11.5px;line-height:1.5}.portal-login__demo strong{color:var(--bd-ink)}.portal-login__status[aria-hidden="true"]{display:none}.portal-login__status{margin-top:12px;padding:10px 12px;border-radius:8px;background:#fdeeee;color:#a8443c;font-size:12px;line-height:1.45}.portal-user-access{overflow-y:auto}.portal-user-create{display:grid;grid-template-columns:minmax(220px,1fr) minmax(190px,.7fr) auto auto;gap:12px;align-items:end;background:var(--bd-card);border:1px solid var(--bd-border);border-radius:14px;padding:16px}.portal-user-create>div{display:flex;flex-direction:column;gap:6px}.portal-user-create label{font-size:11px;font-weight:700;color:var(--bd-muted-strong)}.portal-user-create input,.portal-user-create select,.portal-role-select{height:40px;border:1px solid var(--bd-border);border-radius:9px;background:var(--bd-card);color:var(--bd-ink);padding:0 11px;font:inherit;font-size:12.5px}.portal-role-select{height:34px;min-width:180px}.portal-user-create [data-user-message]{grid-column:1/-1;font-size:12px;color:#a8443c}.portal-you{display:inline-block;margin-left:5px;color:var(--bd-purple-deep);font-size:10px;font-weight:700}.portal-user-action{border:0;background:none;color:#a8443c;font:inherit;font-size:12px;font-weight:600;cursor:pointer;padding:6px}.portal-user-action:hover{text-decoration:underline}
@media(max-width:900px){.portal-user-create{grid-template-columns:1fr 1fr}.portal-user-create .bd-btn,.portal-user-create .bd-ghostbtn{width:100%;justify-content:center}.portal-role-select{width:100%;min-width:0}.portal-users-table tr{grid-template-columns:1fr}.portal-users-table td:first-child{grid-column:auto}.portal-users-table td:last-child{justify-self:start}}
@media(max-width:560px){.portal-user-create{grid-template-columns:1fr}.portal-user-create [data-user-message]{grid-column:auto}}
@media(prefers-color-scheme:dark){.portal-login__status{background:#3b2222;color:#f3b7b2}.portal-user-create input,.portal-user-create select,.portal-role-select{background:var(--bd-card);color:var(--bd-ink)}}
/* Head Admin navigation and management surfaces. */
.bd-brand[data-dashboard-link]{cursor:pointer;border-radius:10px}.bd-brand[data-dashboard-link]:focus-visible{outline:3px solid var(--bd-purple-pale);outline-offset:3px}.portal-owner-page{top:132px}.bd-profile-model{padding:24px}.bd-profile-person{display:grid;grid-template-columns:auto minmax(170px,1fr) auto minmax(250px,1.25fr);gap:18px;align-items:center}.bd-avatar--lg{width:52px;height:52px;font-size:15px}.bd-profile-person p,.bd-empty-row p,.bd-client-list p,.bd-settings-grid p{font-size:12.5px;line-height:1.5;color:var(--bd-muted);margin-top:4px}.bd-profile-link{font-size:12px;font-weight:700;color:var(--bd-purple-deep)}.bd-account-stack{display:flex;flex-direction:column;gap:7px}.bd-account-stack>span{display:flex;justify-content:space-between;gap:14px;padding:10px 12px;border:1px solid var(--bd-border);border-radius:9px;background:var(--bd-bg)}.bd-account-stack b{font-size:12px}.bd-account-stack small{font-size:10.5px;color:var(--bd-muted)}.bd-empty-row{padding:32px 24px;border-top:1px solid var(--bd-border)}.bd-client-list{display:flex;flex-direction:column}.bd-client-list article{display:grid;grid-template-columns:auto minmax(180px,1fr) auto auto;gap:15px;align-items:center;padding:15px 22px;border-top:1px solid var(--bd-border)}.bd-settings-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.bd-settings-grid .bd-card{display:grid;grid-template-columns:auto 1fr;gap:14px 16px;align-items:start}.bd-settings-grid .bd-card>.bd-badge{grid-column:2}.bd-settings-grid h2{font-family:var(--font-display);font-size:18px;color:var(--bd-ink)}.bd-setting-icon{width:42px;height:42px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--bd-purple-soft);color:var(--bd-purple-deep);font:700 10px var(--font-ui);letter-spacing:.5px}.portal-user-actions{display:flex;align-items:center;justify-content:flex-end;gap:5px}.portal-password-modal{position:fixed;z-index:80;inset:0;display:flex;align-items:center;justify-content:center;padding:20px;background:rgba(7,29,22,.52)}.portal-password-modal>section{position:relative;width:min(430px,100%);padding:28px;border-radius:14px;background:var(--bd-card);border:1px solid var(--bd-border);box-shadow:0 24px 60px rgba(3,30,22,.3)}.portal-password-modal h2{font-family:var(--font-display);font-size:24px;color:var(--bd-ink)}.portal-password-modal p{margin:6px 0 20px;font-size:12px;color:var(--bd-muted)}.portal-password-modal form{display:flex;flex-direction:column;gap:9px}.portal-password-modal label{font-size:11px;font-weight:700;color:var(--bd-muted-strong)}.portal-password-modal input{height:42px;border:1px solid var(--bd-border);border-radius:9px;background:var(--bd-card);color:var(--bd-ink);padding:0 11px;font:inherit}.portal-password-modal [data-password-message]{font-size:12px;color:var(--bd-green-text)}.portal-password-close{position:absolute;right:14px;top:12px;border:0;background:none;color:var(--bd-muted);font-size:25px;cursor:pointer}.bd-campaign-margin-scope{order:20}.bd-margin-scope{display:grid;grid-template-columns:1.4fr repeat(4,1fr);gap:10px;padding:13px 14px;border-radius:9px;background:var(--bd-bg);font:700 10px var(--font-ui);letter-spacing:.45px;color:var(--bd-muted)}
@media(max-width:900px){.portal-owner-page{top:0;padding-top:76px}.bd-profile-person{grid-template-columns:auto 1fr}.bd-profile-link{grid-column:1/-1}.bd-account-stack{grid-column:1/-1}.bd-settings-grid{grid-template-columns:1fr}.bd-client-list article{grid-template-columns:auto 1fr}.bd-client-list article>.bd-badge,.bd-client-list article>.bd-ghostbtn{grid-column:2;justify-self:start}.bd-margin-scope{grid-template-columns:1fr 1fr}.bd-margin-scope span:first-child{grid-column:1/-1}.portal-user-actions{justify-content:flex-start}}
@media(max-width:560px){.bd-profile-model{padding:17px}.bd-profile-person{grid-template-columns:1fr}.bd-profile-person>*{grid-column:1}.bd-account-stack>span{flex-direction:column;gap:3px}.bd-client-list article{grid-template-columns:1fr}.bd-client-list article>*{grid-column:1!important}.bd-margin-scope{grid-template-columns:1fr}.bd-settings-grid .bd-card{grid-template-columns:1fr}.bd-settings-grid .bd-card>.bd-badge{grid-column:1}}
@media(prefers-color-scheme:dark){.portal-password-modal input,.bd-account-stack>span{background:var(--bd-card)}}


/* Empty campaign foundation and session-only campaign builder. */
.campaign-workspace{position:fixed;z-index:17;inset:0 0 0 224px;overflow:auto;background:var(--bd-bg);padding:30px 36px 42px;color:var(--bd-ink)}
.campaign-workspace__inner{max-width:1180px;margin:0 auto;display:grid;gap:20px}.campaign-workspace__head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px}.campaign-workspace__head h1{font-family:var(--font-display);font-size:31px;letter-spacing:-.5px}.campaign-workspace__head p{margin-top:6px;font-size:13.5px;color:var(--bd-muted)}
.campaign-primary{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:42px;padding:10px 17px;border:0;border-radius:10px;background:var(--bd-purple);color:#fff;font-size:13px;font-weight:700;cursor:pointer}.campaign-primary:hover{background:var(--bd-purple-deep)}.campaign-secondary{display:inline-flex;align-items:center;justify-content:center;min-height:42px;padding:10px 16px;border:1px solid var(--bd-border);border-radius:10px;background:var(--bd-card);color:var(--bd-ink);font-size:13px;font-weight:700;cursor:pointer}
.campaign-empty{min-height:430px;display:grid;place-items:center;text-align:center;background:var(--bd-card);border:1px solid var(--bd-border);border-radius:16px;padding:36px}.campaign-empty__mark{width:72px;height:72px;border-radius:50%;display:grid;place-items:center;margin:0 auto 18px;background:var(--bd-green-soft);color:var(--bd-sidebar)}.campaign-empty__mark svg{width:32px;height:32px;fill:none;stroke:currentColor;stroke-width:1.7}.campaign-empty h2{font-family:var(--font-display);font-size:25px}.campaign-empty p{max-width:52ch;margin:9px auto 20px;color:var(--bd-muted);font-size:13px;line-height:1.6}.campaign-session-note{padding:11px 14px;border:1px solid var(--bd-purple-pale);border-radius:10px;background:var(--bd-purple-soft);color:var(--bd-muted-strong);font-size:11.5px;line-height:1.5}
.campaign-summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}.campaign-summary article{background:var(--bd-card);border:1px solid var(--bd-border);border-radius:14px;padding:18px}.campaign-summary span{display:block;font-size:12px;color:var(--bd-muted)}.campaign-summary strong{display:block;margin-top:6px;font-size:25px;color:var(--bd-ink)}.campaign-list{background:var(--bd-card);border:1px solid var(--bd-border);border-radius:15px;overflow:hidden}.campaign-list__head{display:grid;grid-template-columns:minmax(220px,1.6fr) .8fr .8fr .8fr auto;gap:14px;padding:12px 18px;background:var(--bd-bg);font:700 9px var(--font-ui);letter-spacing:.65px;color:var(--bd-muted);text-transform:uppercase}.campaign-list__row{display:grid;grid-template-columns:minmax(220px,1.6fr) .8fr .8fr .8fr auto;gap:14px;align-items:center;padding:16px 18px;border-top:1px solid var(--bd-border)}.campaign-list__name{display:flex;align-items:center;gap:12px;min-width:0}.campaign-list__art{width:46px;height:46px;border-radius:10px;overflow:hidden;background:var(--bd-sidebar);color:#fff;display:grid;place-items:center;font:700 17px var(--font-display);flex:none}.campaign-list__art img{width:100%;height:100%;object-fit:cover}.campaign-list__name strong{display:block;font-size:13.5px}.campaign-list__name small,.campaign-list__cell small{display:block;margin-top:3px;color:var(--bd-muted);font-size:10.5px}.campaign-list__cell{font-size:12.5px}.campaign-status{display:inline-flex;padding:5px 9px;border-radius:7px;background:var(--bd-purple-soft);color:var(--bd-purple-deep);font:700 9px var(--font-ui);letter-spacing:.6px}.campaign-status--active{background:var(--bd-green-soft);color:var(--bd-green-text)}
.campaign-dialog{position:fixed;z-index:90;inset:0;display:grid;place-items:center;padding:20px;background:rgba(7,29,22,.58)}.campaign-dialog__panel{width:min(760px,100%);max-height:min(880px,calc(100dvh - 40px));overflow:auto;background:var(--bd-card);border:1px solid var(--bd-border);border-radius:18px;box-shadow:0 28px 72px rgba(3,30,22,.34)}.campaign-dialog__head{display:flex;justify-content:space-between;gap:18px;padding:24px 26px 17px;border-bottom:1px solid var(--bd-border)}.campaign-dialog__head h2{font-family:var(--font-display);font-size:25px}.campaign-dialog__head p{margin-top:5px;color:var(--bd-muted);font-size:12px}.campaign-dialog__close{width:34px;height:34px;border:0;border-radius:8px;background:var(--bd-bg);color:var(--bd-muted);font-size:22px;cursor:pointer}.campaign-steps{display:flex;gap:7px;padding:16px 26px 0}.campaign-step{height:5px;flex:1;border-radius:5px;background:var(--bd-border)}.campaign-step--active{background:var(--bd-purple)}.campaign-dialog__body{padding:24px 26px}.campaign-type-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.campaign-type{padding:22px;border:1px solid var(--bd-border);border-radius:13px;background:var(--bd-card);color:var(--bd-ink);text-align:left;cursor:pointer}.campaign-type:hover,.campaign-type[aria-pressed="true"]{border-color:var(--bd-purple);box-shadow:0 0 0 2px var(--bd-purple-soft)}.campaign-type strong{display:block;font-size:15px}.campaign-type span{display:block;margin-top:7px;color:var(--bd-muted);font-size:12px;line-height:1.55}.campaign-form{display:grid;grid-template-columns:1fr 1fr;gap:16px}.campaign-field{display:grid;gap:7px}.campaign-field--wide{grid-column:1/-1}.campaign-field label,.campaign-platform-label{font-size:11.5px;font-weight:700;color:var(--bd-ink)}.campaign-field input,.campaign-field textarea,.campaign-field select{width:100%;border:1px solid var(--bd-border);border-radius:9px;background:var(--bd-bg);color:var(--bd-ink);padding:0 12px;font:inherit;font-size:13px;outline:none}.campaign-field input,.campaign-field select{height:44px}.campaign-field textarea{min-height:92px;padding-top:11px;resize:vertical}.campaign-field input:focus,.campaign-field textarea:focus,.campaign-field select:focus{border-color:var(--bd-purple);box-shadow:0 0 0 3px color-mix(in srgb,var(--bd-purple) 15%,transparent)}.campaign-platforms{display:flex;gap:8px;flex-wrap:wrap}.campaign-platform{min-height:36px;padding:7px 12px;border:1px solid var(--bd-border);border-radius:9px;background:var(--bd-card);color:var(--bd-muted-strong);font-size:12px;font-weight:700;cursor:pointer}.campaign-platform[aria-pressed="true"]{border-color:var(--bd-purple);background:var(--bd-purple-soft);color:var(--bd-purple-deep)}.campaign-review{display:grid;grid-template-columns:1fr 1fr;gap:12px}.campaign-review div{padding:13px;border-radius:9px;background:var(--bd-bg)}.campaign-review dt{font-size:9px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--bd-muted)}.campaign-review dd{margin-top:5px;font-size:13px;font-weight:600}.campaign-dialog__actions{display:flex;justify-content:space-between;gap:10px;padding:18px 26px;border-top:1px solid var(--bd-border)}.campaign-error{display:none;margin-top:14px;padding:10px 12px;border-radius:8px;background:#fdeeee;color:#a8443c;font-size:12px}.campaign-error[aria-hidden="false"]{display:block}.campaign-private-label{display:inline-flex;margin-left:6px;padding:3px 6px;border-radius:5px;background:var(--bd-purple-soft);color:var(--bd-purple-deep);font:700 8px var(--font-ui);letter-spacing:.35px;text-transform:uppercase}.campaign-field-note{color:var(--bd-muted);font-size:10.5px;line-height:1.45}.campaign-sound-links{grid-column:1/-1;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;padding-top:2px}.campaign-sound-links__head{grid-column:1/-1}.campaign-sound-links__head strong{display:block;font-size:11.5px;color:var(--bd-ink)}.campaign-sound-links__head small{display:block;margin-top:4px;color:var(--bd-muted);font-size:10.5px;line-height:1.45}.campaign-financial-list{overflow:hidden;background:var(--bd-card);border:1px solid var(--bd-border);border-radius:15px}.campaign-financial-list__head,.campaign-financial-list__row{display:grid;grid-template-columns:minmax(220px,1.5fr) repeat(4,minmax(110px,.75fr));gap:14px;align-items:center;padding:13px 18px}.campaign-financial-list__head{background:var(--bd-bg);font:700 9px var(--font-ui);letter-spacing:.65px;color:var(--bd-muted);text-transform:uppercase}.campaign-financial-list__row{border-top:1px solid var(--bd-border);font-size:12.5px}.campaign-financial-list__row strong{display:block;color:var(--bd-ink)}.campaign-financial-list__row small{display:block;margin-top:3px;color:var(--bd-muted);font-size:10.5px}
.portal-empty{grid-column:1/-1;min-height:250px;display:grid;place-items:center;text-align:center;border:1px dashed var(--bd-border);border-radius:14px;padding:30px;background:var(--bd-card)}.portal-empty h3{font-family:var(--font-display);font-size:20px}.portal-empty p{margin-top:7px;color:var(--bd-muted);font-size:12px;line-height:1.55}.portal-sectionhead--empty .portal-filters{display:none}
@media(max-width:900px){.campaign-workspace{left:0;padding:74px 14px 28px}.campaign-summary{grid-template-columns:1fr 1fr}.campaign-list__head{display:none}.campaign-list__row{grid-template-columns:1fr 1fr;gap:12px}.campaign-list__name{grid-column:1/-1}.campaign-list__row>.campaign-secondary{grid-column:1/-1}.campaign-workspace__head{flex-direction:column}.campaign-workspace__head .campaign-primary{width:100%}.campaign-financial-list__head{display:none}.campaign-financial-list__row{grid-template-columns:1fr 1fr;gap:10px}.campaign-financial-list__row>div{grid-column:1/-1}.campaign-financial-list__row>span:before{display:block;margin-bottom:3px;color:var(--bd-muted);font:700 8px var(--font-ui);letter-spacing:.45px;text-transform:uppercase}.campaign-financial-list__row>span:nth-child(2):before{content:'Client revenue'}.campaign-financial-list__row>span:nth-child(3):before{content:'Spend budget'}.campaign-financial-list__row>span:nth-child(4):before{content:'Available margin'}.campaign-financial-list__row>span:nth-child(5):before{content:'Margin'}}
@media(max-width:560px){.campaign-workspace{padding:64px 10px 22px}.campaign-workspace__head h1{font-size:23px}.campaign-sound-links{grid-template-columns:1fr}.campaign-summary{gap:8px}.campaign-summary article{padding:13px}.campaign-summary strong{font-size:20px}.campaign-empty{min-height:330px;padding:24px 16px}.campaign-dialog{padding:0}.campaign-dialog__panel{height:100dvh;max-height:none;border-radius:0}.campaign-dialog__head,.campaign-dialog__body,.campaign-dialog__actions{padding-left:17px;padding-right:17px}.campaign-type-grid,.campaign-form,.campaign-review{grid-template-columns:1fr}.campaign-field--wide{grid-column:auto}.campaign-dialog__actions{position:sticky;bottom:0;background:var(--bd-card)}}
@media(prefers-color-scheme:dark){.campaign-error{background:#3b2020;color:#f0b6b0}}
/* Client directory shares the campaign workspace so the add-client flow stays connected. */
.client-summary{display:grid;grid-template-columns:repeat(2,minmax(0,220px));gap:14px}.client-summary article{background:var(--bd-card);border:1px solid var(--bd-border);border-radius:14px;padding:18px}.client-summary span{display:block;font-size:12px;color:var(--bd-muted)}.client-summary strong{display:block;margin-top:6px;font-size:25px;color:var(--bd-ink)}.client-directory{overflow:hidden;background:var(--bd-card);border:1px solid var(--bd-border);border-radius:15px}.client-directory__head,.client-directory__row{display:grid;grid-template-columns:44px minmax(200px,1.2fr) minmax(180px,1fr) .55fr .6fr;gap:14px;align-items:center}.client-directory__head{padding:12px 18px;background:var(--bd-bg);font:700 9px var(--font-ui);letter-spacing:.65px;color:var(--bd-muted);text-transform:uppercase}.client-directory__head span:first-child{grid-column:1/3}.client-directory__row{padding:16px 18px;border-top:1px solid var(--bd-border);font-size:12.5px}.client-directory__row strong{display:block;font-size:13px;color:var(--bd-ink)}.client-directory__row small{display:block;margin-top:3px;font-size:10.5px;color:var(--bd-muted)}.client-directory__mark{width:40px;height:40px;border-radius:10px;display:grid;place-items:center;background:var(--bd-sidebar);color:#fff;font:700 16px var(--font-display)}.client-dialog__panel{width:min(620px,100%)}.client-form-message{grid-column:1/-1;min-height:18px;color:#a8443c;font-size:12px}.client-empty .campaign-empty__mark svg{width:36px;height:36px}
@media(max-width:900px){.client-directory__head{display:none}.client-directory__row{grid-template-columns:44px 1fr;gap:10px}.client-directory__row>div:nth-of-type(2),.client-directory__row>span:nth-of-type(2),.client-directory__row>span:nth-of-type(3){grid-column:2}.client-directory__row .campaign-status{justify-self:start}.client-summary{grid-template-columns:1fr 1fr}}
@media(max-width:560px){.client-summary{grid-template-columns:1fr}.client-directory__row{padding:14px}.client-dialog .campaign-dialog__panel{height:auto;max-height:100dvh;border-radius:0}}
/* Campaign operating view: creator assignment, source status, daily reporting and future payouts. */
.campaign-detail-meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:9px}.campaign-detail-meta span,.campaign-detail-meta a{font-size:11.5px;color:var(--bd-muted-strong)}.campaign-detail-meta a{color:var(--bd-green-text);font-weight:700;text-decoration:none}.campaign-detail-meta a:hover{text-decoration:underline}.campaign-detail-status{display:inline-flex;padding:5px 9px;border-radius:7px;background:var(--bd-purple-soft);color:var(--bd-purple-deep);font:700 9px var(--font-ui);letter-spacing:.65px;text-transform:uppercase}.campaign-detail-status--active{background:var(--bd-green-soft);color:var(--bd-green-text)}.campaign-attention{display:inline-flex;align-items:center;gap:8px;margin-top:14px;border:0;background:transparent;color:var(--bd-muted-strong);font-size:12.5px;font-weight:700;cursor:pointer}.campaign-attention__box{width:18px;height:18px;border:1px solid var(--bd-muted);border-radius:4px;display:grid;place-items:center;font-size:12px;color:#fff}.campaign-attention[aria-pressed="true"] .campaign-attention__box{background:var(--bd-sidebar);border-color:var(--bd-sidebar)}
.campaign-kpis{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:12px}.campaign-kpi{min-width:0;padding:18px;background:var(--bd-card);border:1px solid var(--bd-border);border-radius:14px}.campaign-kpi span{display:block;color:var(--bd-muted-strong);font-size:12px}.campaign-kpi strong{display:block;margin-top:8px;color:var(--bd-ink);font-size:24px;letter-spacing:-.4px}.campaign-kpi small{display:block;margin-top:9px;color:var(--bd-muted);font-size:10.5px;line-height:1.45}.campaign-kpi__bar{display:block;height:6px;border-radius:6px;background:var(--bd-border);overflow:hidden;margin-top:14px}.campaign-kpi__bar i{display:block;height:100%;background:var(--bd-green-text)}
.campaign-detail-tabs{display:flex;align-items:center;gap:4px;border-bottom:1px solid var(--bd-border);overflow:hidden}.campaign-detail-tab{border:0;border-bottom:2px solid transparent;background:transparent;color:var(--bd-muted);padding:12px 16px;font-size:12.5px;font-weight:700;cursor:pointer}.campaign-detail-tab[aria-selected="true"]{color:var(--bd-sidebar);border-bottom-color:var(--bd-sidebar)}.campaign-detail-tab small{font-size:10px;color:var(--bd-muted);margin-left:4px}.campaign-detail-grid{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(280px,.7fr);gap:16px}.campaign-integration-list{display:grid;gap:11px}.campaign-integration{display:grid;grid-template-columns:40px minmax(0,1fr) auto;gap:12px;align-items:center;padding:13px;border:1px solid var(--bd-border);border-radius:11px;background:var(--bd-bg)}.campaign-integration__mark{width:40px;height:40px;border-radius:9px;display:grid;place-items:center;background:var(--bd-purple-soft);color:var(--bd-purple-deep);font:700 10px var(--font-ui)}.campaign-integration strong{display:block;font-size:12.5px}.campaign-integration p{margin-top:3px;color:var(--bd-muted);font-size:10.5px;line-height:1.4}.campaign-connect-state{padding:5px 8px;border-radius:6px;background:#fdf3e3;color:#a96d12;font:700 8.5px var(--font-ui);letter-spacing:.55px;white-space:nowrap}.campaign-chart{position:relative;margin-top:10px;border:1px solid var(--bd-border);border-radius:11px;padding:12px;background:var(--bd-bg);overflow:hidden}.campaign-chart svg{display:block;width:100%;height:auto;min-height:210px}.campaign-chart line{stroke:var(--bd-border);stroke-width:1}.campaign-chart text{fill:var(--bd-muted);font:9px var(--font-body)}.campaign-chart__empty{position:absolute;inset:0;display:grid;place-items:center;text-align:center;padding:34px;pointer-events:none}.campaign-chart__empty strong{font-size:13px;color:var(--bd-ink)}.campaign-chart__empty span{display:block;margin-top:5px;color:var(--bd-muted);font-size:10.5px;line-height:1.45}.campaign-chart-legend{display:flex;gap:16px;flex-wrap:wrap;margin-top:12px;color:var(--bd-muted-strong);font-size:10.5px}.campaign-chart-legend span{display:flex;align-items:center;gap:6px}.campaign-chart-legend i{width:9px;height:9px;border-radius:50%;background:var(--bd-sidebar)}.campaign-chart-legend span:nth-child(2) i{background:var(--bd-purple)}.campaign-chart-legend span:nth-child(3) i{background:#d9932c}.campaign-performance-toggle{display:inline-flex;align-items:center;padding:3px;border:1px solid var(--bd-border);border-radius:9px;background:var(--bd-bg)}.campaign-performance-toggle button{min-width:74px;height:30px;padding:0 12px;border:0;border-radius:6px;background:transparent;color:var(--bd-muted-strong);font-size:11.5px;font-weight:700;cursor:pointer}.campaign-performance-toggle button[aria-pressed="true"]{background:var(--bd-card);color:var(--bd-sidebar);box-shadow:0 1px 4px rgba(22,40,31,.1)}.campaign-performance-toggle button:focus-visible{outline:2px solid var(--bd-purple);outline-offset:1px}
.campaign-creator-search{width:100%;height:42px;border:1px solid var(--bd-border);border-radius:9px;background:var(--bd-bg);color:var(--bd-ink);padding:0 12px;font:inherit;font-size:12.5px}.campaign-creator-list{display:grid;gap:8px;margin-top:14px}.campaign-creator-row{display:grid;grid-template-columns:38px minmax(0,1fr) auto;gap:11px;align-items:center;padding:12px;border:1px solid var(--bd-border);border-radius:10px}.campaign-creator-row strong{display:block;font-size:12.5px}.campaign-creator-row span{display:block;margin-top:3px;font-size:10.5px;color:var(--bd-muted)}.campaign-creator-row button{min-width:82px}.campaign-empty-inline{padding:34px 20px;text-align:center;border:1px dashed var(--bd-border);border-radius:11px;color:var(--bd-muted);font-size:12px;line-height:1.5}.creator-directory{overflow:hidden;background:var(--bd-card);border:1px solid var(--bd-border);border-radius:15px}.creator-directory__head,.creator-directory__row{display:grid;grid-template-columns:40px minmax(190px,1.4fr) minmax(110px,.75fr) minmax(90px,.65fr) minmax(90px,.55fr) minmax(130px,.75fr);gap:12px;align-items:center}.creator-directory__head{padding:11px 16px;background:var(--bd-bg);font:700 9px var(--font-ui);letter-spacing:.65px;color:var(--bd-muted);text-transform:uppercase}.creator-directory__head span:first-child{grid-column:1/3}.creator-directory__row{width:100%;padding:11px 16px;border:0;border-top:1px solid var(--bd-border);background:var(--bd-card);color:var(--bd-ink);text-align:left;cursor:pointer}.creator-directory__row:hover{background:var(--bd-bg)}.creator-directory__row:focus-visible{position:relative;z-index:1;outline:2px solid var(--bd-purple);outline-offset:-2px}.creator-directory__identity{min-width:0}.creator-directory__identity strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}.creator-directory__identity small,.creator-directory__meta{display:block;margin-top:2px;color:var(--bd-muted);font-size:10.5px}.creator-directory__meta{margin-top:0;color:var(--bd-muted-strong)}.creator-directory__campaigns{display:flex;align-items:center;justify-content:space-between;gap:8px;color:var(--bd-purple-deep);font-size:11.5px;font-weight:700}.creator-directory__chevron{font-size:17px;line-height:1;transition:transform .15s ease}.creator-directory__row[aria-expanded="true"] .creator-directory__chevron{transform:rotate(180deg)}.creator-directory__detail{padding:0 16px 13px 68px;border-top:1px solid var(--bd-border);background:var(--bd-bg)}.creator-directory__detail[hidden]{display:none}.creator-directory__detail-list{display:grid;gap:7px;padding-top:12px}.creator-directory__campaign{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:12px;align-items:center;padding:9px 11px;border:1px solid var(--bd-border);border-radius:9px;background:var(--bd-card)}.creator-directory__campaign strong{font-size:12px}.creator-directory__campaign small{display:block;margin-top:3px;color:var(--bd-muted);font-size:10.5px}.creator-directory__empty{padding-top:12px;color:var(--bd-muted);font-size:11.5px}.campaign-roadmap{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.campaign-roadmap article{padding:16px;border:1px solid var(--bd-border);border-radius:11px;background:var(--bd-bg)}.campaign-roadmap strong{display:block;font-size:13.5px}.campaign-roadmap p{margin-top:6px;color:var(--bd-muted);font-size:11.5px;line-height:1.5}.campaign-source-banner{padding:12px 14px;border:1px solid var(--bd-purple-pale);border-radius:10px;background:var(--bd-purple-soft);font-size:12px;line-height:1.5;color:var(--bd-muted-strong)}
@media(max-width:1180px){.campaign-kpis{grid-template-columns:repeat(3,minmax(0,1fr))}.campaign-detail-grid{grid-template-columns:1fr}}
@media(max-width:700px){.campaign-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.campaign-detail-tabs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));border:1px solid var(--bd-border);border-radius:10px}.campaign-detail-tab{border:0;border-bottom:1px solid var(--bd-border);padding:10px 7px}.campaign-detail-tab[aria-selected="true"]{background:var(--bd-green-soft);border-bottom-color:var(--bd-border)}.campaign-roadmap{grid-template-columns:1fr}.campaign-creator-row{grid-template-columns:36px minmax(0,1fr)}.campaign-creator-row button{grid-column:2;width:max-content}.creator-directory__head{display:none}.creator-directory__row{grid-template-columns:38px minmax(0,1fr) auto;gap:7px 10px;padding:11px 12px}.creator-directory__row>.bd-avatar{grid-column:1;grid-row:1/4}.creator-directory__identity{grid-column:2;grid-row:1}.creator-directory__campaigns{grid-column:3;grid-row:1;white-space:nowrap}.creator-directory__meta:nth-of-type(2){grid-column:2;grid-row:2}.creator-directory__meta:nth-of-type(3){grid-column:2;grid-row:3}.creator-directory__meta:nth-of-type(4){grid-column:3;grid-row:2;justify-self:end}.creator-directory__detail{padding:0 12px 12px}.creator-directory__campaign{grid-template-columns:1fr auto}.creator-directory__campaign .campaign-secondary{grid-column:1/-1;width:max-content}.campaign-detail-meta{align-items:flex-start;flex-direction:column;gap:5px}}
@media(max-width:390px){.campaign-kpis{grid-template-columns:1fr}.campaign-integration{grid-template-columns:36px minmax(0,1fr)}.campaign-connect-state{grid-column:2;width:max-content}}
@media(prefers-color-scheme:dark){.campaign-connect-state{background:#3a2e18;color:#efc677}}
/* Creator planning, brief notes and payout roster. */
.creator-directory__head,.creator-directory__row{grid-template-columns:40px minmax(180px,1.35fr) minmax(135px,.9fr) minmax(105px,.7fr) minmax(80px,.55fr) minmax(65px,.45fr) minmax(125px,.75fr)}.creator-directory__head span:first-child{grid-column:1/3}.creator-directory__price{font-weight:700;color:var(--bd-ink)}.creator-directory__videos{font-weight:700;color:var(--bd-ink)}.creator-add-actions{display:flex;gap:9px;flex-wrap:wrap}.creator-dialog__panel{width:min(720px,100%)}.creator-profile-note{grid-column:1/-1;padding:11px 13px;border-radius:9px;background:var(--bd-green-soft);color:var(--bd-muted-strong);font-size:11px;line-height:1.5}.creator-inline-niche{display:grid;grid-template-columns:1fr 1fr;gap:10px}.campaign-brief-copy{padding:16px;border:1px solid var(--bd-border);border-radius:11px;background:var(--bd-bg);color:var(--bd-muted-strong);font-size:13px;line-height:1.65}.campaign-brief-roster{display:grid;gap:10px;margin-top:14px}.campaign-brief-person{display:grid;grid-template-columns:38px minmax(0,1fr) minmax(180px,.85fr);gap:12px;align-items:start;padding:13px;border:1px solid var(--bd-border);border-radius:11px}.campaign-brief-person strong{display:block;font-size:12.5px}.campaign-brief-person small{display:block;margin-top:4px;color:var(--bd-muted);font-size:10.5px;line-height:1.45}.campaign-note{display:grid;gap:6px}.campaign-note label{font-size:10.5px;font-weight:700;color:var(--bd-muted-strong)}.campaign-note textarea{width:100%;min-height:62px;padding:9px 10px;border:1px solid var(--bd-border);border-radius:8px;background:var(--bd-card);color:var(--bd-ink);font:inherit;font-size:11.5px;resize:vertical}.campaign-note textarea:focus{outline:2px solid var(--bd-purple);outline-offset:1px}.campaign-roster-summary{display:flex;gap:8px;flex-wrap:wrap;margin-top:9px}.campaign-roster-summary span{padding:5px 8px;border-radius:7px;background:var(--bd-purple-soft);color:var(--bd-purple-deep);font-size:10px;font-weight:700}.campaign-payouts{overflow:hidden;border:1px solid var(--bd-border);border-radius:12px}.campaign-payout__head,.campaign-payout{display:grid;grid-template-columns:minmax(180px,1.35fr) minmax(120px,.8fr) 90px 90px minmax(120px,.75fr) auto;gap:12px;align-items:center}.campaign-payout__head{padding:11px 14px;background:var(--bd-bg);color:var(--bd-muted);font:700 9px var(--font-ui);letter-spacing:.55px;text-transform:uppercase}.campaign-payout{padding:13px 14px;border-top:1px solid var(--bd-border);font-size:12px}.campaign-payout strong{display:block}.campaign-payout small{display:block;margin-top:3px;color:var(--bd-muted);font-size:11px}.campaign-payout__route{color:var(--bd-muted-strong);overflow-wrap:anywhere}.campaign-paybtn{min-width:104px}.campaign-payout-total{display:flex;justify-content:flex-end;gap:24px;padding:13px 14px;border-top:1px solid var(--bd-border);background:var(--bd-bg);font-size:12px}.campaign-payout-total strong{font-size:15px}.creator-profile-pill{display:inline-flex;margin-top:5px;padding:3px 7px;border-radius:6px;background:var(--bd-green-soft);color:var(--bd-green-text);font-size:10px;font-weight:700}
@media(max-width:900px){.creator-directory__row{grid-template-columns:38px minmax(0,1fr) auto}.creator-directory__row>.bd-avatar{grid-row:1/6}.creator-directory__identity{grid-column:2}.creator-directory__profile,.creator-directory__niche,.creator-directory__price,.creator-directory__videos{grid-column:2}.creator-directory__campaigns{grid-column:3;grid-row:1}.campaign-payout__head{display:none}.campaign-payout{grid-template-columns:1fr 1fr}.campaign-payout>*:first-child{grid-column:1/-1}.campaign-payout .campaign-paybtn{grid-column:1/-1;width:100%}.campaign-payout-total{justify-content:space-between}}
@media(max-width:700px){.campaign-brief-person{grid-template-columns:36px minmax(0,1fr)}.campaign-brief-person .campaign-note{grid-column:1/-1}.creator-inline-niche{grid-template-columns:1fr}}

/* Dashboard overview: monthly operating pulse, daily views, and active-campaign performance. */
.dashboard-overview{display:grid;gap:18px}.dashboard-overview__stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}.dashboard-stat{min-width:0;background:var(--bd-card);border:1px solid var(--bd-border);border-radius:14px;padding:17px 18px}.dashboard-stat__top{display:flex;align-items:center;justify-content:space-between;gap:10px}.dashboard-stat__label{font-size:11px;color:var(--bd-muted);line-height:1.35}.dashboard-stat__icon{width:32px;height:32px;border-radius:9px;display:grid;place-items:center;background:var(--bd-green-soft);color:var(--bd-sidebar);flex:none}.dashboard-stat__icon--purple{background:var(--bd-purple-soft);color:var(--bd-purple-deep)}.dashboard-stat__icon svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.dashboard-stat strong{display:block;margin-top:13px;font-size:25px;line-height:1;color:var(--bd-ink);letter-spacing:-.45px}.dashboard-stat small{display:block;margin-top:7px;color:var(--bd-muted);font-size:10.5px;line-height:1.4}.dashboard-layout{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(330px,1fr);gap:18px;align-items:start}.dashboard-panel{background:var(--bd-card);border:1px solid var(--bd-border);border-radius:15px;padding:19px 20px;min-width:0}.dashboard-panel__head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:14px}.dashboard-panel__head h2{font-family:var(--font-display);font-size:18px;color:var(--bd-ink);letter-spacing:-.2px}.dashboard-panel__head p{margin-top:4px;color:var(--bd-muted);font-size:11.5px;line-height:1.45}.dashboard-panel__total{font-size:13px;font-weight:700;color:var(--bd-ink);white-space:nowrap}.dashboard-views-chart{position:relative}.dashboard-views-chart svg{display:block;width:100%;height:auto;min-height:250px}.dashboard-views-chart__grid{stroke:var(--bd-border);stroke-width:1}.dashboard-views-chart__axis{fill:var(--bd-muted);font:10px var(--font-body)}.dashboard-views-chart__area{fill:color-mix(in srgb,var(--bd-purple) 12%,transparent)}.dashboard-views-chart__line{fill:none;stroke:var(--bd-purple-deep);stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round}.dashboard-views-chart__point{fill:var(--bd-card);stroke:var(--bd-purple-deep);stroke-width:2}.dashboard-chart-empty{position:absolute;inset:36px 30px 34px 54px;display:grid;place-items:center;text-align:center;color:var(--bd-muted);font-size:12px;line-height:1.5}.dashboard-chart-empty strong{display:block;color:var(--bd-ink);font-size:13px;margin-bottom:3px}.dashboard-campaign-list{display:grid}.dashboard-campaign-head,.dashboard-campaign-row{display:grid;grid-template-columns:minmax(130px,1.5fr) repeat(3,minmax(62px,.62fr)) minmax(92px,.85fr) auto;gap:10px;align-items:center}.dashboard-campaign-head{padding:0 0 9px;border-bottom:1px solid var(--bd-border);font:700 8px var(--font-ui);letter-spacing:.6px;text-transform:uppercase;color:var(--bd-muted)}.dashboard-campaign-row{padding:13px 0;border-bottom:1px solid var(--bd-border)}.dashboard-campaign-row:last-child{border-bottom:0;padding-bottom:0}.dashboard-campaign-name{min-width:0}.dashboard-campaign-name strong{display:block;font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dashboard-campaign-name span{display:block;margin-top:3px;font-size:10.5px;color:var(--bd-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dashboard-campaign-metric{font-size:11.5px;font-weight:600;color:var(--bd-ink)}.dashboard-campaign-client{font-size:11px;color:var(--bd-muted-strong);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dashboard-campaign-row .campaign-secondary{min-height:32px;padding:6px 10px;font-size:10.5px}.dashboard-list-empty{min-height:245px;display:grid;place-items:center;text-align:center;padding:26px;color:var(--bd-muted);font-size:12px;line-height:1.55}.dashboard-list-empty strong{display:block;color:var(--bd-ink);font-size:14px;margin-bottom:4px}
@media(max-width:1100px){.dashboard-overview__stats{grid-template-columns:repeat(2,minmax(0,1fr))}.dashboard-layout{grid-template-columns:1fr}}
@media(max-width:700px){.dashboard-overview{gap:11px}.dashboard-overview__stats{gap:8px}.dashboard-stat{padding:12px}.dashboard-stat strong{font-size:20px;margin-top:9px}.dashboard-stat__icon{width:28px;height:28px}.dashboard-panel{padding:14px;border-radius:12px}.dashboard-panel__head{margin-bottom:10px}.dashboard-views-chart svg{min-height:190px}.dashboard-campaign-head{display:none}.dashboard-campaign-row{grid-template-columns:minmax(0,1fr) minmax(0,.72fr);gap:8px 12px}.dashboard-campaign-name{grid-column:1/-1;padding-bottom:7px;border-bottom:1px solid var(--bd-border)}.dashboard-campaign-metric,.dashboard-campaign-client{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.dashboard-campaign-metric::before,.dashboard-campaign-client::before{content:attr(data-label);font:700 8px var(--font-ui);letter-spacing:.55px;text-transform:uppercase;color:var(--bd-muted)}.dashboard-campaign-row .campaign-secondary{grid-column:1/-1;width:100%;margin-top:2px}.dashboard-list-empty{min-height:180px}}
@media(max-width:390px){.dashboard-overview__stats{grid-template-columns:1fr}.dashboard-stat__label{font-size:11.5px}.dashboard-stat small{font-size:11px}}
/* Creator operations: compact performance rows, profile payment editing, and campaign alerts. */
.campaign-workspace,.profile-workspace{scroll-behavior:smooth;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}
.creator-performance{border:1px solid var(--bd-border);border-radius:13px;overflow:hidden}.creator-performance__head,.creator-performance__row{display:grid;grid-template-columns:minmax(210px,1.65fr) 72px 88px 78px 88px 98px;gap:10px;align-items:center}.creator-performance__head{padding:10px 14px;background:var(--bd-bg);font:700 9px var(--font-ui);letter-spacing:.65px;text-transform:uppercase;color:var(--bd-muted)}.creator-performance__row{padding:9px 14px;background:var(--bd-card);border-top:1px solid var(--bd-border);min-height:56px}.creator-performance__identity{display:flex;align-items:center;gap:10px;min-width:0}.creator-performance__identity>div{min-width:0}.creator-performance__identity strong,.creator-performance__identity small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.creator-performance__identity strong{font-size:12px}.creator-performance__identity small{font-size:10.5px;color:var(--bd-muted);margin-top:2px}.creator-performance__num{font-size:12px;font-weight:650}.creator-performance__expand{min-height:32px;padding:6px 9px;font-size:10.5px}.creator-performance__detail{padding:13px 14px 15px 58px;border-top:1px solid var(--bd-border);background:var(--bd-bg)}.creator-posts__head,.creator-post{display:grid;grid-template-columns:minmax(150px,1fr) 72px 72px 72px;gap:10px;align-items:center}.creator-posts__head{font:700 8px var(--font-ui);letter-spacing:.55px;text-transform:uppercase;color:var(--bd-muted);padding-bottom:7px}.creator-post{font-size:11px;padding:8px 0;border-top:1px solid var(--bd-border)}.creator-post a{color:var(--bd-purple-deep);font-weight:700;text-decoration:none}.creator-posts__empty{font-size:11.5px;color:var(--bd-muted);padding:5px 0 10px}.creator-performance__detail .campaign-note{margin-top:10px}.creator-performance__detail .campaign-note textarea{min-height:76px}
.profile-directory{display:grid}.profile-directory__head,.profile-directory__row{display:grid;grid-template-columns:minmax(170px,1.15fr) minmax(190px,1.35fr) minmax(180px,1fr) auto;gap:14px;align-items:center}.profile-directory__head{padding:11px 16px;border-bottom:1px solid var(--bd-border);font:700 9px var(--font-ui);letter-spacing:.65px;text-transform:uppercase;color:var(--bd-muted)}.profile-directory__row{padding:14px 16px;border-bottom:1px solid var(--bd-border)}.profile-directory__row:last-child{border-bottom:0}.profile-directory__person{display:flex;align-items:center;gap:10px;min-width:0}.profile-directory__person strong,.profile-directory__person small{display:block}.profile-directory__person small,.profile-directory__accounts small,.profile-directory__payment small{font-size:10.5px;color:var(--bd-muted);margin-top:3px}.profile-directory__accounts{display:flex;gap:5px;flex-wrap:wrap}.profile-directory__account{background:var(--bd-bg);border:1px solid var(--bd-border);border-radius:7px;padding:5px 8px;font-size:10.5px}.profile-directory__payment strong{font-size:12px}.profile-empty{padding:30px;text-align:center;color:var(--bd-muted)}
.creator-directory__row{cursor:default}.creator-directory__identity-btn{display:flex;align-items:center;gap:10px;min-width:0;background:none;border:0;text-align:left;color:inherit;cursor:pointer}.creator-directory__identity-btn>div{min-width:0}.creator-directory__actions{display:flex;align-items:center;justify-content:flex-end;gap:7px}.creator-directory__actions .campaign-secondary{min-height:30px;padding:5px 9px;font-size:10px}.creator-directory__actions .creator-directory__chevron{font-size:15px}.campaign-alert{display:inline-flex;align-items:center;gap:6px;margin-top:5px;padding:4px 7px;border-radius:6px;background:#fff2db;color:#9b5d05;font-size:9px;font-weight:800;letter-spacing:.35px;text-transform:uppercase}.campaign-alert::before{content:"";width:6px;height:6px;border-radius:50%;background:#d88c17}.campaign-detail-links{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:9px}.campaign-detail-links .campaign-detail-meta{margin:0}.campaign-detail-links .campaign-secondary{min-height:30px;padding:5px 10px;font-size:10.5px}.profile-dialog__panel,.creator-edit-dialog__panel,.sound-dialog__panel{max-width:560px}
@media(max-width:760px){.creator-performance__head{display:none}.creator-performance__row{grid-template-columns:minmax(0,1fr) repeat(3,auto);gap:7px 12px}.creator-performance__identity{grid-column:1/-1}.creator-performance__row>[data-metric-label]::before{content:attr(data-metric-label);display:block;font:700 7px var(--font-ui);letter-spacing:.45px;text-transform:uppercase;color:var(--bd-muted);margin-bottom:2px}.creator-performance__row .creator-performance__expand{grid-column:1/-1;width:100%}.creator-performance__detail{padding:12px}.creator-posts__head{display:none}.creator-post{grid-template-columns:1fr 1fr}.creator-post>a{grid-column:1/-1}.profile-directory__head{display:none}.profile-directory__row{grid-template-columns:1fr;gap:9px}.profile-directory__actions{justify-content:flex-start}.creator-directory__row{grid-template-columns:1fr!important}.creator-directory__identity-btn,.creator-directory__actions{grid-column:1!important;justify-content:flex-start}.campaign-detail-links{align-items:flex-start}}

/* ============================================================
   Supplementary components (app-specific, matches light theme)
   ============================================================ */
.bd-ic{width:18px;height:18px;flex:none}
.bd-avatar{width:34px;height:34px;border-radius:50%;object-fit:cover;flex:none}
.bd-avatar--initials{display:inline-flex;align-items:center;justify-content:center;background:var(--bd-lav,#d9cbf5);color:var(--bd-sidebar);font:700 12px var(--font-ui)}
.bd-badge--demo{background:#fff3d6;color:#9b5d05}
.bd-pill{display:inline-block;padding:4px 10px;border-radius:999px;background:var(--bd-border);color:var(--bd-muted-strong);font:600 11px var(--font-ui)}
.bd-pill--green{background:#e5f6ec;color:#1e7a45}
.bd-spinner{width:28px;height:28px;border:3px solid var(--bd-border);border-top-color:var(--bd-purple);border-radius:50%;animation:bd-spin .8s linear infinite;margin:40px auto}
@keyframes bd-spin{to{transform:rotate(360deg)}}
.bd-empty{text-align:center;padding:48px 20px;color:var(--bd-muted)}
.bd-empty__icon{width:52px;height:52px;border-radius:50%;background:#f1f3f1;display:inline-flex;align-items:center;justify-content:center;margin-bottom:14px;color:var(--bd-muted)}
.bd-empty__icon .bd-ic{width:24px;height:24px}
.bd-empty__title{font:600 20px var(--font-display);color:var(--bd-ink);margin-bottom:6px}
.bd-empty__sub{font-size:13.5px}
.bd-hintbar{display:flex;gap:12px;align-items:flex-start;background:#eef7f1;border:1px solid #d8ecdf;border-radius:12px;padding:12px 16px;margin-bottom:18px;font-size:13px;color:#2c5a46}
.bd-hintbar .bd-ic{color:#2f9e6e;margin-top:1px}
.bd-muted-sm{font-size:13px;color:var(--bd-muted);margin:10px 0}
.bd-link{color:var(--bd-purple-deep,#5b3fa8);font-weight:600;text-decoration:none;display:inline-flex;align-items:center;gap:6px;font-size:13px}
.bd-link:hover{text-decoration:underline}
.bd-linkbtn{background:none;border:0;color:var(--bd-purple-deep,#5b3fa8);font:600 13px var(--font-ui);cursor:pointer;display:inline-flex;align-items:center;gap:6px;padding:0}
.bd-backlink{display:inline-flex;align-items:center;gap:8px;color:var(--bd-muted);font:600 13px var(--font-ui);text-decoration:none;margin-bottom:14px}
.bd-backlink:hover{color:var(--bd-ink)}
.bd-grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:18px}
@media(max-width:900px){.bd-grid2{grid-template-columns:1fr}}
.bd-field{margin-bottom:14px}
.bd-field label{display:block;font:600 12px var(--font-ui);color:var(--bd-ink);margin-bottom:6px}
.bd-input,.bd-select,.bd-textarea{width:100%;border:1px solid var(--bd-border);border-radius:10px;padding:11px 14px;font:400 14px var(--font-body);color:var(--bd-ink);background:var(--bd-card);box-sizing:border-box}
.bd-input:focus,.bd-select:focus,.bd-textarea:focus{outline:2px solid var(--bd-purple);outline-offset:-1px;border-color:var(--bd-purple)}
.bd-textarea{min-height:80px;resize:vertical}
.bd-input--note{min-height:38px;padding:8px 10px;font-size:13px}
.bd-search{display:flex;align-items:center;gap:10px;background:#fff;border:1px solid var(--bd-border);border-radius:10px;padding:0 14px;min-width:260px}
.bd-search .bd-ic{color:var(--bd-muted)}
.bd-search .bd-input{border:0;padding:11px 0}
.bd-search .bd-input:focus{outline:none}
.bd-filterbar{display:flex;align-items:center;gap:12px;margin-bottom:16px;flex-wrap:wrap}
.bd-filterbar__spacer{flex:1}
.bd-filterpill{background:#fff;border:1px solid var(--bd-border);border-radius:999px;padding:7px 14px;font:600 12px var(--font-ui);color:var(--bd-muted)}
.bd-btn--sm{padding:7px 12px;font-size:12px;border-radius:8px}
.bd-btn--lg{padding:14px 26px;font-size:15px;border-radius:12px}
.bd-btn--block{width:100%;justify-content:center}
.bd-btn--danger-ghost{color:#d64545}
.bd-btn--danger-ghost:hover{background:#fdecec}
.bd-btn--danger{background:#c0392b;color:#fff}
.bd-btn--danger:hover{background:#a93226}
.bd-btn:disabled{opacity:.55;cursor:not-allowed}
.cdel-impact{display:grid;grid-template-columns:1fr 1fr;gap:8px 18px;margin-top:14px;background:var(--bd-hover);border:1px solid var(--bd-border);border-radius:10px;padding:12px 14px}
.cdel-impact>div{display:flex;align-items:center;justify-content:space-between;font-size:13px;color:var(--bd-muted-strong)}
.cdel-impact strong{color:var(--bd-ink);font-weight:700}
.bd-iconbtn{background:none;border:0;color:var(--bd-muted);cursor:pointer;padding:6px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center}
.bd-iconbtn:hover{background:var(--bd-hover);color:var(--bd-ink)}
.bd-iconbtn .bd-ic{width:16px;height:16px}
.bd-chart{min-height:220px}
/* campaign rows as links */
.bd-campaign--link{text-decoration:none;color:inherit;cursor:pointer}
.bd-campaign--link:hover{background:var(--bd-hover)}
.bd-campaign__go{color:var(--bd-muted);display:flex;justify-content:flex-end}
.bd-campaign__go .bd-ic{width:16px;height:16px}
/* tabs */
.bd-tabs{display:flex;gap:4px;border-bottom:1px solid var(--bd-border);margin:4px 0 18px;overflow-x:auto}
.bd-tabs__tab{background:none;border:0;padding:12px 16px;font:600 13.5px var(--font-ui);color:var(--bd-muted);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap}
.bd-tabs__tab:hover{color:var(--bd-ink)}
.bd-tabs__tab--active{color:var(--bd-purple-deep,#5b3fa8);border-bottom-color:var(--bd-purple)}
/* segmented control */
.bd-seg{display:inline-flex;background:var(--bd-bg);border:1px solid var(--bd-border);border-radius:10px;padding:3px;gap:2px}
.bd-seg__btn{border:0;background:none;padding:7px 16px;border-radius:8px;font:600 13px var(--font-ui);color:var(--bd-muted);cursor:pointer}
.bd-seg__btn--active{background:var(--bd-purple);color:#fff;box-shadow:0 1px 4px rgba(124,58,237,.35)}
/* tables */
.bd-tablewrap{overflow-x:auto}
.bd-table__handle{font-weight:600;color:var(--bd-ink)}
tr.bd-rowlink{cursor:pointer}
tr.bd-rowlink:hover td{background:var(--bd-hover)}
tr.bd-rowlink--open td{background:var(--bd-hover)}
tr.bd-rowexpand td{background:var(--bd-hover);padding:18px}
/* creator detail */
.bd-creator-detail__title{font:700 13px var(--font-ui);color:var(--bd-ink);margin:14px 0 10px}
.bd-creator-detail__title:first-child{margin-top:0}
.bd-chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:6px}
.bd-chip{display:inline-flex;align-items:center;gap:8px;background:var(--bd-card);border:1px solid var(--bd-border);border-radius:999px;padding:7px 8px 7px 14px;font:600 12.5px var(--font-ui);color:var(--bd-ink);text-decoration:none}
a.bd-chip:hover{background:var(--bd-hover)}
.bd-chip button{background:none;border:0;color:var(--bd-muted);cursor:pointer;display:flex;padding:2px;border-radius:50%}
.bd-chip button:hover{color:#d64545}
.bd-chip .bd-ic{width:13px;height:13px}
/* list rows */
.bd-listrow{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid #f1f3f1}
.bd-listrow__grow{flex:1}
.bd-listrow__title{font-weight:600;font-size:13.5px}
/* niche add row */
.bd-nicheadd{display:flex;gap:10px;max-width:440px;margin-top:12px}
/* checks */
.bd-checks{display:grid;gap:8px;margin:6px 0 4px}
.bd-check{display:flex;align-items:center;gap:10px;font-size:13.5px;cursor:pointer}
.bd-check input{width:16px;height:16px;accent-color:var(--bd-purple)}
/* wizard */
.bd-wizsteps{display:flex;gap:8px;margin-bottom:18px}
.bd-wizstep{font:600 12px var(--font-ui);color:var(--bd-muted);padding:6px 12px;border-radius:999px;background:#f1f3f1}
.bd-wizstep--active{background:var(--bd-purple);color:#fff}
.bd-wizstep--done{background:#e5f6ec;color:#1e7a45}
.bd-wizbody{margin-bottom:8px}
/* modal */
.bd-modal-back{position:fixed;inset:0;background:rgba(22,40,31,.45);display:flex;align-items:center;justify-content:center;z-index:100;padding:20px;animation:bd-fade .15s ease}
@keyframes bd-fade{from{opacity:0}}
.bd-modal{background:var(--bd-card);border:1px solid var(--bd-border);border-radius:18px;max-width:560px;width:100%;max-height:88vh;overflow-y:auto;padding:24px;box-shadow:0 24px 64px rgba(0,0,0,.18)}
.bd-modal--wide{max-width:920px}
.bd-modal__head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}
.bd-modal__head h3{font:600 20px var(--font-display);color:var(--bd-ink);margin:0}
.bd-modal__foot{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}
/* kv */
.bd-kv{display:grid;gap:8px}
.bd-kv>div{display:grid;grid-template-columns:170px 1fr;gap:10px;font-size:13.5px;padding:8px 0;border-bottom:1px solid #f1f3f1}
.bd-kv dt{color:var(--bd-muted);font-weight:600}
.bd-kv dd{margin:0;font-weight:600}
/* landing + auth */
.bd-landing{min-height:100vh;background:var(--bd-bg);display:flex;flex-direction:column}
.bd-landing__nav{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 40px;max-width:1280px;width:100%;margin:0 auto}
.bd-landing__brand{display:flex;align-items:center;gap:12px}
.bd-brandmark{flex:none;display:block}.bd-brandmark--white{display:none}[data-theme="dark"] .bd-brandmark--white{display:block}[data-theme="dark"] .bd-brandmark--green{display:none}@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .bd-brandmark--white{display:block}:root:not([data-theme="light"]) .bd-brandmark--green{display:none}}
/* Creator home tabs: sticky bar directly under the header, creator
   sessions only. Segmented pills; the active tab is the ink block. */
.bd-ctabs{position:sticky;top:0;z-index:45;background:var(--bd-bg);border-top:1px solid var(--bd-border);border-bottom:1px solid var(--bd-border)}
.bd-ctabs__in{max-width:1280px;margin:0 auto;padding:10px 40px;display:flex;gap:8px;overflow-x:auto}
/* Hero: layered lavender/forest glows over the deep-green ground. */
.bd-landing__herowrap{position:relative;overflow:hidden;border-bottom:1px solid var(--bd-border);background:radial-gradient(640px 340px at 18% -60px,rgba(139,92,246,.20),transparent 70%),radial-gradient(760px 420px at 85% -120px,rgba(217,203,245,.13),transparent 70%),radial-gradient(900px 500px at 50% 130%,rgba(29,92,70,.35),transparent 70%)}
.bd-landing__hero{position:relative;max-width:920px;margin:0 auto;padding:72px 24px 54px;text-align:center}
.bd-landing__title{font:600 clamp(46px,6.6vw,80px)/1.04 var(--font-display);color:var(--bd-ink);margin:26px 0 20px;letter-spacing:-1.6px}
.bd-landing__title em{font-style:italic;color:var(--bd-purple)}
.bd-landing__sub{font-size:17.5px;line-height:1.55;color:var(--bd-muted);max-width:600px;margin:0 auto}
.bd-landing__ctas{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;margin-top:34px}
.bd-btn--ghostlight{background:transparent;border:1px solid var(--bd-border);color:var(--bd-ink)}
.bd-btn--ghostlight:hover{border-color:var(--bd-purple);color:var(--bd-ink)}
a.bd-btn--ghostlight{text-decoration:none}
/* Live stats strip under the hero. */
.bd-landing__strip{position:relative;border-top:1px solid var(--bd-border);background:color-mix(in srgb,var(--bd-card) 55%,transparent)}
.bd-landing__strip-in{max-width:1280px;margin:0 auto;padding:26px 40px;display:grid;grid-template-columns:repeat(4,1fr);gap:24px}
.bd-landing__stat{display:flex;flex-direction:column;gap:3px;min-width:0}
.bd-landing__stat strong{font:600 34px/1.1 var(--font-display);letter-spacing:-.6px;color:var(--bd-ink)}
.bd-landing__stat span{font:600 11px var(--font-ui);letter-spacing:1.4px;text-transform:uppercase;color:var(--bd-muted)}
.bd-landing__cards{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:56px;text-align:left}
.bd-landing__cards .bd-card h3{font:600 17px var(--font-display);margin:0 0 8px}
.bd-landing__cards .bd-card p{font-size:13.5px;color:var(--bd-muted);margin:0}
.bd-landing__infonum{display:block;font:700 12px var(--font-ui);letter-spacing:2px;color:var(--bd-purple);margin-bottom:14px}
@media(max-width:700px){.bd-landing__cards{grid-template-columns:1fr}.bd-landing__strip-in{grid-template-columns:repeat(2,1fr);padding:22px 20px}.bd-landing__stat strong{font-size:27px}}
.bd-landing__campaigns{max-width:1280px;width:100%;margin:0 auto;padding:44px 40px 72px}
.bd-landing__campaigns-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px}
.bd-landing__seceyebrow{font:700 11px var(--font-ui);letter-spacing:2px;text-transform:uppercase;color:var(--bd-purple);margin-bottom:8px}
.bd-landing__campaigns-head h2{font:600 34px/1.15 var(--font-display);color:var(--bd-ink);letter-spacing:-.6px}
.bd-landing__campaigns-head p{color:var(--bd-muted);margin-top:6px;font-size:14px}
.bd-landing__opencount{flex:none;font:700 12px var(--font-ui);letter-spacing:1px;text-transform:uppercase;color:var(--bd-muted-strong);border:1px solid var(--bd-border);background:var(--bd-card);border-radius:999px;padding:8px 14px}
.bd-landing__opencount:empty{display:none}
.bd-landing__tabs{position:sticky;top:0;z-index:40;display:flex;gap:8px;margin-top:18px;padding:12px 0;background:var(--bd-bg);border-bottom:1px solid var(--bd-border)}
.bd-landing__filters{position:sticky;top:0;z-index:40;display:flex;gap:10px;margin-top:18px;padding:12px 0;background:var(--bd-bg);border-bottom:1px solid var(--bd-border)}
.bd-landing__filters .bd-search{flex:1;min-width:180px}
.bd-landing__filters .bd-select{width:auto;min-width:160px}
.bd-landing__tab{border:1px solid var(--bd-border);background:var(--bd-card);color:var(--bd-muted-strong);border-radius:999px;padding:9px 18px;font:600 12px var(--font-ui);cursor:pointer;display:inline-flex;align-items:center;gap:7px}
.bd-landing__tab--active{background:var(--bd-ink);color:var(--bd-bg);border-color:var(--bd-ink)}
.bd-landing__count{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 6px;border-radius:999px;background:var(--bd-purple-deep);color:#fff;font:700 11px var(--font-ui)}
.bd-landing__tab--active .bd-landing__count{background:var(--bd-purple-pale);color:var(--bd-ink)}
.bd-landing__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:24px}
@media(max-width:1024px){.bd-landing__grid{grid-template-columns:repeat(2,1fr)}}
.bd-landing__card{background:var(--bd-card);border:1px solid var(--bd-border);border-radius:18px;overflow:hidden;display:flex;flex-direction:column;transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease}
.bd-landing__card:hover{transform:translateY(-4px);border-color:var(--bd-purple-pale);box-shadow:0 20px 44px rgba(0,0,0,.30)}
.bd-landing__cover{height:168px;display:flex;align-items:center;justify-content:center;font:600 52px var(--font-display);color:#fff;flex:none;position:relative;overflow:hidden}
.bd-landing__cover::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(255,255,255,.14),transparent 45%,rgba(0,0,0,.16));pointer-events:none}
.bd-landing__cover img{position:absolute;inset:0}
.bd-landing__cardbody{padding:20px;display:flex;flex-direction:column;gap:11px;flex:1}
.bd-landing__cardbody h3{font:600 19px/1.3 var(--font-display);color:var(--bd-ink);margin:0}
.bd-landing__pills{display:flex;gap:6px;flex-wrap:wrap}
.bd-landing__meta{font-size:12.5px;color:var(--bd-muted)}
.bd-landing__rate{font-size:13px}
.bd-landing__rate strong{color:var(--bd-purple);font-weight:700}
.bd-landing__cardbody .bd-btn{margin-top:auto}
.bd-landing__stats{font-size:12.5px;color:var(--bd-muted);display:flex;gap:6px;align-items:baseline;flex-wrap:wrap}
.bd-landing__stats strong{color:var(--bd-ink);font-weight:600}
.bd-landing__card .bd-landing__stats{border-top:1px solid var(--bd-border);border-bottom:1px solid var(--bd-border);padding:10px 0}
/* Flip-able CPV card (trading-card style): creators and staff in Creator
   view get a View button that turns the card over to its details face.
   The front face stays in flow (it sizes the card, so grid rows keep
   their uniform height); the back face overlays the same box and scrolls
   internally when its details run long. */
.bd-flipcard{perspective:1400px}
.bd-flipcard__inner{position:relative;flex:1;display:flex;flex-direction:column;transform-style:preserve-3d;transition:transform .55s cubic-bezier(.25,.7,.3,1)}
.bd-flipcard[data-flipped="true"] .bd-flipcard__inner{transform:rotateY(180deg)}
.bd-flipcard__face{backface-visibility:hidden;-webkit-backface-visibility:hidden}
.bd-flipcard__front{display:flex;flex-direction:column;flex:1;min-height:0}
.bd-flipcard__back{position:absolute;inset:0;transform:rotateY(180deg);background:var(--bd-card);padding:20px;display:flex;flex-direction:column;gap:13px;overflow-y:auto}
.bd-flipcard__back h3{font:600 19px/1.3 var(--font-display);color:var(--bd-ink);margin:0}
.bd-flipcard__sec-label{font:600 11px var(--font-ui);letter-spacing:1.4px;text-transform:uppercase;color:var(--bd-muted);margin-bottom:3px}
.bd-flipcard__sec-value{font-size:15px;font-weight:600;color:var(--bd-ink)}
.bd-flipcard__sec p{margin:0;font-size:13.5px;line-height:1.55;color:var(--bd-muted-strong);white-space:pre-wrap}
.bd-flipcard__limits{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.bd-flipcard__actions{display:flex;gap:8px;margin-top:auto}
.bd-flipcard__actions .bd-btn{margin-top:0}
.bd-flipcard__actions .bd-btn--grow{flex:1}
@media (prefers-reduced-motion: reduce){
  .bd-flipcard__inner{transition:none}
  .bd-flipcard[data-flipped="true"] .bd-flipcard__inner{transform:none}
  .bd-flipcard__face{transform:none;backface-visibility:visible;-webkit-backface-visibility:visible}
  .bd-flipcard__back{visibility:hidden}
  .bd-flipcard[data-flipped="true"] .bd-flipcard__front{visibility:hidden}
  .bd-flipcard[data-flipped="true"] .bd-flipcard__back{visibility:visible}
}
/* Creator tab body (My Campaigns / My Earnings) under the landing chrome. */
.bd-landing__panel{max-width:1280px;width:100%;margin:0 auto;padding:40px 40px 72px;flex:1}
.bd-landing__panel-head h2{font:600 31px/1.15 var(--font-display);color:var(--bd-ink);letter-spacing:-.5px}
.bd-landing__panel-head p{color:var(--bd-muted);margin-top:6px;font-size:13.5px}
.bd-landing__panel-head{margin-bottom:26px}
/* My Earnings headline band. */
.bd-landing__estats{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
.bd-estat{background:var(--bd-card);border:1px solid var(--bd-border);border-radius:16px;padding:20px 22px;display:flex;flex-direction:column;gap:4px}
.bd-estat span{font:600 11px var(--font-ui);letter-spacing:1.4px;text-transform:uppercase;color:var(--bd-muted)}
.bd-estat strong{font-size:30px;font-weight:700;letter-spacing:-.8px;color:var(--bd-ink);line-height:1.15}
.bd-estat em{font-style:normal;font-size:12.5px;color:var(--bd-muted)}
@media(max-width:1024px){.bd-landing__estats{grid-template-columns:repeat(2,1fr)}}
@media(max-width:560px){.bd-landing__estats{grid-template-columns:1fr}}
/* Referrals tab: hero card, link row, rules list. */
.bd-refhero{margin-bottom:18px}
.bd-refhero h3{font-size:20px;margin-bottom:6px}
.bd-refstats{display:grid;grid-template-columns:repeat(2,1fr);gap:16px;margin:18px 0}
@media(max-width:560px){.bd-refstats{grid-template-columns:1fr}}
.bd-refrow{display:flex;gap:10px;flex-wrap:wrap;margin-top:12px}
.bd-refrow .bd-input{flex:1;min-width:200px}
.bd-refrule{display:flex;gap:12px;align-items:flex-start;padding:14px 0;border-top:1px solid var(--bd-border)}
.bd-refrule p{margin:0;font-size:14.5px;color:var(--bd-muted-strong)}
.bd-refrule__x{color:var(--bd-pink,#e5484d);flex:none;margin-top:1px}
.bd-refrule__x .bd-ic{width:20px;height:20px}
/* Landing footer. */
.bd-landing__foot{margin-top:auto;border-top:1px solid var(--bd-border)}
.bd-landing__foot-in{max-width:1280px;margin:0 auto;padding:22px 40px;display:flex;align-items:center;gap:10px;color:var(--bd-muted);font-size:13px}
.bd-landing__foot-name{font:600 14px var(--font-display);color:var(--bd-ink)}
.bd-landing__foot-sep{color:var(--bd-border)}
.bd-desc2{font-size:12.5px;color:var(--bd-muted);margin:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
/* Cover art dropzone (create wizard + Edit Campaign + Go public): one
   dashed box is the upload target — drag a file onto it (it
   highlights), drop to stage it, or click it / its Upload button for
   the file picker. The preview thumb lives inside the box; the staged
   file's name is never shown. Set art swaps the dashed border for a
   solid one and offers Replace + Remove. */
.bd-dropzone{display:flex;gap:14px;align-items:center;border:1.5px dashed var(--bd-border);border-radius:12px;padding:14px;background:var(--bd-bg);cursor:pointer;transition:border-color .15s ease,background .15s ease,box-shadow .15s ease}
.bd-dropzone:hover{border-color:var(--bd-purple)}
.bd-dropzone:focus-within{border-color:var(--bd-purple);box-shadow:0 0 0 3px var(--bd-purple-soft)}
.bd-dropzone--over{border-color:var(--bd-purple);background:var(--bd-purple-soft)}
.bd-dropzone--set{border-style:solid}
.bd-dropzone__prev{width:84px;height:84px;border-radius:10px;overflow:hidden;background:var(--bd-card);display:flex;align-items:center;justify-content:center;flex:none;border:1px solid var(--bd-border);color:var(--bd-muted)}
.bd-dropzone__prev img{width:100%;height:100%;object-fit:cover;display:block}
.bd-dropzone__ph{display:flex}
.bd-dropzone__ph svg{width:30px;height:30px}
.bd-dropzone__main{min-width:0}
.bd-dropzone__title{font-size:13.5px;font-weight:600;color:var(--bd-ink)}
.bd-dropzone__hint{font-size:12px;color:var(--bd-muted);margin-top:2px}
.bd-dropzone__acts{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:9px}
.bd-dropzone--mini{gap:10px;padding:9px 11px;border-radius:10px;margin-top:8px;min-width:216px;white-space:normal;text-align:left}
.bd-dropzone--mini .bd-dropzone__prev{width:34px;height:34px;border-radius:8px}
.bd-dropzone--mini .bd-dropzone__ph svg{width:16px;height:16px}
.bd-dropzone--mini .bd-dropzone__title{font-size:12.5px}
.bd-dropzone--mini .bd-dropzone__hint{font-size:11.5px}
@media(max-width:560px){.bd-dropzone{gap:12px;padding:12px}.bd-dropzone__prev{width:68px;height:68px}.bd-dropzone__title{font-size:13px}}
.bd-landing__info{max-width:1280px;width:100%;margin:0 auto;padding:0 40px 80px}
.bd-landing__info .bd-landing__cards{margin-top:0}
@media(max-width:700px){.bd-landing__grid{grid-template-columns:1fr}.bd-landing__campaigns,.bd-landing__info{padding-left:20px;padding-right:20px}.bd-ctabs__in{padding:10px 20px}.bd-landing__panel{padding:28px 20px 56px}.bd-landing__foot-in{padding:20px}.bd-landing__hero{padding:52px 20px 42px}.bd-landing__campaigns-head{flex-wrap:wrap}}
@media(max-width:560px){.bd-ctabs__in{gap:6px}.bd-ctabs__in .bd-subtab{padding:8px 13px;font-size:12.5px}}
/* landing profile chip + menu (signed-in home header) */
.bd-usermenu{position:relative}
.bd-userchip{display:flex;align-items:center;gap:9px;background:var(--bd-card);border:1px solid var(--bd-border);border-radius:999px;padding:5px 14px 5px 5px;cursor:pointer;color:var(--bd-ink);font:600 13.5px var(--font-body)}
.bd-userchip:hover{border-color:var(--bd-purple)}
.bd-userchip__avatar{width:32px;height:32px;border-radius:50%;background:var(--bd-sidebar);color:#fff;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;flex:none}
.bd-userchip__name{max-width:22ch;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bd-userchip>svg{width:15px;height:15px;stroke:var(--bd-muted-strong);fill:none;stroke-width:2;flex:none}
.bd-usermenu__menu{position:absolute;right:0;top:calc(100% + 8px);min-width:232px;background:var(--bd-card);border:1px solid var(--bd-border);border-radius:14px;box-shadow:0 18px 44px rgba(0,0,0,.22);padding:8px;z-index:60}
.bd-usermenu__menu[hidden]{display:none}
.bd-usermenu__head{display:flex;flex-direction:column;gap:1px;padding:8px 10px 10px;border-bottom:1px solid var(--bd-border);margin-bottom:6px}
.bd-usermenu__head strong{font-size:13.5px;color:var(--bd-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:30ch}
.bd-usermenu__head span{font-size:12px;color:var(--bd-muted)}
.bd-usermenu__item{display:flex;align-items:center;gap:10px;width:100%;padding:10px;border:0;border-radius:9px;background:none;color:var(--bd-ink);font:600 13.5px var(--font-body);text-align:left;cursor:pointer;text-decoration:none;box-sizing:border-box}
.bd-usermenu__item:hover{background:var(--bd-hover)}
.bd-usermenu__item svg{width:16px;height:16px;stroke:var(--bd-muted-strong);fill:none;stroke-width:1.8;flex:none}
@media(max-width:560px){.bd-userchip{padding:5px}.bd-userchip__name{display:none}.bd-usermenu__menu{position:fixed;right:12px;top:64px}}

.bd-auth{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--bd-bg);padding:24px}
.bd-auth__card{background:var(--bd-card);border-radius:20px;padding:40px;max-width:440px;width:100%;box-shadow:0 12px 40px rgba(31,58,51,.08)}
.bd-auth__card h1{font:600 30px var(--font-display);color:var(--bd-ink);margin:0 0 8px}
.bd-auth__sub{font-size:13.5px;color:var(--bd-muted);margin:0 0 22px}
.bd-auth__form{display:grid;gap:4px}
.bd-auth__hint{font-size:12px;color:var(--bd-muted);margin-top:18px;text-align:center}
.bd-auth__hint code{background:var(--bd-border);color:var(--bd-ink);}
.bd-auth__demo{display:flex;align-items:center;gap:10px;margin:0 0 22px;font-size:13px;line-height:1.55;color:var(--bd-muted)}
.bd-auth__demo .bd-badge{flex:none;margin:0;padding:2px 6px;border-radius:5px}
/* stats small variant */
.bd-stats--sm{grid-template-columns:repeat(4,1fr)}
@media(max-width:900px){.bd-stats--sm{grid-template-columns:repeat(2,1fr)}}

.bd-btn,.bd-btn:hover{text-decoration:none}

/* ---- live-backend wiring additions ---- */
.bd-toast {
  position: fixed; left: 50%; bottom: 28px; transform: translateX(-50%);
  background: #1f3a33; color: #fff; padding: 10px 18px; border-radius: 10px;
  font-size: 14px; box-shadow: 0 8px 24px rgba(0,0,0,.25); z-index: 9999; display: none;
}
.bd-toast--err { background: #b3261e; }
.bd-pill--blue { background: rgba(95,126,196,.16); color: #5f7ec4; }
.bd-pill--red { background: rgba(214,69,69,.14); color: #d64545; }
.bd-pill--amber { background: rgba(196,141,60,.16); color: #c48d3c; }
/* ---- Bulk-add selection (Add Creators tab) ---- */
.bd-selbar{position:sticky;top:0;z-index:30;display:flex;align-items:center;gap:12px;background:var(--bd-card);border:1px solid var(--bd-border);border-radius:12px;padding:10px 14px;margin-bottom:12px;box-shadow:0 4px 14px rgba(9,36,28,.08)}
.bd-selbar[hidden]{display:none}
.bd-selbar strong{font-size:13.5px;color:var(--bd-ink)}
.bd-selbar .bd-btn{margin-left:auto}
.bd-selbox{width:17px;height:17px;accent-color:var(--bd-purple);cursor:pointer;vertical-align:middle}
.bd-selbox:disabled{cursor:default;opacity:.35}
.bd-bulkall{display:flex;gap:10px;align-items:flex-end;margin-bottom:14px;padding:12px 14px;border:1px dashed var(--bd-border);border-radius:10px;background:var(--bd-bg)}
.bd-bulkall .bd-field{margin:0}
.bd-bulkall .bd-ghostbtn{flex:none;margin-bottom:1px}
.bd-bulklist{display:flex;flex-direction:column;gap:8px;max-height:46vh;overflow:auto;padding-right:2px}
.bd-bulkrow{display:grid;grid-template-columns:minmax(0,1fr) 110px 90px 110px;gap:10px;align-items:center;padding:8px 12px;border:1px solid var(--bd-border);border-radius:10px;background:var(--bd-card)}
.bd-bulkrow .bd-field{margin:0}
.bd-bulkrow .bd-field label{font-size:10.5px}
.bd-bulkrow__who{min-width:0}
.bd-bulkrow__who strong{display:block;font-size:13.5px;color:var(--bd-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bd-bulkrow__who span{font-size:11.5px;color:var(--bd-muted)}
.bd-bulkrow__st{font-size:12px;color:var(--bd-muted);text-align:right}
.bd-bulkrow__st--ok{color:var(--bd-green-text);font-weight:700}
.bd-bulkrow__st--err{color:#c0392b;font-weight:700}
/* Bulk-add modal: per-creator item wrapper, history dropdown, pricing
   shortcuts, and the live totals tracker. */
.bd-bulkitem{border:1px solid var(--bd-border);border-radius:10px;background:var(--bd-card);overflow:hidden;flex:none}
.bd-bulkitem>.bd-bulkrow{border:0;border-radius:0;background:transparent}
.bd-bulkrow__acts{display:flex;gap:6px;align-items:center;margin-top:6px;flex-wrap:wrap}
.bd-bulkmini{display:inline-flex;align-items:center;gap:5px;background:var(--bd-card);border:1px solid var(--bd-border);border-radius:7px;padding:4px 9px;font-size:11.5px;font-weight:600;color:var(--bd-purple-deep);cursor:pointer;white-space:nowrap}
.bd-bulkmini:hover{border-color:var(--bd-purple)}
.bd-bulkmini:disabled{opacity:.55;cursor:default}
.bd-bulkmini--link{background:none;border-color:transparent;padding:4px 2px}
.bd-bulkhist{border-top:1px dashed var(--bd-border);background:var(--bd-bg);padding:8px 12px 10px}
.bd-bulkhist[hidden]{display:none}
.bd-bulkhist__label{font-size:10.5px;font-weight:700;letter-spacing:.8px;text-transform:uppercase;color:var(--bd-muted);margin:2px 0 4px}
.bd-bulkhist__row{display:flex;align-items:center;gap:10px;padding:6px 0;border-bottom:1px solid var(--bd-line-soft,#eef0ed)}
.bd-bulkhist__row:last-child{border-bottom:0}
.bd-bulkhist__info{min-width:0;flex:1}
.bd-bulkhist__info strong{display:block;font-size:12.5px;color:var(--bd-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bd-bulkhist__info span{font-size:11.5px;color:var(--bd-muted)}
.bd-input--flash{animation:bd-bulkflash .9s ease}
@keyframes bd-bulkflash{0%{box-shadow:0 0 0 3px var(--bd-purple-pale);background:var(--bd-purple-soft)}100%{box-shadow:none}}
.bd-bulktotals{position:sticky;bottom:0;z-index:5;display:flex;align-items:center;gap:16px 34px;flex-wrap:wrap;margin-top:14px;padding:16px 20px;border-radius:14px;color:#f2f7f3;border:1px solid transparent;background:linear-gradient(115deg,#0b3d2e,#0e4a38 58%,#123f31) padding-box,linear-gradient(120deg,#d9cbf5,#8b5cf6 55%,rgba(139,92,246,0)) border-box;box-shadow:0 8px 24px rgba(11,61,46,.25)}
.bd-bulktotals__main{display:flex;flex-direction:column;gap:2px}
.bd-bulktotals__label{font-size:10.5px;font-weight:700;letter-spacing:1.4px;text-transform:uppercase;color:#d9cbf5}
.bd-bulktotals__hero{font-size:30px;font-weight:800;letter-spacing:-.8px;line-height:1.05;font-variant-numeric:tabular-nums}
.bd-bulktotals__cells{margin-left:auto;display:flex;gap:26px;flex-wrap:wrap}
.bd-bulktotals__cell{display:flex;flex-direction:column;gap:2px}
.bd-bulktotals__cell strong{font-size:17px;font-weight:700;font-variant-numeric:tabular-nums}
.bd-bulktotals__cell span{font-size:11px;color:#a9c4b8}
/* Bulk-add modal layout: the modal itself never scrolls — head, Apply-to-all,
   totals and footer stay fixed and only the creator list scrolls between
   them. (The list's own 46vh cap + overflow made it a nested scroller whose
   flex items shrank and clipped instead of scrolling.) */
.bd-modal--bulk{display:flex;flex-direction:column;overflow:hidden}
.bd-modal--bulk .bd-modal__head,.bd-modal--bulk .bd-modal__foot{flex:none}
.bd-modal--bulk .bd-modal__body{display:flex;flex-direction:column;flex:1;min-height:0}
.bd-modal--bulk .bd-bulkall,.bd-modal--bulk .bd-bulktotals{flex:none}
.bd-modal--bulk .bd-bulklist{flex:1 1 auto;min-height:0;max-height:none;overflow-y:auto;overscroll-behavior:contain}
.bd-modal--bulk .bd-bulktotals{position:static}
.bd-select--sm { padding: 4px 8px; font-size: 13px; }

/* Campaign detail rework: expandable rows, brief <details>, attention checkbox, add preview */
.bd-chev{color:var(--bd-muted);font-size:12px;cursor:pointer}
tr.bd-rowexp{cursor:pointer}
tr.bd-rowexp:hover td{background:var(--bd-line-soft,#fafbfa)}
details.bd-details{padding:0}
.bd-detailsum{cursor:pointer;list-style:none;display:flex;align-items:center;gap:10px;padding:22px 24px;font-family:var(--font-display);font-weight:600;font-size:17.5px;color:var(--bd-ink)}
.bd-detailsum::-webkit-details-marker{display:none}
.bd-detailsum::before{content:"\25B8";color:var(--bd-muted);font-size:14px}
.bd-details[open]>.bd-detailsum::before{content:"\25BE"}
.bd-detailsbody{padding:2px 24px 24px}
/* Settings toggles */
.bd-switch{display:flex;align-items:flex-start;gap:12px;cursor:pointer;padding:12px 0;border-bottom:1px solid var(--bd-line-soft,#eef0ed)}
.bd-switch:last-child{border-bottom:0}
.bd-switch input{position:absolute;opacity:0;pointer-events:none}
.bd-switch__track{width:44px;height:25px;border-radius:13px;background:#cfd4d0;position:relative;flex:none;transition:background .15s ease;margin-top:2px}
.bd-switch__track::after{content:"";position:absolute;top:2.5px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;transition:left .15s ease;box-shadow:0 1px 3px rgba(0,0,0,.25)}
.bd-switch input:checked+.bd-switch__track{background:var(--bd-purple)}
.bd-switch input:checked+.bd-switch__track::after{left:21px}
.bd-switch input:focus-visible+.bd-switch__track{outline:3px solid #b59ae8;outline-offset:2px}
.bd-switch__text strong{display:block;font-size:13.5px;color:var(--bd-ink)}
.bd-switch__text span{display:block;font-size:12px;color:var(--bd-muted);margin-top:3px;line-height:1.5}

/* ---- review batch 2: ranked top-campaigns, chart tooltip, status select, reorder ---- */
.bd-campmini{display:flex;flex-direction:column}
.bd-campmini__row{display:flex;align-items:center;gap:12px;padding:11px 4px;border-bottom:1px solid var(--bd-border);text-decoration:none}
.bd-campmini__row:last-child{border-bottom:0}
.bd-campmini__rank{width:26px;height:26px;border-radius:8px;background:var(--bd-purple-soft);color:var(--bd-purple-deep);font:700 12px var(--font-ui);display:flex;align-items:center;justify-content:center;flex:none}
.bd-campmini__meta{flex:1;min-width:0;display:flex;flex-direction:column}
.bd-campmini__name{font-size:13px;font-weight:600;color:var(--bd-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bd-campmini__sub{font-size:11px;color:var(--bd-muted);margin-top:2px}.bd-campmini__views{font-size:12.5px;font-weight:700;color:var(--bd-muted-strong);white-space:nowrap;font-variant-numeric:tabular-nums}
.bd-campmini__row svg{width:15px;height:15px;stroke:var(--bd-muted);fill:none;stroke-width:2;flex:none}
.bd-chart__plot{position:relative}
.bd-charttip{position:absolute;z-index:5;pointer-events:none;background:var(--bd-card);border:1px solid var(--bd-border);border-radius:10px;box-shadow:0 8px 22px rgba(0,0,0,.16);padding:9px 12px;font-size:12px;white-space:nowrap}
.bd-charttip__date{font-weight:700;color:var(--bd-ink);margin-bottom:4px}
.bd-charttip__row{color:var(--bd-muted-strong)}
.bd-charttip__row strong{color:var(--bd-ink);font-variant-numeric:tabular-nums}
.bd-statusselect{max-width:100%;height:34px;border:1px solid var(--bd-border);border-radius:8px;background:var(--bd-card);color:var(--bd-ink);font:600 13px var(--font-ui);padding:0 8px;cursor:pointer}
.bd-statusselect:focus{outline:2px solid var(--bd-purple);outline-offset:1px}
/* Per-booking note box on campaign creator rows: subtle single-line input
   under the handle; saves on blur. */
.bd-noteinput{display:block;width:100%;max-width:220px;margin-top:4px;background:var(--bd-card);border:1px solid var(--bd-border);border-radius:6px;color:var(--bd-ink);font:400 12px var(--font-ui);padding:4px 8px;outline:none}
.bd-noteinput::placeholder{color:var(--bd-muted);opacity:.55}
.bd-noteinput:hover{border-color:var(--bd-border)}
.bd-noteinput:focus{background:var(--bd-card);border-color:var(--bd-purple)}
.bd-noteinput--saved{border-color:var(--bd-green-text,var(--bd-green-soft))}
.bd-campaign__drag{display:flex;flex-direction:column;gap:2px;align-items:center}
.bd-move{border:1px solid var(--bd-border);background:var(--bd-card);color:var(--bd-muted-strong);border-radius:6px;width:24px;height:18px;font-size:9px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0}
.bd-move:hover{border-color:var(--bd-purple);color:var(--bd-purple-deep)}
.bd-move:disabled{opacity:.35;cursor:default}
@media (max-width:900px){
  .bd-campaign__col,.bd-campaign__drag,.bd-campaigns__head{display:none!important}
}

/* === UI cleanup pass (2026-10-08): expandable rows, search, profile detail === */
/* Expanded table rows: theme-aware inset panel, aligned with the row */
.bd-table tbody tr.bd-rowexpand>td{background:var(--bd-hover);padding:9px 14px;border-bottom:1px solid var(--bd-border)}
.bd-table tbody tr.bd-row--muted>td{opacity:.75;background:var(--bd-hover)}
.bd-expandrow td{background:var(--bd-hover)}
/* Creator detail (expanded row): clear labeled sections */
.bd-creator-detail{display:flex;flex-direction:column}
.bd-creator-detail__sec{margin-bottom:2px}
.bd-creator-detail__title{font:700 11.5px var(--font-ui);letter-spacing:1px;text-transform:uppercase;color:var(--bd-muted-strong);margin:9px 0 6px}
.bd-creator-detail__sec:first-child .bd-creator-detail__title{margin-top:2px}
/* Campaign assignment rows: used in expanded creator rows + profile accounts.
   Density pass (Max, 2026-10-28): the campaign dropdowns across tabs read
   line by line, so the rows slim down — tighter padding/gap/margins,
   slightly smaller stats text, a shorter progress track — while keeping
   every element (name · status pill · progression · stats · arrow). */
.bd-camp-row{display:flex;align-items:center;gap:10px;background:var(--bd-card);border:1px solid var(--bd-border);border-radius:10px;padding:5px 10px;margin-bottom:4px;text-decoration:none;color:var(--bd-ink)}
.bd-camp-row:hover{border-color:var(--bd-purple)}
.bd-camp-row__link{color:inherit;text-decoration:none}
.bd-camp-row__link:hover .bd-camp-row__name{color:var(--bd-purple)}
.bd-camp-row__name{font-weight:600;font-size:13px;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bd-camp-row__prog{font-size:11.5px;color:var(--bd-muted-strong);white-space:nowrap}
.bd-camp-row__stats{font-size:11.5px;color:var(--bd-muted-strong);white-space:nowrap;display:inline-flex;align-items:center;gap:4px}.bd-camp-row__stats svg{width:13px;height:13px;stroke:var(--bd-muted);fill:none;stroke-width:2}
.bd-camp-row .bd-progress{flex:0 0 96px;margin-top:0;min-width:96px}
.bd-camp-row svg{flex:none;width:15px;height:15px;stroke:var(--bd-muted);fill:none;stroke-width:2}
/* Search: theme-aware background, icon as a flex item (not absolute) */
.bd-search{background:var(--bd-card)}
.bd-search svg{position:static;transform:none;flex:none}
.bd-search .bd-input{flex:1;min-width:0;background:transparent;color:var(--bd-ink)}
/* Profile detail: account cards with the remove button attached to the handle */
.bd-acct{background:var(--bd-card);border:1px solid var(--bd-border);border-radius:12px;padding:14px 16px;margin-bottom:12px}
.bd-modal .bd-acct,.bd-modal .bd-camp-row{background:var(--bd-bg)}
.bd-acct__perf{font-size:12px;color:var(--bd-muted-strong);margin-top:6px}
.bd-profstats{display:flex;gap:10px;flex-wrap:wrap;background:var(--bd-bg);border:1px solid var(--bd-border);border-radius:12px;padding:10px 14px;margin-bottom:12px}
.bd-profstats__item{display:flex;flex-direction:column;gap:2px;min-width:110px}
.bd-profstats__val{font:700 20px var(--font-ui);color:var(--bd-ink)}
.bd-profstats__lbl{font-size:11px;color:var(--bd-muted);text-transform:uppercase;letter-spacing:.6px}
/* Profile summary strip (preview + modal): inline stat items with niche/platform chips */
.bd-profstats .bd-profstats__item{flex-direction:row;align-items:center;gap:8px;min-width:0}
.bd-profstats__item strong{font:700 15px var(--font-ui);color:var(--bd-ink)}
.bd-profstats__item .bd-chip{padding:4px 10px;font-size:11px}
.bd-chip--niche{background:var(--bd-hover)}
.bd-chip--plat{background:var(--bd-purple-soft,#f0eafc);border-color:var(--bd-purple);color:var(--bd-purple-deep)}
/* Compact chips inside table cells (Creator List platform/niche badges). */
.bd-table .bd-chip{padding:3px 10px;font-size:11px}
.bd-profstats__chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.bd-acct__head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.bd-acct__handle{font-weight:700;font-size:14px;color:var(--bd-ink)}
.bd-acct__head .bd-iconbtn{flex:none}
.bd-acct__camps{margin-top:12px}
.bd-acct__camps-label{font:700 11px var(--font-ui);letter-spacing:.8px;text-transform:uppercase;color:var(--bd-muted-strong);margin-bottom:8px}
.bd-acct__empty{margin-top:8px}
.bd-profsec{margin-bottom:10px}.bd-profsec:last-child{margin-bottom:0}
.bd-profsec>.bd-creator-detail__title{margin-top:2px}
.bd-nicheadd{align-items:center}
/* Progress bars: theme-aware track, prominent brand fill */
.bd-progress{height:7px;background:var(--bd-border)}
.bd-progress__fill{background:var(--bd-purple)}

/* Bloom Profiles quick preview (inline expandable row) */
.bd-profprev{display:flex;flex-direction:column;gap:16px}
.bd-profprev__sec{display:flex;flex-direction:column}
.bd-profprev__label{font:700 11px var(--font-ui);letter-spacing:.8px;text-transform:uppercase;color:var(--bd-muted-strong);margin-bottom:8px;text-align:left}
.bd-profprev__accts{display:flex;flex-direction:column;gap:8px}
.bd-profprev__acct{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.bd-profprev__stats{font-size:12px;color:var(--bd-muted-strong)}
.bd-profprev__nostats{font-size:12px;color:var(--bd-muted)}
.bd-profprev .bd-camp-row{margin-bottom:4px;background:var(--bd-bg)}
.bd-profprev__foot{display:flex;align-items:flex-end;justify-content:space-between;gap:16px}
.bd-profprev__sec--grow{flex:1;min-width:0}
.bd-profprev__foot .bd-btn{flex:none}

/* New creator modal: platform segmented control */
.bd-seg{display:inline-flex;background:var(--bd-bg);border:1px solid var(--bd-border);border-radius:10px;padding:3px;gap:3px}
.bd-seg__opt{border:0;background:none;color:var(--bd-muted-strong);font:600 13px var(--font-ui);padding:8px 18px;border-radius:8px;cursor:pointer}
.bd-seg__opt--active{background:var(--bd-purple);color:#fff}
.bd-pill--ig{background:var(--bd-purple-soft,#f0eafc);border-color:var(--bd-purple);color:var(--bd-purple-deep);font-size:10px;padding:2px 8px}
.bd-pill--plat-sm{font-size:10px;padding:2px 8px;margin-left:4px}
/* Deliverable type pill (repost / story shoutout campaigns; post is
   the default and unbadged) */
.bd-pill--deliv{background:var(--bd-purple-soft,#f0eafc);border-color:var(--bd-purple);color:var(--bd-purple-deep);font-size:10px;padding:2px 8px;margin-left:4px;white-space:nowrap}
.bd-formerr{color:#d64545;font-size:13px;margin:8px 0 0}
.cpv-audio-bar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;padding:0 20px 14px;font-size:13.5px}

/* Campaign Financial Overview: money pipeline stepper (head_admin only) */
.bd-finsteps{display:flex;flex-direction:column}
.bd-finstep{display:flex;gap:14px;padding:16px 4px;border-bottom:1px solid var(--bd-border)}
.bd-finstep:last-child{border-bottom:0}
.bd-finstep__ic{flex:none;width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  font:700 13px var(--font-ui);background:var(--bd-bg);border:1px solid var(--bd-border);color:var(--bd-muted-strong)}
.bd-finstep__ic--done{background:#1e7e4e;border-color:#1e7e4e;color:#fff}
.bd-finstep__ic--done svg{width:15px;height:15px}
.bd-finstep__ic--current{background:var(--bd-purple);border-color:var(--bd-purple);color:#fff}
.bd-finstep__body{flex:1;min-width:0}
.bd-finstep__title{font:700 14px var(--font-ui);margin-bottom:2px}
.bd-finstep--pending .bd-finstep__title{color:var(--bd-muted-strong)}
.bd-finstep__actions{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap;align-items:center}

/* ================= UI POLISH — readability & modern feel (2026-10-08) ================
   Styles-only pass: no layout or functionality changes. Covers light + dark themes. */

/* ---- 1. Missing variables (previously fell back to near-white in dark mode) ---- */
:root{
  --bd-line-soft:#e9ece9;
  --bd-lav:#d9cbf5;
  --bd-sage:#4d6b5c;
  --bd-danger:#c0392b;
  --bd-danger-soft:#fdeeee;
}
html[data-theme="dark"]{
  --bd-line-soft:#24332d;
  --bd-danger:#f08a80;
  --bd-danger-soft:#3a1f1c;
  --negative:#ef9a90; /* readable red on dark (was #a8443c @ 2.8:1) */
}

/* ---- 2. Light-theme muted text: hit 4.5:1 on white ---- */
:root{ --muted:#5f6d68; }

/* ---- 3. Badge contrast fixes (light) + full dark-mode badge system ---- */
.bd-badge--muted{color:#5a6662}
.bd-badge--blue{color:#2b64d8}
.bd-badge--pink{color:#d63363}
.bd-badge--amber,.bd-badge--paused{color:#a86e12}
.bd-badge--gray{color:#5f6d68}
html[data-theme="dark"] .bd-badge--paused,
html[data-theme="dark"] .bd-badge--amber{background:#3a2c14;color:#f0c979}
html[data-theme="dark"] .bd-badge--muted,
html[data-theme="dark"] .bd-badge--gray{background:#26312c;color:#b9c6c0}
html[data-theme="dark"] .bd-badge--blue{background:#1d2b4d;color:#93b4ff}
html[data-theme="dark"] .bd-badge--pink{background:#3d2330;color:#f49ec4}
html[data-theme="dark"] .bd-badge--demo{background:#3a2c14;color:#f0c979}
html[data-theme="dark"] .bd-badge--draft,
html[data-theme="dark"] .bd-badge--purple{background:#2b2441;color:#c9b6f7}
html[data-theme="dark"] .bd-badge--live,
html[data-theme="dark"] .bd-badge--mint{background:#173026;color:#63d89b}

/* ---- 4. Hardcoded-white surfaces get dark variants ---- */
html[data-theme="dark"] .bd-tooltip{background:#1c2a24;color:var(--bd-ink);box-shadow:0 10px 28px rgba(0,0,0,.45)}
html[data-theme="dark"] .bd-ghostbtn,
html[data-theme="dark"] .bd-pillbtn,
html[data-theme="dark"] .bd-btn--outline{background:var(--bd-card);color:var(--bd-ink)}
html[data-theme="dark"] .bd-search{background:var(--bd-card)}
html[data-theme="dark"] .bd-notice--error{background:var(--bd-danger-soft);border-color:#5e2c28;color:var(--bd-danger)}
html[data-theme="dark"] .bd-perf__bar{background:#24332d}
html[data-theme="dark"] .bd-empty__icon{background:#1c2a24;color:var(--bd-muted)}
html[data-theme="dark"] .bd-avatars__more{background:#26312c;color:var(--bd-muted)}
html[data-theme="dark"] .bd-stat__icon--blue{background:#1d2b4d;color:#93b4ff}
html[data-theme="dark"] .bd-stat__icon--pink{background:#3d2330;color:#f49ec4}
html[data-theme="dark"] .bd-stat__icon--amber{background:#3a2c14;color:#f0c979}
html[data-theme="dark"] .bd-card__icon--revenue,html[data-theme="dark"] .card-icon--revenue{background:#1e2f28;color:#9fd8b8}
html[data-theme="dark"] .bd-hintbar{background:#15211c;border-color:#2a3a32;color:var(--bd-ink)}
html[data-theme="dark"] .bd-switch__track{background:#3a4a43}
html[data-theme="dark"] .bd-pill--green{background:#173026;color:#63d89b}
html[data-theme="dark"] .bd-pill--amber{background:#2e2417;color:#e0aa54}

/* ---- 5. Chart tooltip legibility ---- */
.bd-charttip{color:var(--bd-ink);font-weight:500}
.bd-charttip strong{color:var(--bd-ink)}

/* ---- 6. Smooth transitions on interactive elements (modern feel) ---- */
.bd-nav__item,.bd-btn,.bd-ghostbtn,.bd-pillbtn,.bd-iconbtn,.bd-outlinebtn,.bd-action,
.bd-tabs__tab,.bd-campaign--link,.creator-directory__row,.bd-table__rowlink,
.portal-btn,.bd-rowmenu,.bd-chip,.bd-statusselect,.bd-noteinput,.bd-pager__btn,
.action-btn,.range,.bd-camp-row,.campaign-type,.portal-choice{
  transition:background-color .16s ease,border-color .16s ease,color .16s ease,box-shadow .16s ease,transform .16s ease;
}
tr.bd-rowlink td,tr.bd-rowexp td{transition:background-color .16s ease}

/* ---- 7. Softer, more modern card shadows ---- */
.bd-card,.bd-stat{box-shadow:0 1px 2px rgba(18,28,23,.05),0 6px 20px rgba(18,28,23,.07)}
html[data-theme="dark"] .bd-card,html[data-theme="dark"] .bd-stat{box-shadow:0 1px 2px rgba(0,0,0,.25),0 8px 24px rgba(0,0,0,.3)}
.bd-modal{box-shadow:0 24px 64px rgba(10,18,14,.22),0 4px 16px rgba(10,18,14,.12)}
html[data-theme="dark"] .bd-modal{box-shadow:0 24px 64px rgba(0,0,0,.5),0 4px 16px rgba(0,0,0,.35)}

/* ---- 8. Typography readability: airier tables, stronger small labels ---- */
.bd-table td,.bd-table th{line-height:1.55}
.bd-table{font-size:13.5px}
.bd-statussub{font-size:11.5px;line-height:1.5}
.bd-muted-sm{line-height:1.55}
.bd-noteinput{font-size:13px;line-height:1.5;padding:6px 10px}
.bd-noteinput::placeholder{color:var(--bd-muted);opacity:.85}

/* ---- 9. Hover states: lift + readable text, never a white flash ---- */
.bd-campaign--link:hover,.bd-table__rowlink:hover{box-shadow:inset 0 0 0 1px var(--bd-border)}
.creator-directory__row:hover{box-shadow:inset 3px 0 0 var(--bd-purple)}
tr.bd-rowexp:hover td{background:var(--bd-line-soft)}

/* ---- 10. Focus visibility in both themes ---- */
:focus-visible{outline:2px solid var(--bd-purple);outline-offset:2px;border-radius:4px}
html[data-theme="dark"] :focus-visible{outline-color:#b59ae8}

/* ---- 11. Scrollbar polish (webkit) ---- */
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:#c3cbc6;border-radius:6px;border:2px solid transparent;background-clip:content-box}
::-webkit-scrollbar-thumb:hover{background:#a9b3ad;background-clip:content-box;border:2px solid transparent}
html[data-theme="dark"] ::-webkit-scrollbar-thumb{background:#3a4a43;background-clip:content-box;border:2px solid transparent}
html[data-theme="dark"] ::-webkit-scrollbar-thumb:hover{background:#4a5c53;background-clip:content-box;border:2px solid transparent}
::-webkit-scrollbar-track{background:transparent}

.bd-table tbody td.num{font-weight:600;color:var(--bd-ink)}

/* Creator row ⋯ menu (Overview > Creators > Statistics) */
.cd-rowmenu-btn{font-size:18px;line-height:1;letter-spacing:1px;color:var(--bd-ink);font-weight:700}
.cd-rowmenu-pop{position:absolute;right:6px;top:calc(100% - 6px);min-width:168px;background:var(--bd-card);border:1px solid var(--bd-border);border-radius:10px;box-shadow:0 10px 28px rgba(10,25,18,.22);padding:6px;z-index:60;display:flex;flex-direction:column}
.cd-rowmenu-pop button{border:0;background:transparent;text-align:left;padding:9px 12px;font-size:13px;font-weight:600;color:var(--bd-ink);border-radius:7px;cursor:pointer;font-family:var(--font-body)}
.cd-rowmenu-pop button:hover{background:var(--bd-hover)}
.cd-rowmenu-pop button.danger{color:#c0392b}
.cd-rowmenu-pop button.danger:hover{background:#fdeeee}
[data-theme="dark"] .cd-rowmenu-pop button.danger:hover{background:#3a1f1c}
/* Campaign list row ⋯ menu (Campaigns page): the lifecycle actions —
   Mark complete / Reopen. Same popover shell as the creator row menu,
   anchored to the row itself. */
.bd-campaign{position:relative}
.bd-campmenu-btn{border:1px solid transparent;background:transparent;color:var(--bd-muted);border-radius:8px;width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;margin-right:2px;flex:none}
.bd-campmenu-btn:hover{background:var(--bd-hover);color:var(--bd-ink)}
.bd-campmenu-btn .bd-ic{width:17px;height:17px}
.bd-campmenu-pop{position:absolute;right:10px;top:calc(100% - 8px);min-width:168px;background:var(--bd-card);border:1px solid var(--bd-border);border-radius:10px;box-shadow:0 10px 28px rgba(10,25,18,.22);padding:6px;z-index:60;display:flex;flex-direction:column}
.bd-campmenu-pop button{border:0;background:transparent;text-align:left;padding:9px 12px;font-size:13px;font-weight:600;color:var(--bd-ink);border-radius:7px;cursor:pointer;font-family:var(--font-body)}
.bd-campmenu-pop button:hover{background:var(--bd-hover)}
/* Activity Log upload boxes (Max, 2026-10-24): two separate compact
   drop boxes per row — Receipt and Payment error — replacing the
   single zone + kind chooser. The pair sits on one line in the row's
   action area; each box is its own dropzone + click target, at least
   32px tall, labels terse and allowed to wrap inside their box so
   the narrow desktop action column never truncates them away. */
.bd-actboxes{display:flex;gap:6px;margin:6px -8px 0;align-items:stretch}
.bd-actboxes .bd-actbox{flex:0.92 1 0;min-width:0}
.bd-actboxes .bd-actbox--error{flex:1.08 1 0}
/* Campaign Overview creator rows: two-line handle cell — line 1 handle opens
   the creator/account popup, line 2 Bloom Profile opens the profile popup. */
.cd-handle-link{cursor:pointer;display:block}
a.cd-handle-link{color:inherit;text-decoration:none}
.cd-handle-link:hover{color:var(--bd-purple-deep);text-decoration:underline}
.cd-profile-link{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--bd-muted-strong);cursor:pointer;margin-top:2px;width:fit-content}
.cd-profile-link__ic{display:inline-flex}
.cd-profile-link__ic svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:1.8}
.cd-profile-link:hover{color:var(--bd-purple-deep);text-decoration:underline}

/* Row flash when jumping to an existing creator (duplicate-handle flow). */
@keyframes bd-flash { 0%,100% { background: transparent; } 30%,70% { background: color-mix(in srgb, var(--bd-purple) 22%, transparent); } }
tr.bd-flash { animation: bd-flash 1.8s ease; }

/* ============================================================
   UI spacing audit (2026-10-09): rebalance cramped tables.
   Numeric columns get room to breathe, over-wide handle columns
   are capped, and mid-value text wrapping is stopped.
   ============================================================ */

/* ---- Campaign Overview: creator Statistics table (#cd-creators) ----
   13 cols: chevron | Handle | Niche | Status | Paid Date | Price |
   Videos | Completion | Views | Likes | Comments | Notes | menu.
   ONE sizing system: the <colgroup> in the markup owns every fixed
   column and Handle takes the remainder. The table min-width is the
   fixed columns' sum plus a 204px floor for Handle, so when the card
   is narrower than that the wrap scrolls instead of crushing Handle
   toward 0 — at 0 the identity cell's overflow:hidden text spans
   vanish and the nowrap HANDLE header + status select paint across
   the cell (the bug this replaces). The Oct-9 nth-child width rules
   that used to sit here described the old 10-column table; once the
   Notes column was added they targeted the wrong columns, so they
   are gone — do not re-add per-cell widths for this table. */
#cd-creators{table-layout:fixed;width:100%;min-width:1444px}
/* "$50 / video" stays on one line */
#cd-creators td:nth-child(6) .bd-muted-sm{white-space:nowrap}
/* Completion "2 of 2 · 100%" stays on one line */
#cd-creators td:nth-child(8)>div:first-child{white-space:nowrap}
/* Handle cell: two lines only (handle + Bloom Profile) — the old in-cell
   note input is gone; notes live in the per-row thread (Notes column).
   The generic .bd-cellmain span rule (display:block) outranks
   .cd-profile-link's own flex, which stacked its icon on a line of its
   own and inflated every row — pin the link back to one inline line. */
#cd-creators td:nth-child(2) .bd-cellmain{min-width:0}
#cd-creators td:nth-child(2) .bd-cellmain>span:last-child{min-width:0;flex:1;overflow:hidden}
#cd-creators .cd-profile-link,#cd-creators-payout .cd-profile-link{display:inline-flex;align-items:center}
#cd-creators .cd-profile-link__ic,#cd-creators-payout .cd-profile-link__ic{display:inline-flex}
/* Niche column (Statistics): one line, ellipsis — the colgroup width is
   the cap and the full text rides the cell's title. The booking's niche
   also rides the handle cell's sub-line as a segment (.cd-niche-inline
   inside .cd-subline): hidden here, where the column shows it, and on
   the Payout table; the ≤900px block at the end of this file turns it
   on for the Statistics phone card, whose layout drops the column. */
#cd-creators td.cd-niche-cell{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* Paid Date column: the day the Head Admin marked the booking paid in
   the Activity Log (payload paid_date), one line; "—" until then. Like
   the niche, it leaves the phone card's layout (see the ≤900px block
   at the end of this file) and rides the completion line there as a
   .cd-paid-inline segment — hidden wherever the column shows it. */
#cd-creators td.cd-paiddate-cell{white-space:nowrap}
#cd-creators .cd-paid-inline{display:none}
#cd-creators .cd-subline,#cd-creators-payout .cd-subline{display:flex;align-items:center;min-width:0}
#cd-creators .cd-niche-inline,#cd-creators-payout .cd-niche-inline{display:none}
/* Compact rows + column floors so Status never truncates its longest
   label ("Fully Paid & Posted") and Completion keeps a consistent bar.
   The app's 1.55 body line-height and the price sub-line's 10px top
   margin are what made rows balloon — both are tightened in this table
   only, which roughly halves the pre-cleanup row height. */
#cd-creators>tbody>tr:not(.bd-rowexpand)>td{padding-top:8px;padding-bottom:8px;line-height:1.3}
#cd-creators td .bd-muted-sm{margin:2px 0 0}
/* Status/Completion floors live in the colgroup + table min-width
   above; per-cell min-widths fight fixed table layout and are
   deliberately absent here. */
/* Compact status pill on Statistics rows (Max, 2026-10-22: the dropdown
   read oversized): content-sized instead of stretched across the Status
   column, 30px tall, slimmer chevron spacing. Scoped to #cd-creators —
   the Campaigns-list, Team and Payout-view selects keep their size. */
#cd-creators .bd-selwrap{width:auto}
#cd-creators .bd-statusselect{width:auto;height:30px;font-size:12.5px;padding:0 23px 0 9px}
#cd-creators .bd-selchev{right:7px}
#cd-creators .bd-selchev svg{width:12px;height:12px}
/* Completion: fixed-width block, right-aligned in its .num cell; the bar
   wears the campaign list's greens (brand green, brighter at 100%+) */
.cd-completion{display:flex;flex-direction:column;width:144px;margin-left:auto}
.cd-completion__line{white-space:nowrap}
.cd-completion .bd-progress{margin-top:6px;min-width:0;width:100%}
/* Posted-videos block inside a creator row's expansion (staff Statistics
   and the client portal's Creators table share the renderer) */
.cd-posts-head{display:flex;align-items:baseline;gap:8px;margin-bottom:10px}
.cd-posts-head__label{font-size:12px;font-weight:700;letter-spacing:.8px;text-transform:uppercase;color:var(--bd-muted-strong)}
/* Portal creator cell's accounts line: the staff profile line's look,
   without the staff-only profile popup behind it */
.cp-audio{display:flex;align-items:center;gap:8px;margin:2px 0 14px;font-size:13.5px;color:var(--bd-muted-strong);min-width:0}
.cp-audio svg{width:17px;height:17px;flex:none;color:var(--bd-green)}
.cp-audio a{color:var(--bd-purple-deep);font-weight:600}
.cpd-postsbtn{display:inline-flex;align-items:center;gap:5px;background:none;border:0;padding:2px 0;margin-top:2px;font-size:12px;font-weight:600;color:var(--bd-muted-strong);cursor:pointer}
.cpd-postsbtn:hover{color:var(--bd-purple-deep)}
.cpd-postsbtn__chev{font-size:10px}
.cf-months{table-layout:fixed;min-width:0}
@media(min-width:901px){.cf-months td{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}
/* Status select with a tone-coloured custom chevron: the wrap carries the
   same tone classes as the select, so --tone-ink colours the chevron;
   retoneAssignSelect mirrors in-place tone changes onto the wrap */
.bd-selwrap{position:relative;display:inline-block;max-width:100%;width:100%}
.bd-selwrap>select{appearance:none;-webkit-appearance:none;padding-right:28px}
.bd-selchev{position:absolute;right:9px;top:50%;transform:translateY(-50%);display:flex;pointer-events:none;color:var(--tone-ink,#8a938e)}
.bd-selchev svg{width:14px;height:14px}
/* Notes affordance per row: quiet when empty, highlighted with a count
   once the thread has entries */
.cd-notes-btn{display:inline-flex;align-items:center;gap:6px;border:1px solid transparent;background:transparent;color:var(--bd-muted-strong);font:600 12.5px var(--font-ui);padding:6px 9px;border-radius:8px;cursor:pointer;white-space:nowrap}
.cd-notes-btn svg{width:15px;height:15px}
.cd-notes-btn:hover{background:var(--bd-hover);color:var(--bd-ink)}
.cd-notes-btn--has{color:var(--bd-purple-deep);border-color:var(--bd-purple-pale);background:var(--bd-purple-soft)}
.cd-notes-count{background:var(--bd-purple);color:#fff;border-radius:9px;font-size:11px;font-weight:700;padding:1px 7px}
/* Attention flag per row: a quiet outline flag until raised, then a
   filled red flag (the attention tone) naming its flagger on hover.
   Sits in the row's action cluster beside the ⋯ menu. */
.cd-rowacts{display:inline-flex;align-items:center;gap:6px}
.cd-attn-btn{width:32px;height:32px;border-radius:8px;border:1px solid var(--bd-border);background:var(--bd-card);color:var(--bd-muted-strong);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;flex:none}
.cd-attn-btn svg{width:15px;height:15px}
.cd-attn-btn:hover{border-color:#c0392b;color:#c0392b}
.cd-attn-btn--on{background:#fdeeee;border-color:#e5b4ae;color:#c0392b}
.cd-attn-btn--on svg{fill:#c0392b}
.cd-attn-btn--on:hover{background:#fdeeee;color:#c0392b}
.cd-attn-btn:disabled{opacity:.55;cursor:wait}
[data-theme="dark"] .cd-attn-btn--on{background:#3a1f1c;border-color:#6e352f;color:#f08a80}
[data-theme="dark"] .cd-attn-btn--on svg{fill:#f08a80}
/* Notes thread panel (expand row under a creator row) */
.cd-thread{max-width:760px}
.cd-thread__list{display:flex;flex-direction:column;gap:10px;margin-bottom:12px}
.cd-thread__list:empty{margin-bottom:0}
.cd-thread__empty{margin:0}
.cd-note{background:var(--bd-card);border:1px solid var(--bd-border);border-radius:10px;padding:9px 12px}
.cd-note--legacy{border-style:dashed}
.cd-note__meta{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--bd-muted)}
.cd-note__meta strong{color:var(--bd-ink);font-size:12.5px}
.cd-note__del{margin-left:auto;border:0;background:transparent;color:var(--bd-muted);cursor:pointer;display:flex;padding:3px;border-radius:6px}
.cd-note__del:hover{color:#c0392b;background:var(--bd-hover)}
.cd-note__del svg{width:13px;height:13px}
.cd-note__body{margin:4px 0 0;font-size:13.5px;line-height:1.45;color:var(--bd-ink);white-space:pre-wrap;overflow-wrap:anywhere}
.cd-thread__form{display:flex;gap:10px;align-items:flex-start}
.cd-thread__input{flex:1;resize:vertical;min-height:38px}
.cd-thread__post{flex:none}

/* ---- Campaign Overview: creator Payout view table (#cd-creators-payout) ----
   7 cols: Creator | Price | Videos | Payout | Payment | Receipt | Status */
#cd-creators-payout{table-layout:fixed;width:100%}
#cd-creators-payout th:nth-child(1),#cd-creators-payout td:nth-child(1){width:26%}
#cd-creators-payout th:nth-child(2),#cd-creators-payout td:nth-child(2){width:88px}
#cd-creators-payout th:nth-child(3),#cd-creators-payout td:nth-child(3){width:76px}
#cd-creators-payout th:nth-child(4),#cd-creators-payout td:nth-child(4){width:96px}
#cd-creators-payout th:nth-child(5),#cd-creators-payout td:nth-child(5){width:22%}
#cd-creators-payout th:nth-child(6),#cd-creators-payout td:nth-child(6){width:118px}
#cd-creators-payout th:nth-child(7),#cd-creators-payout td:nth-child(7){width:178px}
/* PayPal email: allow wrap but break long addresses cleanly */
#cd-creators-payout td:nth-child(5){overflow-wrap:anywhere}
/* Creator cell: keep inside column */
#cd-creators-payout td:nth-child(1) .bd-cellmain{min-width:0}
#cd-creators-payout td:nth-child(1) .bd-cellmain>span:last-child{min-width:0;overflow:hidden}

/* ---- Add Creators tab table (#cd-addtable) ----
   9 cols (columns rework, Max 2026-10-28): checkbox | Handle | Niche |
   POC | Price | Videos | Campaigns | Total views | Profile. Handle is
   the only unsized column and takes the slack; every fact gets its own
   track so the columns scan. The Profile column is sized for the
   Profile button + the "✓ Added" tag side by side, with real right
   padding, instead of the old ballooning action cell. */
#cd-addtable{table-layout:fixed;width:100%;min-width:1060px}
#cd-addtable th:nth-child(1),#cd-addtable td:nth-child(1){width:36px}
#cd-addtable th:nth-child(3),#cd-addtable td:nth-child(3){width:118px}
#cd-addtable th:nth-child(4),#cd-addtable td:nth-child(4){width:136px}
#cd-addtable th:nth-child(5),#cd-addtable td:nth-child(5){width:78px}
#cd-addtable th:nth-child(6),#cd-addtable td:nth-child(6){width:68px}
#cd-addtable th:nth-child(7),#cd-addtable td:nth-child(7){width:150px}
#cd-addtable th:nth-child(8),#cd-addtable td:nth-child(8){width:124px}
#cd-addtable th:nth-child(9),#cd-addtable td:nth-child(9){width:196px}
#cd-addtable td:nth-child(2) .bd-cellmain{min-width:0}
#cd-addtable td:nth-child(2) .bd-cellmain>span:last-child{min-width:0;overflow:hidden}
#cd-addtable td:nth-child(3){white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#cd-addtable td:nth-child(4){white-space:nowrap;overflow:hidden}
#cd-addtable td.cd-profcell{text-align:left;padding-right:22px}
.cd-addedtag{font-size:12.5px;font-weight:600;color:var(--bd-green-text);white-space:nowrap}
/* Add Creators discoverability (Max, 2026-10-27, round 3): the campaigns
   control is the row's main action, so on EVERY row (booked or not) it
   is a full labelled pill button — "6 campaigns ▾" — accent-tinted at
   rest (purple-soft bg, purple-pale border, purple text) so it reads as
   a control in a still screenshot, no hover needed; open goes solid
   purple with the chevron rotated. (Round 2's badge-sized bare count in
   grey read as unchanged; booked rows' plain number read unfinished.) */
.cd-campcount{display:inline-flex;align-items:center;gap:6px;min-height:29px;padding:3px 11px;border-radius:999px;border:1px solid var(--bd-purple-pale);background:var(--bd-purple-soft);font:inherit;font-size:12.5px;font-weight:600;color:var(--bd-purple-deep);cursor:pointer;line-height:1.3;white-space:nowrap}
html[data-theme="dark"] .cd-campcount{color:#c9b6f7}
html[data-theme="dark"] .cd-campcount:hover,html[data-theme="dark"] .cd-campcount--open{color:#fff}
.cd-campcount:hover{border-color:var(--bd-purple);background:var(--bd-purple);color:#fff}
.cd-campcount:focus-visible{outline:2px solid var(--bd-purple);outline-offset:2px}
.cd-campcount--open{border-color:var(--bd-purple);background:var(--bd-purple);color:#fff}
.cd-campcount__chev{display:inline-block;font-size:10px;line-height:1;transition:transform .15s ease}
.cd-campcount--open .cd-campcount__chev{transform:rotate(180deg)}
/* POC state on Add Creators rows is its own chip in its own column
   (columns rework, 2026-10-28): a set POC keeps the shared
   .bd-chip--poc; no POC set shows a muted OUTLINE chip "No POC" (same
   chip dimensions) — never plain text (chip-or-nothing stays on other
   surfaces). */
#cd-addtable .cd-nopoc{display:inline-flex;align-items:center;border:1px solid var(--bd-border);border-radius:999px;background:transparent;padding:2px 8px;font:600 10.5px var(--font-ui);color:var(--bd-muted);white-space:nowrap}
/* Profile button: the platform's bordered-button treatment (border +
   card bg + purple ink, purple hover) instead of the flat borderless
   grey the bare .bd-btn rendered as. */
#cd-addtable .cd-profbtn{border:1px solid var(--bd-purple-pale);background:var(--bd-card);color:var(--bd-purple-deep)}
#cd-addtable .cd-profbtn:hover{border-color:var(--bd-purple);background:var(--bd-purple-soft)}
html[data-theme="dark"] #cd-addtable .cd-profbtn{color:#c9b6f7}

/* ---- Add Creators compact pass (Max, 2026-10-27): "this is better but
   we can make this more compacted and make it look more presentable."
   Presentation only — rows tighten from ~90px to ~58px: row padding
   slims, the campaigns pill and Profile button drop a size, and the
   filter bar loses a notch of vertical padding. Nothing is removed;
   the expansion panel and quick-add flow are untouched. (The identity
   cell's contents moved on in the 2026-10-28 columns rework — see the
   #cd-addtable block above.) */
#cd-addtable thead th{padding-top:9px;padding-bottom:9px}
#cd-addtable tbody td{padding-top:8px;padding-bottom:8px}
#cd-addtable .cd-idmain{display:flex;align-items:center;gap:8px;margin-top:0;min-width:0}
#cd-addtable .cd-idmain strong{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
#cd-addtable .cd-idsub{display:block;margin-top:1px;font-size:12px;line-height:1.35;color:var(--bd-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#cd-addtable .cd-profbtn{min-height:28px;height:28px;padding:3px 10px;font-size:12px;border-radius:8px;gap:6px}
#cd-addtable .cd-profbtn svg{width:14px;height:14px}
#cd-addcard .bd-filterbar--addcreators{padding-top:9px;padding-bottom:9px}

/* ---- Add Creators evenness pass (Max, 2026-10-28): "make sure
   everything is even." Measured defects on the -51 grid: rows with an
   account-name sub-line stood 57.9px against 53px plain rows and the
   handle rode 6.2px higher in them; the Profile button sat ~9px above
   the row centreline (its td was display:flex, which shrink-wraps the
   cell to 36px at the row's top — the button now lives in an inline
   .cd-profwrap inside a normal middle-aligned cell); campaign pills
   varied 103.8–117.7px wide with their labels; the TOTAL VIEWS header
   overflowed its 102px column and crowded PROFILE (the column is
   124px now, in the widths block above, so the label fits and
   right-aligns over its values with the standard 28px header gap).
   The table also gains a 1060px min-width floor (the #cd-creatorlist
   pattern): below that the wrap scrolls instead of the fixed layout
   crushing the unsized Handle column to nothing, which is what it
   did at 1280px. Desktop only — the ≤900px cards keep their own
   rhythm. */
@media (min-width:901px){
  /* One uniform row height: the tallest possible content is the
     38px identity block below, so 55px (38 + 8+8 padding + border)
     is a floor every row lands on exactly. */
  #cd-addtable tbody tr[data-cid]>td{height:55px}
  /* Identity block is a fixed 38px two-line stage, top-anchored:
     line 1 (handle, 20px) + optional sub-line (2 + 16px). With or
     without the sub-line the handle occupies the same 20px at the
     same offset, and the avatar centres against the same block. */
  #cd-addtable .bd-cellmain>span:last-child{display:flex;flex-direction:column;justify-content:flex-start;height:38px}
  #cd-addtable .cd-idmain{height:20px;line-height:20px;flex:none}
  #cd-addtable .cd-idsub{margin-top:2px;height:16px;line-height:16px;flex:none}
  /* Profile cell contents: one inline flex line inside the normal
     table cell, so the cell's vertical-align:middle centres the
     button on the row centreline; the Added tag keeps its 10px gap. */
  #cd-addtable .cd-profwrap{display:inline-flex;align-items:center;gap:10px;vertical-align:middle}
  /* Campaign pill: one fixed box on every row, booked or not —
     the label centres inside it instead of sizing the pill. */
  #cd-addtable .cd-campcount{width:120px;height:29px;justify-content:center}
  /* Digits line up on one axis down the numeric columns. */
  #cd-addtable td.num{font-variant-numeric:tabular-nums}
  /* Set-POC and No-POC chips share the middle alignment (they were
     0.7px apart: the set chip had vertical-align:middle, the
     outline chip sat on the baseline). */
  #cd-addtable .cd-nopoc{vertical-align:middle}
  #cd-addtable .bd-chip--poc{vertical-align:middle}
}

/* ---- Creator List table (#cd-creatorlist) ----
   Cols: [checkbox] | Handle (identity: avatar + handle + platform/POC
   chips) | Niche | Campaigns | Views | Progress | [\u22ef actions].
   Compact + even pass (Max, 2026-10-28), mirroring the Add Creators
   table (#cd-addtable -49/-51) so the two pages read as one system:
   ONE fixed grid \u2014 every data column pinned to its content, Handle
   flexes and ellipsizes (full handle in the title) \u2014 the same row
   padding scale (th 9px / td 8px) and one uniform ~53px row height,
   numeric columns right-aligned on a shared tabular axis with their
   headers aligned the same way, and the identity controls (checkbox,
   avatar, handle, \u22ef) on one centreline with uniform geometry. The old
   sizing pinned columns for the 5-col no-checkbox layout only, so the
   admin grid (checkbox + actions = 7 cols) inherited shifted widths;
   the two grids are now pinned separately (.cl-admin = the admin one).
   min-width:0 \u2014 below the comfortable width Handle absorbs the squeeze
   instead of the table scrolling sideways. */
#cd-creatorlist{table-layout:fixed;width:100%;min-width:0}
#cd-creatorlist thead th{white-space:nowrap;padding-top:9px;padding-bottom:9px}
#cd-creatorlist tbody td{padding-top:8px;padding-bottom:8px}
#cd-creatorlist th.num,#cd-creatorlist td.num{font-variant-numeric:tabular-nums}
/* Base grid (5 cols, no checkbox/actions): Handle flexes. */
#cd-creatorlist:not(.cl-admin) th:nth-child(2),#cd-creatorlist:not(.cl-admin) td:nth-child(2){width:150px}
#cd-creatorlist:not(.cl-admin) th:nth-child(3),#cd-creatorlist:not(.cl-admin) td:nth-child(3){width:112px}
#cd-creatorlist:not(.cl-admin) th:nth-child(4),#cd-creatorlist:not(.cl-admin) td:nth-child(4){width:120px}
#cd-creatorlist:not(.cl-admin) th:nth-child(5),#cd-creatorlist:not(.cl-admin) td:nth-child(5){width:216px}
/* Admin grid (7 cols): Niche/Campaigns/Views/Progress shift one track. */
#cd-creatorlist.cl-admin th:nth-child(3),#cd-creatorlist.cl-admin td:nth-child(3){width:150px}
#cd-creatorlist.cl-admin th:nth-child(4),#cd-creatorlist.cl-admin td:nth-child(4){width:112px}
#cd-creatorlist.cl-admin th:nth-child(5),#cd-creatorlist.cl-admin td:nth-child(5){width:120px}
#cd-creatorlist.cl-admin th:nth-child(6),#cd-creatorlist.cl-admin td:nth-child(6){width:216px}
#cd-creatorlist.cl-admin th:nth-child(7),#cd-creatorlist.cl-admin td:nth-child(7){width:52px}
/* Progress reads left-aligned in its wide track on both grids (the
   generic last-cell right-align only ever made sense for actions). */
#cd-creatorlist:not(.cl-admin) td:nth-child(5),#cd-creatorlist.cl-admin td:nth-child(6){text-align:left}
/* Uniform control geometry at the compact rhythm: 36px avatar (the
   Add Creators row's effective content height), 28px \u22ef button (the
   .cd-profbtn height), checkbox centred on the identity line. */
#cd-creatorlist .bd-avatar{width:36px;height:36px;font-size:12.5px}
#cd-creatorlist .bd-rowmenu{width:28px;height:28px;border-radius:8px}
#cd-creatorlist .bd-rowmenu svg{width:14px;height:14px}
/* Identity cell: avatar + handle + pills on one vertically-centred line;
   the text side ellipsizes (full handle in the title) before the avatar
   or pills can be squeezed. */
.cl-id{display:flex;align-items:center;gap:11px;min-width:0}
.cl-id__txt{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* Progress cell: "% \u00b7 X of Y" on one line over the slim brand-green bar
   (the Campaigns list .bd-campprog treatment). */
.cl-prog{max-width:240px;min-width:0}
.cl-prog__line{display:flex;align-items:baseline;gap:8px;white-space:nowrap}
.cl-prog__line strong{font-size:13.5px}
.cl-prog__frac{font-size:11.5px;color:var(--bd-muted);white-space:nowrap}
#cd-creatorlist .bd-progress--list{margin-top:5px}

/* ---- Bloom Profiles table (#prof-table) ----
   9 cols: chevron | ID | Name | Platforms | Accounts | Views 30d |
   Active | All-time campaigns | All-time views.
   Numeric columns are sized to fit their full header labels (the old
   92–120px widths were narrower than the nowrap uppercase headers, so
   header text painted across neighbouring cells). Name flexes; below
   the min-width the wrap scrolls instead of crushing the columns, and
   headers wrap inside their own cell rather than overlapping. */
#prof-table{table-layout:fixed;width:100%;min-width:1140px}
#prof-table thead th{white-space:normal;line-height:1.35}
#prof-table th:nth-child(1),#prof-table td:nth-child(1){width:32px}
#prof-table th:nth-child(2),#prof-table td:nth-child(2){width:64px}
#prof-table th:nth-child(4),#prof-table td:nth-child(4){width:130px}
#prof-table th:nth-child(5),#prof-table td:nth-child(5){width:108px}
#prof-table th:nth-child(6),#prof-table td:nth-child(6){width:132px}
#prof-table th:nth-child(7),#prof-table td:nth-child(7){width:176px}
#prof-table th:nth-child(8),#prof-table td:nth-child(8){width:210px}
#prof-table th:nth-child(9),#prof-table td:nth-child(9){width:180px}

/* ---- Clients table (#clients-table) ----
   8 cols: Client | Contact | Portal access | Views·month | Active |
   Total | Revenue | Actions.
   One sizing system (same pattern as #prof-table / .bd-table--leads):
   fixed layout, every data column pinned to its content, Client
   flexes. The table fits its card at desktop widths with no sideways
   scroll (cohesion fix F2: the old 9-column layout floored at a
   1320px min-width and pushed Actions off-canvas; the Invoice email
   column moved to the client profile, where it also lives in the
   edit form; min-width:0 also lifts the legacy bare-table 940px
   floor for this table only). Every value is a single line on one
   shared baseline.
   Long contact values ellipsize with the full text in the title. */
#clients-table{table-layout:fixed;width:100%;min-width:0}
#clients-table thead th{white-space:normal;line-height:1.35}
#clients-table thead th,#clients-table tbody td{padding-left:11px;padding-right:11px}
#clients-table th:nth-child(2),#clients-table td:nth-child(2){width:164px}
#clients-table th:nth-child(3),#clients-table td:nth-child(3){width:110px}
#clients-table th:nth-child(4),#clients-table td:nth-child(4){width:96px}
#clients-table th:nth-child(5),#clients-table td:nth-child(5){width:62px}
#clients-table th:nth-child(6),#clients-table td:nth-child(6){width:62px}
#clients-table th:nth-child(7),#clients-table td:nth-child(7){width:96px}
#clients-table th:nth-child(8),#clients-table td:nth-child(8){width:264px}
#clients-table th:last-child{text-align:right}
#clients-table tbody td{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#clients-table td .bd-rowactions{flex-wrap:nowrap}
.cl-footnote{margin-top:10px}

/* ---- Campaign Payouts tab table (#cd-payouts-roster) ----
   6 cols: Creator | Price | Videos | PayPal | Amount | Status */
#cd-payouts-roster{table-layout:fixed;width:100%}
#cd-payouts-roster th:nth-child(1),#cd-payouts-roster td:nth-child(1){width:24%}
#cd-payouts-roster th:nth-child(2),#cd-payouts-roster td:nth-child(2){width:96px}
#cd-payouts-roster th:nth-child(3),#cd-payouts-roster td:nth-child(3){width:80px}
#cd-payouts-roster th:nth-child(4),#cd-payouts-roster td:nth-child(4){width:24%}
#cd-payouts-roster th:nth-child(5),#cd-payouts-roster td:nth-child(5){width:104px}
#cd-payouts-roster th:nth-child(6),#cd-payouts-roster td:nth-child(6){width:150px}
#cd-payouts-roster td:nth-child(4){overflow-wrap:anywhere}

/* Bulk-add modal rows: a touch more breathing room */
.bd-bulkrow{gap:14px;padding:12px 16px}
.bd-bulkrow .bd-field{margin-bottom:0}
.bd-bulklist{display:flex;flex-direction:column;gap:10px}

/* ---- Campaign documents browser (Financials › Invoices & Receipts) ----
   Two-pane layout: searchable/filterable campaign list + document detail.
   Built for scale (30+ campaigns/month) — no giant dropdown. */
.bd-docbrowser{display:grid;grid-template-columns:340px minmax(0,1fr);gap:18px;align-items:start}
.bd-docbrowser__list{display:flex;flex-direction:column;gap:10px;min-width:0}
.bd-docbrowser__tools{display:flex;flex-direction:column;gap:10px}
.bd-docbrowser__tools .bd-search{min-width:0;width:100%}
.bd-docbrowser__tools .bd-search input{width:100%}
.bd-docbrowser__tools select#findoc-clients{width:100%}
.bd-docbrowser__tools select#findoc-invfilter{width:100%}
.bd-docbrowser__rows{display:flex;flex-direction:column;gap:6px}
.bd-docrow{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;text-align:left;background:var(--bd-card);border:1px solid var(--bd-border);border-radius:10px;padding:10px 12px;cursor:pointer;min-width:0}
.bd-docrow:hover{border-color:var(--bd-purple)}
.bd-docrow--on{border-color:var(--bd-purple);background:var(--bd-purple-soft)}
.bd-docrow__main{display:flex;flex-direction:column;gap:4px;min-width:0;flex:1}
.bd-docrow__main strong{font-size:13.5px;font-weight:600;color:var(--bd-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bd-docrow__meta{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--bd-muted)}
.bd-docrow__none{font-size:11.5px;color:var(--bd-muted);flex:none}
/* Unassigned invoice file rows: roomier, note on its own truncated line. */
/* ---- Unassigned invoice file cards: stacked, clean file-list layout ---- */
.bd-filerow{background:var(--bd-card);border:1px solid var(--bd-border);border-radius:10px;padding:14px 16px;display:flex;flex-direction:column;gap:6px;min-width:0}
.bd-filerow:hover{border-color:var(--bd-purple)}
.bd-filerow__name{font-size:14px;font-weight:600;color:var(--bd-ink);line-height:1.35;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.bd-filerow__meta{font-size:12px;color:var(--bd-muted)}
.bd-filerow__note{font-size:11.5px;color:var(--bd-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-style:italic}
.bd-filerow__actions{display:flex;gap:8px;margin-top:6px;flex-wrap:wrap}
.bd-docrow__note{display:block;font-size:11.5px;color:var(--bd-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;margin-top:2px}
.bd-docrow__actions{display:flex;gap:6px;flex:none;align-items:center}
.bd-camp-row__note{max-width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bd-docbrowser__detail{min-width:0}
@media (max-width:900px){
  .bd-docbrowser{grid-template-columns:1fr}
}
.bd-platbadge{display:inline-block;font-size:10.5px;font-weight:700;letter-spacing:.4px;padding:3px 9px;border-radius:20px;white-space:nowrap}
.bd-platbadge--tiktok{background:#eef0ee;color:#3c4742}
.bd-platbadge--instagram{background:#fdeef3;color:#e5486f}
.bd-platbadge--youtube{background:#fdeeee;color:#c0392b}
.bd-platbadge--story{background:#f0eafc;color:#5b21b6}
[data-theme="dark"] .bd-platbadge--story{background:#5b21b626;color:#c4a7f5}
/* Story proof thumbnails in the posts table */
.cd-proofcell{display:inline-flex;align-items:center;gap:8px}
.cd-proof-thumb{width:34px;height:44px;object-fit:cover;border-radius:6px;border:1px solid var(--bd-border);vertical-align:middle}
[data-theme="dark"] .bd-platbadge--tiktok{background:#ffffff14;color:#dcebe3}
[data-theme="dark"] .bd-platbadge--instagram{background:#e5486f26;color:#f08a9e}
[data-theme="dark"] .bd-platbadge--youtube{background:#c0392b26;color:#f08a80}
/* Creator home (CPV): browse grid + cover art image inside the landing cover tile */
.bd-creator-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
@media(max-width:1100px){.bd-creator-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:700px){.bd-creator-grid{grid-template-columns:1fr}}
.bd-creatorcover{width:100%;height:100%;object-fit:cover;display:block}

/* ================================================================
   MOBILE APP LAYER (final pass — appended last so it wins ties over
   the earlier review passes). Everything here is inside mobile
   breakpoints or targets mobile-only chrome (.bd-tabbar): desktop
   rendering above 900px is unchanged.
   ================================================================ */
@media(min-width:901px){.bd-tabbar{display:none!important}}
@media(max-width:900px){
  html,body{overflow-x:hidden}
  @supports (overflow:clip){html,body{overflow-x:clip}}
  html{-webkit-text-size-adjust:100%}
  .bd-main,.bd-content,.bd-card,.bd-card__head,.bd-topbar{min-width:0}
  img,video,iframe{max-width:100%}
  .bd-main canvas,.bd-main svg{max-width:100%}
  .bd-chart canvas{max-width:100%!important;height:auto!important}
  /* room for the fixed tab bar at the end of every scroll surface */
  .bd-main{padding-bottom:calc(88px + env(safe-area-inset-bottom))}
  .bd-lead-overlay{padding-bottom:calc(96px + env(safe-area-inset-bottom))}
  .campaign-workspace{padding-bottom:calc(96px + env(safe-area-inset-bottom))}
  .bd-toast{bottom:calc(88px + env(safe-area-inset-bottom))}
  /* ---- bottom tab bar ---- */
  .bd-tabbar{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:35;gap:2px;padding:6px 6px calc(6px + env(safe-area-inset-bottom));background:var(--bd-card);border-top:1px solid var(--bd-border);box-shadow:0 -8px 28px rgba(9,36,28,.10)}
  .bd-tabbar__item{flex:1 1 0;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;min-height:52px;padding:6px 2px;border:0;border-radius:12px;background:transparent;color:var(--bd-muted-strong);font:600 10px/1.15 var(--font-ui);letter-spacing:.2px;cursor:pointer;-webkit-tap-highlight-color:transparent}
  .bd-tabbar__item svg{width:22px;height:22px;flex:none}
  .bd-tabbar__item span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .bd-tabbar__item--active{background:var(--bd-green-soft);color:var(--bd-sidebar)}
  html[data-theme="dark"] .bd-tabbar__item--active{color:var(--bd-ink)}
  .bd-tabbar__item:active{background:var(--bd-green-soft)}
  /* ---- touch targets: 44px floor for primary controls ---- */
  .bd-btn,.bd-ghostbtn,.bd-pillbtn,.bd-filterpill,.bd-primarybtn,.portal-btn{min-height:44px}
  .bd-iconbtn{width:44px;height:44px}
  .bd-nav__item{min-height:48px}
  .bd-tabs__tab,.campaign-detail-tab,.bd-seg__btn,.bd-landing__tab{min-height:44px}
  .bd-chipbtn,.bd-rowmenu{min-width:40px;min-height:40px}
  .bd-move{width:36px;height:36px}
  .bd-statusselect{min-height:44px}
  /* ---- forms: 16px inputs stop iOS focus zoom ---- */
  input,select,textarea{font-size:16px!important}
  /* ---- tables: ONE card reflow (label/value rows) ---- */
  .bd-tablewrap{overflow:visible!important}
  .bd-table{display:block;width:100%;min-width:0!important;table-layout:auto!important}
  .bd-table thead{display:none}
  .bd-table tbody,.bd-table tfoot{display:block}
  .bd-table tr{display:block;position:relative;width:auto;padding:12px 14px;border-bottom:1px solid var(--bd-border)}
  .bd-table tbody tr:last-child{border-bottom:0}
  .bd-table td{display:flex;align-items:center;justify-content:space-between;gap:12px;width:auto!important;min-width:0;height:auto!important;min-height:0;padding:5px 0!important;border:0!important;white-space:normal!important;overflow-wrap:anywhere;text-align:right;font-size:13px;line-height:1.35}
  .bd-table td::before{content:attr(data-label);flex:0 1 auto;max-width:46%;color:var(--bd-muted);font-size:10px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;text-align:left}
  .bd-table td:not([data-label])::before,.bd-table td[data-label=""]::before{display:none}
  .bd-table td:has(>button):not([data-label]){justify-content:flex-end}
  .bd-table td:first-child{display:block;text-align:left;padding:2px 0 8px!important;font-size:14px}
  .bd-table td:first-child::before{display:none}
  .bd-table td.bd-chev{position:absolute;top:6px;right:6px;width:44px;height:44px;display:flex;align-items:center;justify-content:center;padding:0!important;font-size:15px;color:var(--bd-muted-strong)}
  .bd-table tr:has(>td.bd-chev)>td:nth-child(2){display:block;text-align:left;padding:2px 52px 8px 0!important;font-size:14px}
  .bd-table tr:has(>td.bd-chev)>td:nth-child(2)::before{display:none}
  .bd-table tr.bd-rowexpand>td{display:block;text-align:left;padding:4px 0!important}
  .bd-table tr.bd-rowexpand>td::before{display:none}
  .bd-table td>*{min-width:0}
  .bd-table td .bd-progress{flex:1 1 auto;max-width:170px}
  .bd-table td select{max-width:60vw}
  .bd-table td .bd-noteinput{width:100%;margin-top:6px}
  /* ---- detail rows / misc grids ---- */
  .bd-camp-row{flex-wrap:wrap}
  .bd-camp-row__stats{white-space:normal}
  .bd-camp-row .bd-progress{flex:1 1 120px;min-width:100px}
  .bd-bulkrow{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
  .bd-bulkrow__who{grid-column:1/-1}
  .creator-submit .bd-input{min-width:0!important;flex:1 1 100%}
  .bd-selbar{flex-wrap:wrap}
}
@media(max-width:700px){
  /* modals become bottom sheets; dialog panels go full-screen */
  .bd-modal-back{align-items:flex-end;padding:0}
  .bd-modal{width:100%;max-width:none;max-height:94dvh;border-radius:20px 20px 0 0;border-bottom:0;padding:22px 18px calc(20px + env(safe-area-inset-bottom))}
  .campaign-dialog{padding:0}
  .campaign-dialog__panel{width:100%;height:100dvh;max-height:100dvh;border-radius:0}
  .portal-password-modal{align-items:flex-end;padding:0}
  .portal-password-modal>section{width:100%;border-radius:18px 18px 0 0;padding:24px 20px calc(22px + env(safe-area-inset-bottom))}
  .bd-landing__nav{padding:16px 18px}
  .bd-landing__hero{padding-left:18px;padding-right:18px}
}
@media(max-width:560px){
  .bd-kv>div{grid-template-columns:108px minmax(0,1fr);gap:10px}
  .bd-auth{padding:14px}
  .bd-auth__card{padding:28px 22px;border-radius:16px}
  .bd-filterbar .bd-search{flex:1 1 150px;min-width:0}
}

/* ================================================================
   CREATOR LEADS — compact mobile cards + tab bar active contrast.
   Appended last so it wins ties over the mobile app layer above.
   Everything sits inside the ≤900px breakpoint; the leads layout
   only applies to the table that opts in via .bd-table--leads, so
   desktop rendering is untouched. Column order in viewLeads:
   Handle, Platform, Niche, Account, Hit via, Status, Assigned,
   Added, actions.
   ================================================================ */
@media(max-width:900px){
  /* ---- tab bar: active tab = solid Bloom green pill with white
     icon + label. The old soft-green pill (--bd-green-soft is
     #183126 on the dark theme) with --bd-sidebar (#0B3D2E) text was
     dark-on-dark and unreadable; white on the sidebar green reads
     in both themes. ---- */
  .bd-tabbar__item--active{background:var(--bd-sidebar);color:#fff}
  .bd-tabbar__item--active svg{stroke:#fff}
  /* ---- lead card: compact 2-column grid ---- */
  .bd-table--leads tr{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:9px 12px;padding:13px 14px 12px;align-items:start}
  /* handle = card title; right padding keeps it clear of the ✕ */
  .bd-table--leads td:first-child{grid-column:1/-1;padding:0 40px 0 0!important;font-size:15px}
  /* platform + niche as small chips */
  .bd-table--leads td:nth-child(2),.bd-table--leads td:nth-child(3){justify-self:start;width:max-content;max-width:100%;display:inline-flex;align-items:center;background:var(--bd-hover);border:1px solid var(--bd-border);border-radius:999px;padding:3px 10px!important;font-size:11.5px;font-weight:600;color:var(--bd-muted-strong)}
  .bd-table--leads td:nth-child(2)::before,.bd-table--leads td:nth-child(3)::before{display:none}
  /* editable fields: small label over a compact themed select;
     Account + Hit via share a row, Status gets the full width */
  .bd-table--leads td:nth-child(4),.bd-table--leads td:nth-child(5),.bd-table--leads td:nth-child(6){flex-direction:column;align-items:stretch;justify-content:flex-start;gap:5px;text-align:left}
  .bd-table--leads td:nth-child(4)::before,.bd-table--leads td:nth-child(5)::before,.bd-table--leads td:nth-child(6)::before{max-width:none}
  .bd-table--leads td:nth-child(6){grid-column:1/-1}
  .bd-table--leads td:nth-child(6) .bd-pill{align-self:flex-start}
  .bd-table--leads td select{width:100%;max-width:none;height:40px;min-height:40px;padding-top:0;padding-bottom:0;border-radius:9px;background:var(--bd-card);border-color:var(--bd-border);color:var(--bd-ink)}
  /* assigned · added as one muted meta row */
  .bd-table--leads td:nth-child(7),.bd-table--leads td:nth-child(8){display:block;padding:0!important;font-size:12px;color:var(--bd-muted)}
  .bd-table--leads td:nth-child(7)::before,.bd-table--leads td:nth-child(8)::before{display:none}
  .bd-table--leads td:nth-child(7)::after{content:" ·"}
  .bd-table--leads td:nth-child(8){text-align:right}
  /* action row: themed buttons, equal width, same height */
  .bd-table--leads td:last-child:not(:first-child){grid-column:1/-1;display:flex;gap:8px;justify-content:flex-start;padding:2px 0 0!important;text-align:left}
  .bd-table--leads .ld-to-existing,.bd-table--leads .ld-to-new{flex:1 1 0;justify-content:center;min-height:40px;padding:0 10px;border-radius:10px;font-size:12.5px}
  .bd-table--leads .ld-to-existing{background:var(--bd-hover);border:1px solid var(--bd-border);color:var(--bd-ink)}
  .bd-table--leads .ld-to-new,.bd-table--leads .ld-to-new:active{background:var(--bd-sidebar);border:1px solid var(--bd-sidebar);color:#fff}
  /* delete: quiet icon button pinned to the card's top-right */
  .bd-table--leads button.ld-del{position:absolute;top:6px;right:6px;width:32px;height:32px;min-width:32px;padding:0;border:0;border-radius:9px;background:transparent;color:var(--bd-muted)}
  .bd-table--leads .ld-del svg{width:16px;height:16px;stroke:currentColor}
}

/* ---- Client portal: campaign cards home (all classes cp- scoped) ---- */
.cp-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:16px;margin-bottom:26px}
.cp-card{background:var(--bd-card);border:1px solid var(--bd-border);border-radius:var(--radius-card);overflow:hidden;display:flex;flex-direction:column;box-shadow:0 1px 2px rgba(18,28,23,.05),0 6px 20px rgba(18,28,23,.07);transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease}
.cp-card:hover{transform:translateY(-2px);border-color:rgba(139,92,246,.5);box-shadow:0 2px 4px rgba(18,28,23,.06),0 14px 30px rgba(59,29,110,.16)}
html[data-theme="dark"] .cp-card{box-shadow:0 1px 2px rgba(0,0,0,.25),0 8px 24px rgba(0,0,0,.3)}
html[data-theme="dark"] .cp-card:hover{border-color:rgba(181,154,232,.55);box-shadow:0 16px 34px rgba(0,0,0,.45)}
.cp-card__art{position:relative;height:34px;overflow:hidden;cursor:pointer;flex:none}
.cp-card__art::after{content:"";position:absolute;inset:0;background:radial-gradient(260px 90px at 85% -30%,rgba(255,255,255,.28),rgba(255,255,255,0) 60%);pointer-events:none;z-index:2}
.cp-card__art:focus-visible{outline:2px solid var(--bd-purple);outline-offset:-2px}
.cp-card__initials{position:absolute;left:14px;top:50%;transform:translateY(-50%);z-index:1;font:600 16px var(--font-display);letter-spacing:.5px;color:rgba(255,255,255,.94);text-shadow:0 1px 8px rgba(0,0,0,.28)}
.cp-card__img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:1}
.cp-pill{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;font:600 11px var(--font-ui);letter-spacing:.02em;box-shadow:0 1px 5px rgba(10,25,18,.22)}
.cp-pill__dot{width:6px;height:6px;border-radius:50%;background:currentColor;flex:none}
.cp-pill--live{background:#e5f6ec;color:#1e7a45}
.cp-pill--prep{background:#ecefec;color:#5d6a65}
.cp-pill--wrap{background:#f7ead2;color:#9a6b1f}
.cp-pill--done{background:#efe9fd;color:#6d28d9}
html[data-theme="dark"] .cp-pill--live{background:#173026;color:#63d89b}
html[data-theme="dark"] .cp-pill--prep{background:#26332e;color:#c1cec8}
html[data-theme="dark"] .cp-pill--wrap{background:#2e2417;color:#e0aa54}
html[data-theme="dark"] .cp-pill--done{background:#2b2441;color:#c4b0f5}
.cp-card__body{padding:11px 14px 12px;display:flex;flex-direction:column;gap:8px;flex:1}
.cp-card__name{background:none;border:0;padding:0;margin:0;cursor:pointer;text-align:left;font:600 15px var(--font-body);line-height:1.28;color:var(--bd-ink);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.cp-card__name:hover{color:var(--bd-purple)}
.cp-card__name:focus-visible{outline:2px solid var(--bd-purple);outline-offset:2px;border-radius:4px}
.cp-card__stats{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 16px}
.cp-card__stat{font-size:12.5px;color:var(--bd-muted)}
.cp-card__stat strong{font-size:15px;font-weight:700;letter-spacing:-.2px;color:var(--bd-ink);margin-right:5px}
.cp-card__foot{margin-top:auto;border-top:1px solid var(--bd-border);padding-top:10px;display:flex;align-items:center;justify-content:space-between;gap:10px}
.cp-card__foot .cp-pill{box-shadow:none}
.cp-card__view{display:inline-flex;align-items:center;gap:6px;font-weight:600;white-space:nowrap}
.cp-card__view svg{width:15px;height:15px}
/* Posts-live tracker: on gallery cards (one line + slim bar, inside the
   compact card budget) and as a panel on the campaign detail. Numbers are
   the payload's completion_* figures — same as the staff PROGRESS column. */
.cp-card__prog{display:flex;flex-direction:column;gap:5px}
.cp-card__progline{font-size:12.5px;line-height:1.3;color:var(--bd-muted)}
.cp-card__progline strong{font-size:13px;font-weight:700;color:var(--bd-ink);margin-right:5px}
.cp-card__progbar{margin-top:0;min-width:0;height:5px}
.cp-progpanel{padding:16px 20px;margin-bottom:16px}
.cp-progpanel__row{display:flex;align-items:baseline;justify-content:space-between;gap:8px 14px;flex-wrap:wrap}
.cp-progpanel__head{display:inline-flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.cp-progpanel__label{font-size:13.5px;font-weight:600;color:var(--bd-muted-strong)}
.cp-progpanel__nums{font-size:17px;font-weight:700;letter-spacing:-.3px;color:var(--bd-ink)}
.cp-progpanel__pct{font-size:13.5px;font-weight:700;color:var(--bd-green-text)}
.cp-progpanel__side{font-size:13.5px;color:var(--bd-muted-strong)}
.cp-progpanel__side strong{color:var(--bd-ink)}
.cp-progpanel__side--done{color:var(--bd-green-text);font-weight:600}
.cp-progpanel__bar{margin-top:10px;min-width:0}
.cp-panel{background:var(--bd-card);border:1px solid var(--bd-border);border-radius:14px;margin-bottom:26px}
.cp-nomatch{grid-column:1/-1;background:var(--bd-card);border:1px dashed var(--bd-border);border-radius:14px}
/* Completed campaigns: their own quieter section below the active gallery.
   Collapsible — the header is a full-width button, the grid starts hidden
   and the client opens it on choice. */
.cp-done__head{display:flex;align-items:center;flex-wrap:wrap;gap:8px 10px;width:100%;padding:11px 15px;margin:0 0 18px;background:var(--bd-hover);border:1px solid var(--bd-border);border-radius:12px;font:inherit;color:inherit;text-align:left;cursor:pointer;appearance:none}
.cp-done__head:hover{border-color:rgba(139,92,246,.45)}
.cp-done__head:focus-visible{outline:2px solid var(--bd-purple);outline-offset:2px}
.cp-done__dot{width:9px;height:9px;border-radius:50%;background:#8a938e;flex:none}
html[data-theme="dark"] .cp-done__dot{background:#b9c6c0}
/* Preparing section: same band, blue tone (matches the blue "Preparing /
   Building" status tone) so it reads as pipeline, not archive. */
.cp-done__dot--blue{background:#2f6fed}
html[data-theme="dark"] .cp-done__dot--blue{background:#2f6fed}
.cp-done__title{font-family:var(--font-ui);font-size:12.5px;font-weight:700;letter-spacing:1.1px;text-transform:uppercase;color:var(--bd-muted-strong)}
.cp-done__count{font-family:var(--font-ui);font-size:11px;font-weight:700;color:var(--bd-muted-strong);background:var(--bd-card);border:1px solid var(--bd-border);border-radius:20px;padding:2px 9px}
.cp-done__sub{font-size:12px;color:var(--bd-muted)}
.cp-done__chev{margin-left:auto;display:inline-flex;color:var(--bd-muted);transition:transform .18s ease}
.cp-done__chev svg{width:16px;height:16px}
.cp-done__head[aria-expanded="true"] .cp-done__chev{transform:rotate(180deg)}
.cp-done__grid[hidden]{display:none}
/* Portal Invoices sections (Awaiting payment / Paid / Invoice files):
   static header bands in the cp-done language, one table card each. */
.ci-sec{margin:0 0 26px}
.ci-sec:last-child{margin-bottom:0}
.ci-sec__head{display:flex;align-items:center;flex-wrap:wrap;gap:8px 10px;padding:11px 15px;margin:0 0 14px;background:var(--bd-hover);border:1px solid var(--bd-border);border-radius:12px}
.ci-sec__dot{width:9px;height:9px;border-radius:50%;background:#8a938e;flex:none}
html[data-theme="dark"] .ci-sec__dot{background:#b9c6c0}
.ci-sec__dot--amber{background:#e8a33d}
html[data-theme="dark"] .ci-sec__dot--amber{background:#e8a33d}
.ci-sec__dot--green{background:#2fbf71}
html[data-theme="dark"] .ci-sec__dot--green{background:#2fbf71}
.ci-sec__title{font-family:var(--font-ui);font-size:12.5px;font-weight:700;letter-spacing:1.1px;text-transform:uppercase;color:var(--bd-muted-strong)}
.ci-sec__count{font-family:var(--font-ui);font-size:11px;font-weight:700;color:var(--bd-muted-strong);background:var(--bd-card);border:1px solid var(--bd-border);border-radius:20px;padding:2px 9px}
.ci-sec__sub{font-size:12px;color:var(--bd-muted)}
@media(max-width:900px){
  .cp-grid{grid-template-columns:1fr;gap:14px}
  .cp-card__art{height:34px}
  .cp-card__initials{font-size:16px}
}
/* ============================================================
   Payouts tab hero total (scoped: .po-hero — this tab only)
   ============================================================ */
.po-hero{display:flex;align-items:center;gap:20px 44px;flex-wrap:wrap;margin:18px 0 6px;padding:22px 26px;border-radius:16px;color:#f2f7f3;border:1px solid transparent;background:linear-gradient(115deg,#0b3d2e,#0e4a38 58%,#123f31) padding-box,linear-gradient(120deg,#d9cbf5,#8b5cf6 55%,rgba(139,92,246,0)) border-box;box-shadow:0 10px 30px rgba(11,61,46,.30)}
.po-hero__label{font-size:11px;font-weight:700;letter-spacing:1.6px;text-transform:uppercase;color:#d9cbf5}
.po-hero__amount{font-size:38px;font-weight:800;letter-spacing:-1.2px;line-height:1.05;margin-top:6px;font-variant-numeric:tabular-nums}
.po-hero__sub{font-size:12.5px;color:#a9c4b8;margin-top:5px}
.po-hero__split{margin-left:auto;display:flex}
.po-hero__cell{display:flex;flex-direction:column;gap:4px;padding:2px 22px}
.po-hero__cell:first-child{padding-left:0}
.po-hero__cell:last-child{padding-right:0}
.po-hero__cell + .po-hero__cell{border-left:1px solid rgba(217,203,245,.25)}
.po-hero__cell-label{display:flex;align-items:center;gap:7px;font-size:11px;font-weight:600;letter-spacing:1.1px;text-transform:uppercase;color:#c9d8d1;white-space:nowrap}
.po-hero__dot{width:8px;height:8px;border-radius:50%;flex:none}
.po-hero__dot--ready{background:#34d399;box-shadow:0 0 8px rgba(52,211,153,.85)}
.po-hero__dot--paid{background:#d9cbf5}
.po-hero__cell-amt{font-size:19px;font-weight:700;letter-spacing:-.3px;font-variant-numeric:tabular-nums}
@media (max-width:700px){
  .po-hero{padding:18px 20px;gap:16px}
  .po-hero__amount{font-size:32px}
  .po-hero__split{margin-left:0;width:100%}
  .po-hero__cell{padding:2px 16px 2px 0}
  .po-hero__cell + .po-hero__cell{padding-left:16px}
}

/* ---- Status tones: ONE colour per status, shared by pills, badges and
   status dropdowns via .bd-tone--* (maps in app.js: CAMPAIGN_STATUS_TONE,
   ASSIGN_STATUS_TONE). Values mirror the platform badge palette; dark
   values keep the same hues readable on the dark theme. ---- */
.bd-tone--blue{--tone-bg:#e8f1fe;--tone-ink:#2f6fed;--tone-line:#bcd4fa}
.bd-tone--amber{--tone-bg:#fdf3e3;--tone-ink:#c07f1a;--tone-line:#eed9a8}
.bd-tone--green{--tone-bg:#e5f6ec;--tone-ink:#1e7a45;--tone-line:#bfe6cd}
.bd-tone--purple{--tone-bg:#f1edfe;--tone-ink:#7c3aed;--tone-line:#d9cbf5}
.bd-tone--gray{--tone-bg:#eef0ee;--tone-ink:#6b7470;--tone-line:#dde1dd}
.bd-tone--red{--tone-bg:#fdeeee;--tone-ink:#c0392b;--tone-line:#f0bcbc}
.bd-tone--orange{--tone-bg:#feeddd;--tone-ink:#bc5a12;--tone-line:#f3cf9f}
.bd-tone--teal{--tone-bg:#dff5f1;--tone-ink:#0e7569;--tone-line:#aedfd4}
.bd-tone--pink{--tone-bg:#fdeef3;--tone-ink:#d63363;--tone-line:#f3c2d4}
html[data-theme="dark"] .bd-tone--blue{--tone-bg:#1d2b4d;--tone-ink:#93b4ff;--tone-line:#31497e}
html[data-theme="dark"] .bd-tone--amber{--tone-bg:#3a2c14;--tone-ink:#f0c979;--tone-line:#5c4718}
html[data-theme="dark"] .bd-tone--green{--tone-bg:#173026;--tone-ink:#63d89b;--tone-line:#23503a}
html[data-theme="dark"] .bd-tone--purple{--tone-bg:#2b2441;--tone-ink:#c9b6f7;--tone-line:#453a6e}
html[data-theme="dark"] .bd-tone--gray{--tone-bg:#26312c;--tone-ink:#b9c6c0;--tone-line:#3a4741}
html[data-theme="dark"] .bd-tone--red{--tone-bg:#3a1f1c;--tone-ink:#f08a80;--tone-line:#5e2d27}
html[data-theme="dark"] .bd-tone--orange{--tone-bg:#38240f;--tone-ink:#f5a860;--tone-line:#5c3c17}
html[data-theme="dark"] .bd-tone--teal{--tone-bg:#10322e;--tone-ink:#5fd4c4;--tone-line:#1d4a44}
html[data-theme="dark"] .bd-tone--pink{--tone-bg:#3d2330;--tone-ink:#f49ec4;--tone-line:#5e3448}
.bd-pill.bd-tone,.bd-badge.bd-tone{background:var(--tone-bg);color:var(--tone-ink)}
select.bd-tone{background:var(--tone-bg);color:var(--tone-ink);border-color:var(--tone-line)}

/* ---- Campaigns page: priority sections + drag reorder ---- */
.bd-campsection__head{display:flex;align-items:center;gap:10px;padding:22px 2px 4px}
.bd-campsection:first-child .bd-campsection__head{padding-top:8px}
.bd-campsection__head h3{font-family:var(--font-ui);font-size:12.5px;font-weight:700;letter-spacing:1.1px;text-transform:uppercase;color:var(--bd-ink)}
.bd-campsection__dot{width:9px;height:9px;border-radius:50%;flex:none}
.bd-campsection__dot--green{background:#1d9e57}
.bd-campsection__dot--blue{background:#2f6fed}
.bd-campsection__dot--gray{background:#8a938e}
html[data-theme="dark"] .bd-campsection__dot--green{background:#63d89b}
html[data-theme="dark"] .bd-campsection__dot--blue{background:#93b4ff}
html[data-theme="dark"] .bd-campsection__dot--gray{background:#b9c6c0}
.bd-campsection__count{font-family:var(--font-ui);font-size:11px;font-weight:700;color:var(--bd-muted-strong);background:var(--bd-hover);border:1px solid var(--bd-border);border-radius:20px;padding:2px 9px}
.bd-campsection__sub{font-size:12px;color:var(--bd-muted)}
.bd-campsection--done .bd-campsection__head h3{color:var(--bd-muted-strong)}
.bd-draggrip{display:flex;align-items:center;justify-content:center;width:24px;height:16px;color:#b9c0bb;cursor:grab}
.bd-draggrip svg{width:10px;height:16px;fill:currentColor;display:block}
.bd-draggrip:hover{color:var(--bd-purple)}
.bd-campaign--dragging{opacity:.45}
.bd-campaign--dropbefore{box-shadow:0 -2px 0 0 var(--bd-purple)}
.bd-campaign--dropafter{box-shadow:0 2px 0 0 var(--bd-purple)}
@media (max-width:900px){.bd-draggrip{display:none}}

/* ============================================================
   Campaigns page declutter (2026-10-14)
   - #camps-body gets the app's 36px page inset (the rhythm the
     topbar already uses) so nothing hugs the sidebar wall.
   - The filter bar sits in ONE row on desktop: selects take their
     natural width instead of the form default width:100% (which
     forced one full-width row per control); search flexes.
   - Section headers become separated tonal bands with real spacing
     between the title, count pill and subtitle.
   - The drag grip is plainly visible (not hover-only) and the
     insertion line is stronger, incl. on section headers.
   ============================================================ */
#camps-body{padding:2px 36px 44px}
.bd-filterbar--camps .bd-select{width:auto;flex:none}
.bd-filterbar--camps .bd-search{flex:1 1 200px;min-width:150px}
.bd-campsection__head{margin:24px 0 2px;padding:10px 14px;background:var(--bd-hover);border:1px solid var(--bd-border);border-radius:10px}
.bd-campsection__head:first-child{margin-top:8px}
.bd-campsection__count{margin-left:2px}
.bd-campsection__head--drop{box-shadow:0 -3px 0 0 var(--bd-purple)}
.bd-draggrip{width:28px;height:30px;color:var(--bd-muted-strong);border-radius:8px}
.bd-draggrip svg{width:12px;height:20px}
.bd-draggrip:hover{color:var(--bd-purple-deep);background:var(--bd-hover)}
.bd-campaign--dragging{opacity:.5}
.bd-campaign--dropbefore{box-shadow:0 -3px 0 0 var(--bd-purple)}
.bd-campaign--dropafter{box-shadow:0 3px 0 0 var(--bd-purple)}
@media (max-width:900px){
  #camps-body{padding:2px 16px 32px}
}
@media (max-width:560px){
  #camps-body{padding:2px 12px 28px}
  .bd-campsection__head{margin-top:18px;padding:9px 12px}
}

/* ---- Campaign list: progress completion column ----
   Desktop: its own grid track between Creators and Spend (templates
   above carry the extra minmax(120px,.9fr)). The % and the delivered/
   committed fraction sit on one line over a slim brand-green bar; at
   100%+ the fill takes the brighter "fully delivered" green. */
.bd-campprog__line{display:flex;align-items:baseline;gap:8px}
.bd-campprog__frac{font-size:11.5px;color:var(--bd-muted);white-space:nowrap}
.bd-progress--list{margin-top:0;min-width:0;height:6px}
.bd-progress__fill--green{background:var(--bd-green-text)}
.bd-progress__fill--full{background:#2fbf71}
@media (max-width:900px){
  /* Card reflow: the metric columns hide, so the progress cell instead
     spans the row under the campaign name — completion stays visible. */
  .bd-campaign>.bd-campaign__col.bd-campaign__col--prog{display:flex!important;grid-column:2/4!important;grid-row:2;width:100%;min-width:0;max-width:none}
  .bd-campaign>.bd-campaign__col.bd-campaign__col--prog .bd-progress--list{max-width:240px}
}

/* ============================================================
   Campaign detail fit pass: the detail view gets the Campaigns
   list's content inset rhythm (pageHead/.bd-topbar: 30px top,
   36px sides; #camps-body: 44px bottom; 16px sides <=900px,
   12px sides <=560px) so the header, stat band, tab bar and
   every tab panel share one inset instead of running wall to
   wall. Tab panels get the .bd-page section gap (20px, 14px
   <=900px, 12px <=560px) between stacked cards.
   ============================================================ */
.bd-page--campaign{padding:30px 36px 44px}
.bd-page--campaign>.bd-topbar{padding-left:0;padding-right:0}
.bd-page--campaign>.bd-stats{margin-bottom:0}
#cd-tab>*+*{margin-top:20px}
@media (min-width:901px){.bd-page--campaign .bd-stats--7{gap:28px}}
@media (max-width:900px){
  .bd-page--campaign{padding:18px 16px 32px}
  #cd-tab>*+*{margin-top:14px}
}
@media (max-width:560px){
  .bd-page--campaign{padding:14px 12px 28px}
  #cd-tab>*+*{margin-top:12px}
}
/* Add Creators table: column widths live in the #cd-addtable block
   above (nine columns since the 2026-10-28 rework — Handle unsized
   takes the slack, Profile is sized for button + "✓ Added" tag). The
   old caps that lived here (Niche auto, a 124px seventh column from
   the six-column layout) are superseded by that block. */

/* ============================================================
   Staff view inset pass: the remaining pageHead views rendered
   their body containers (#dash-body, #cr-body, ...) straight
   into #bd-main with no padding, so content hugged the sidebar
   wall (x=224) while the .bd-topbar title sat at the standard
   inset (x=260). .bd-viewbody applies the #camps-body rhythm
   (the topbar above it already carries the 30px top) and
   .bd-page--padded applies the .bd-page--campaign wrapper
   values to .bd-page roots (profile detail), so every staff
   view shares the Campaigns content edges: 36px sides / 44px
   bottom desktop, 16px sides <=900px, 12px sides <=560px.
   ============================================================ */
.bd-viewbody{padding:2px 36px 44px}
.bd-page--padded{padding:30px 36px 44px}
.bd-page--padded>.bd-topbar{padding-left:0;padding-right:0}
@media (max-width:900px){
  .bd-viewbody{padding:2px 16px 32px}
  .bd-page--padded{padding:18px 16px 32px}
}
@media (max-width:560px){
  .bd-viewbody{padding:2px 12px 28px}
  .bd-page--padded{padding:14px 12px 28px}
}

/* ============================================================
   Client portal inset pass: portal views rendered their body
   containers (#cp-list-body, #ci-body, ...) straight into
   #bd-main with no padding — only the .bd-topbar title sat at
   the standard inset, so stats/cards/tables hugged the wall.
   Portal bodies now carry .bd-viewbody (same class + values as
   the staff pass); the preview banner gets .bd-portal-top so it
   aligns to the same content edges (the .bd-page--padded top
   values; no bottom padding — the topbar follows it).
   ============================================================ */
.bd-portal-top{padding:30px 36px 0}
.bd-portal-top .bd-hintbar{margin-top:0}
/* Preview exit: a real button pinned to the banner's right edge (it
   used to be a small text link inside the banner paragraph — easy to
   miss, especially on mobile where the sidebar's Exit lives in the
   drawer). Same #exit-portal id, same wiring in every portal view. */
.bd-portal-top .bd-hintbar #exit-portal{margin-left:auto;flex:none;align-self:center}
@media (max-width:900px){
  .bd-portal-top{padding:18px 16px 0}
  .bd-portal-top .bd-hintbar{flex-wrap:wrap}
}
@media (max-width:560px){
  .bd-portal-top{padding:14px 12px 0}
}

/* ============================================================
   Financials header-stack rhythm: the three subtabs each grew
   their own ad-hoc gaps (subtabs margin 14/4, tiles margin 26,
   a 16px filterbar offset here, a 0px gap before the table
   there, refunds labels at 18/8, an 18px card offset on
   Invoices). The stack now runs on the app's page rhythm —
   one 20px block gap (the .bd-page value) between every block
   from the subtab row down, a 10px gap under section labels,
   and an even chart-header stack (head -> legend 12px,
   legend -> plot 10px). The month/client scope that used to
   hang off the first tile's label now sits once, as a section
   label above the tiles (.bd-fin-scope), so all four tile
   labels read uniformly.
   ============================================================ */
.bd-viewbody--fin{display:flex;flex-direction:column;gap:20px}
#fin-body{display:flex;flex-direction:column;gap:20px}
#fin-body .bd-stats{margin-bottom:0}
#fin-body .bd-filterbar{margin-bottom:0}
#fr-body{display:flex;flex-direction:column;gap:20px}
#fr-body .bd-profprev__label{margin:0 0 -10px}
.bd-fin-scope{font:700 11px var(--font-ui);letter-spacing:.8px;text-transform:uppercase;color:var(--bd-muted-strong);margin-bottom:10px}
#fin-body .bd-card__head .bd-card__sub{margin-top:0}
#fin-body .bd-legend{margin:-6px 0 10px}

/* ================================================================
   CREATOR LEADS — desktop table fit + toned row selects (2026-10-14).
   The table opts in via .bd-table--leads. Fixed layout with explicit
   tracks sized to the longest real option strings ("Chat Made ·
   Price Pending" is the widest status), so the Account / Hit via /
   Status selects can never truncate; Handle takes whatever width is
   left and ellipsizes (full handle in its title). Below the min-width
   the app table wrapper scrolls instead of squeezing the controls.
   The ≤900px card layout further up is untouched, apart from letting
   select tones survive its flat select rule.
   ================================================================ */
.bd-statdot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--tone-ink,#8a938e);margin-right:6px;vertical-align:1px}
@media(min-width:901px){
  .bd-table--leads{table-layout:fixed;min-width:1190px}
  .bd-table--leads thead th,.bd-table--leads tbody td{padding-left:11px;padding-right:11px}
  .bd-table--leads thead th:nth-child(2){width:84px}
  .bd-table--leads thead th:nth-child(3){width:96px}
  .bd-table--leads thead th:nth-child(4){width:144px}
  .bd-table--leads thead th:nth-child(5){width:124px}
  .bd-table--leads thead th:nth-child(6){width:220px}
  .bd-table--leads thead th:nth-child(7){width:88px}
  .bd-table--leads thead th:nth-child(8){width:106px}
  .bd-table--leads thead th:nth-child(9){width:226px}
  .bd-table--leads td.bd-table__handle,.bd-table--leads tbody td:nth-child(3),.bd-table--leads tbody td:nth-child(7){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .bd-table--leads td.ld-added{white-space:nowrap}
  .bd-table--leads td.ld-actions .bd-btn--sm{padding-left:10px;padding-right:10px}
  .bd-table--leads td.ld-actions .ld-profile{margin-left:6px}
  .bd-table--leads td.ld-actions .ld-menu{width:30px;height:30px;margin-left:2px;vertical-align:middle}
  .bd-table--leads td.ld-actions .ld-del{width:30px;height:30px;margin-left:2px;vertical-align:middle}
}
@media(max-width:900px){
  .bd-table--leads td select.bd-tone{background:var(--tone-bg);border-color:var(--tone-line);color:var(--tone-ink)}
}
.bd-docrow__inv{flex:none;display:flex;align-items:center}
.bd-invsteps{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 14px}
.bd-invsteps__step{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:var(--bd-muted)}
.bd-invsteps__dot{width:20px;height:20px;border-radius:50%;border:1.5px solid var(--bd-border);background:var(--bd-card);display:inline-flex;align-items:center;justify-content:center;flex:none}
.bd-invsteps__dot svg{width:11px;height:11px;stroke:currentColor;fill:none;stroke-width:2.6}
.bd-invsteps__step--done{color:var(--bd-green-text)}
.bd-invsteps__step--done .bd-invsteps__dot{background:var(--bd-green-soft);border-color:var(--bd-green-text);color:var(--bd-green-text)}
.bd-invsteps__step--cur{color:var(--tone-ink)}
.bd-invsteps__step--cur .bd-invsteps__dot{background:var(--tone-bg);border-color:var(--tone-ink);color:var(--tone-ink)}
.bd-invsteps__bar{flex:none;width:22px;height:1.5px;background:var(--bd-border);border-radius:1px}

/* Portal home 6-tile band: 6 across only where the longest label
   ("Views this month") fits beside its icon; 3x2 below that, then the
   house mobile steps. Scoped to --6, which only this band uses. */
@media (max-width:1440px){.bd-stats--6{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:560px){.bd-stats--6{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:370px){.bd-stats--6{grid-template-columns:1fr}}

/* ================================================================
   CPV SUBMISSIONS REVIEW — compact rows + queue filters.
   One badge per concept on one line: badges never wrap inside the
   review table, the sound name sits quietly beside its badge
   (ellipsized, full name in the tooltip), and the action buttons
   stay on one line — the table scrolls inside its wrap as a unit
   rather than crushing a column. The count pills are the queue's
   filters: quiet until active, then they take their tone. Scoped
   to the shared review block so no other staff table changes. */
.cpv-reviewbar{display:flex;gap:10px;flex-wrap:wrap;align-items:center;padding:0 20px 12px}
.cpv-reviewbar .bd-muted-sm{margin:0}
.cpv-totals{margin-left:auto}
.cpv-filters{display:inline-flex;gap:6px;flex-wrap:wrap;align-items:center}
.cpv-filter{display:inline-flex;align-items:center;padding:5px 12px;border-radius:999px;border:1px solid var(--bd-border);background:transparent;color:var(--bd-muted-strong);font:600 11.5px var(--font-ui);cursor:pointer;white-space:nowrap}
.cpv-filter:hover{border-color:var(--bd-muted-strong);color:var(--bd-ink)}
.cpv-filter.is-active{border-color:transparent;background:var(--bd-border);color:var(--bd-ink)}
.cpv-filter--amber.is-active{background:rgba(196,141,60,.16);color:#c48d3c}
.cpv-filter--green.is-active{background:#e5f6ec;color:#1e7a45}
.cpv-filter--red.is-active{background:rgba(214,69,69,.14);color:#d64545}
html[data-theme="dark"] .cpv-filter--amber.is-active{background:#2e2417;color:#e0aa54}
html[data-theme="dark"] .cpv-filter--green.is-active{background:#173026;color:#63d89b}
html[data-theme="dark"] .cpv-filter--red.is-active{background:#3a1f22;color:#f09393}
.cpv-audio-sep{color:var(--bd-muted)}
.cpv-audio-state{font-weight:600;white-space:nowrap}
.cpv-audio-state--on{color:#1e7a45}
.cpv-audio-state--off{color:#c48d3c}
html[data-theme="dark"] .cpv-audio-state--on{color:#63d89b}
html[data-theme="dark"] .cpv-audio-state--off{color:#e0aa54}
.cpv-sub-table .bd-badge{white-space:nowrap}
.cpv-sub-table thead th{padding-left:9px;padding-right:9px}
.cpv-sub-table tbody td{padding-left:9px;padding-right:9px}
.cpv-sub-table .bd-linkbtn{white-space:nowrap}
.cpv-sub-table .bd-btn--sm{padding-left:9px;padding-right:9px}
.cpv-audiocell{display:inline-flex;align-items:center;gap:8px;max-width:190px;min-width:0}
.cpv-soundname{font-size:12.5px;color:var(--bd-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.cpv-reason{margin-top:4px}
.cpv-actions-cell{white-space:nowrap}

/* ---- Campaign Details (creator deep view, #/creator/campaign/:id) ---- */
.bd-titlelink{color:inherit;text-decoration:none}
.bd-titlelink:hover{text-decoration:underline}
.cd-wrap{max-width:1120px;margin:0 auto;display:flex;flex-direction:column;gap:18px;min-width:0}
.cd-head{padding:22px 24px}
.cd-head__top{display:flex;gap:18px;align-items:flex-start}
.cd-cover{width:92px;height:92px;border-radius:16px;object-fit:cover;flex:none}
.cd-cover--blank{display:flex;align-items:center;justify-content:center}
.cd-cover--blank span{font-size:38px;font-weight:700;color:#fff}
.cd-head__title{min-width:0;flex:1}
.cd-head__title h2{font-family:var(--font-display);font-size:26px;font-weight:600;letter-spacing:-.4px;margin:2px 0 8px;overflow-wrap:break-word}
.cd-head__chips{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.cd-head__chips .bd-landing__meta{margin:0}
.cd-audio{display:flex;align-items:center;gap:8px;margin-top:10px;font-size:13.5px;color:var(--bd-muted-strong);min-width:0}
.cd-audio svg{width:17px;height:17px;flex:none;color:var(--bd-green)}
.cd-audio a{color:var(--bd-purple-deep);font-weight:600}
.cd-paidout{display:flex;justify-content:space-between;gap:20px;margin-top:20px}
.cd-paidout__cell--right{text-align:right}
.cd-paidout__label{display:block;font-size:12px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--bd-muted)}
.cd-paidout__fig{font-size:15px;color:var(--bd-muted);margin-top:3px}
.cd-paidout__fig strong{font-size:27px;font-weight:700;color:var(--bd-ink);letter-spacing:-.4px}
.cd-progress{margin-top:12px}
.cd-head__meta{margin-top:9px;font-size:12.5px;color:var(--bd-muted)}
.cd-details{display:grid;grid-template-columns:minmax(0,1fr) 350px;gap:20px;align-items:start}
.cd-details__main{display:flex;flex-direction:column;gap:20px;min-width:0}
.cd-details__side{display:flex;flex-direction:column;gap:20px;min-width:0}
.cd-sec{padding:20px 22px}
.cd-sec h3,.cd-facts h3{font-size:17px;font-weight:700;margin:0 0 14px}
.cd-text{margin:0;font-size:14.5px;line-height:1.55;white-space:pre-wrap;overflow-wrap:break-word}
.cd-reqs{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:11px}
.cd-req{display:flex;gap:10px;align-items:flex-start;font-size:14.5px;line-height:1.45;overflow-wrap:break-word;min-width:0}
.cd-req svg{width:18px;height:18px;flex:none;margin-top:1px}
.cd-req--do svg{color:#1d9d74}
.cd-req--dont svg{color:#d64545}
.cd-reqline{display:flex;align-items:center;gap:9px;font-size:14.5px;margin:0 0 12px}
.cd-reqline svg{width:18px;height:18px;color:#1d9d74;flex:none}
.cd-chips{display:flex;flex-wrap:wrap;gap:9px}
.cd-chip{border:1px solid var(--bd-border);border-radius:9px;padding:6px 12px;font-size:13.5px;font-weight:600;background:var(--bd-card)}
.cd-copyrow{display:flex;justify-content:flex-end;margin-top:14px}
.cd-copyrow .bd-btn svg{width:15px;height:15px}
.cd-count{display:inline-flex;align-items:center;justify-content:center;min-width:23px;height:23px;padding:0 6px;border-radius:999px;background:var(--bd-ink);color:#fff;font-size:12.5px;font-weight:700;vertical-align:2px;margin-left:6px}
.cd-examples{display:flex;flex-direction:column;gap:12px}
.cd-example{display:flex;align-items:center;gap:14px;border:1px solid var(--bd-border);border-radius:14px;padding:13px 16px;text-decoration:none;color:inherit;background:var(--bd-card)}
.cd-example:hover{border-color:var(--bd-purple)}
.cd-example>svg{width:17px;height:17px;color:var(--bd-muted);flex:none;margin-left:auto}
.cd-example__play{width:42px;height:42px;border-radius:50%;background:var(--bd-sidebar);color:#fff;display:flex;align-items:center;justify-content:center;flex:none}
.cd-example__play svg{width:17px;height:17px}
.cd-example__meta{display:flex;flex-direction:column;min-width:0}
.cd-example__meta strong{font-size:14.5px}
.cd-example__meta span{font-size:12.5px;color:var(--bd-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cd-facts{padding:20px 22px}
.cd-kv{display:flex;justify-content:space-between;align-items:baseline;gap:18px;padding:9px 0;border-bottom:1px solid var(--bd-border);font-size:14px}
.cd-kv:last-of-type{border-bottom:0}
.cd-kv span{color:var(--bd-muted)}
.cd-kv strong{font-weight:600;text-align:right;overflow-wrap:break-word}
.cd-discord{margin-top:16px;width:100%;justify-content:center}
.cd-discord svg{width:16px;height:16px}
.cd-myline{margin:14px 0 4px;font-size:14px;color:var(--bd-muted-strong)}
.cd-board{padding:6px 10px}
.cd-brow{display:grid;grid-template-columns:36px 46px minmax(0,1fr) auto;align-items:center;gap:13px;padding:13px 12px;border-bottom:1px solid var(--bd-border)}
.cd-brow:last-child{border-bottom:0}
.cd-brow--mine{background:var(--bd-green-soft);border-radius:12px}
.cd-rank{font-size:15px;font-weight:700;color:var(--bd-muted);text-align:center}
.cd-rank--1,.cd-rank--2,.cd-rank--3{width:30px;height:30px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:13.5px;color:#3a2c07;margin:0 auto}
.cd-rank--1{background:#f3c96b}
.cd-rank--2{background:#d7dde2;color:#42505a}
.cd-rank--3{background:#e0a380;color:#4d2c17}
.cd-avatar{width:46px;height:46px;border-radius:50%;background:#f2b8c6;color:#5c2233;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:17px}
.cd-brow--mine .cd-avatar{background:var(--bd-sidebar);color:#fff}
.cd-brow__who{display:flex;flex-direction:column;min-width:0}
.cd-brow__handle{font-weight:600;font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cd-you{display:inline-block;background:var(--bd-sidebar);color:#fff;font-size:10.5px;font-weight:700;border-radius:6px;padding:1px 6px;vertical-align:2px;margin-left:4px}
.cd-brow__subs{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;color:var(--bd-muted)}
.cd-brow__subs svg{width:13px;height:13px}
.cd-brow__earned{font-size:16.5px}
.cd-actionbar{position:sticky;bottom:14px;z-index:5;background:var(--bd-card);border:1px solid var(--bd-border);border-radius:16px;padding:12px;box-shadow:0 12px 32px rgba(16,38,29,.16)}
.cd-actionbar__main{width:100%;height:52px;font-size:16px;font-weight:700;border-radius:12px}
@media (max-width:1020px){
  .cd-details{grid-template-columns:minmax(0,1fr) 300px}
}
@media (max-width:900px){
  .cd-details{grid-template-columns:minmax(0,1fr)}
  .cd-head{padding:18px}
  .cd-cover{width:72px;height:72px;border-radius:13px}
  .cd-head__title h2{font-size:22px}
  .cd-paidout__fig strong{font-size:23px}
  .cd-sec,.cd-facts{padding:17px}
  /* The shell's fixed mobile tab bar owns the bottom ~70px — the
     sticky action bar floats above it, never underneath it. */
  .cd-actionbar{bottom:78px}
}

/* Mobile fit pass (2026-10-15): phone-width fit fixes from the
   platform-wide audit. Scoped to small widths only — the desktop
   layout above is untouched. */
@media (max-width:900px){
  /* Pages whose first element is the back link (campaign page, Bloom
     Profile detail) started it under the fixed hamburger button and
     lost their first characters. Indent it clear of the button, the
     same clearance .bd-topbar titles get. */
  .bd-backlink{margin-left:54px}
  /* Financials sub-tabs: the row neither wrapped nor scrolled, so on
     a phone the Referrals/Withdrawals tabs sat past the right edge,
     clipped and unreachable. The row scrolls now, like the campaign
     tab strip and the creator tab strip already do. */
  .bd-subtabs{overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch}
  .bd-subtabs::-webkit-scrollbar{display:none}
  .bd-subtab{flex:none}
  /* Scrollable strips fade at the right edge instead of cutting a
     label mid-word, so the strip reads as scrollable. */
  .bd-subtabs,.bd-ctabs__in,.bd-page--campaign .bd-tabs{mask-image:linear-gradient(to right,#000 93%,transparent);-webkit-mask-image:linear-gradient(to right,#000 93%,transparent)}
  /* A long payout email is one unbroken token: let it wrap inside
     the Get paid card instead of pushing the row past the card edge.
     Same for any long token (email, URL) inside a notice. */
  #earn-payout .bd-refrow>span{min-width:0;overflow-wrap:anywhere}
  .bd-notice{overflow-wrap:anywhere}
}
@media (max-width:560px){
  /* Campaign header actions were gridded two-per-row at full width,
     so Edit/Delete ballooned to half the screen each. On the campaign
     page they size to their labels and wrap. */
  .bd-page--campaign .bd-detailhead__actions{display:flex;flex-wrap:wrap;gap:7px}
  .bd-page--campaign .bd-detailhead__actions>*{width:auto;flex:0 1 auto}
  .bd-page--campaign .bd-tabs__tab{padding:10px 11px}
  /* Profile campaign rows squeezed the campaign name to a sliver
     (~50px) between the nowrap stats and the Edit button. The row
     wraps now and the name keeps a readable share of the first line. */
  .bd-camp-row{flex-wrap:wrap}
  .bd-camp-row__name{flex:1 1 46%;min-width:128px}
}

/* Cohesion pass (2026-10-16): the small in-card empty state + action
   slot on the one shared emptyState, and the spacing utilities that
   replace the recurring one-off inline margins. */
.bd-empty--sm{padding:22px 16px}
.bd-empty--sm .bd-empty__icon{width:38px;height:38px;border-radius:10px}
.bd-empty--sm .bd-empty__icon svg{width:18px;height:18px}
.bd-empty--sm .bd-empty__title{font-size:14px}
.bd-empty__action{margin-top:12px}
.bd-m0{margin:0}
.bd-mt0{margin-top:0}.bd-mt4{margin-top:4px}.bd-mt6{margin-top:6px}.bd-mt10{margin-top:10px}.bd-mt12{margin-top:12px}.bd-mt14{margin-top:14px}
.bd-mb8{margin-bottom:8px}.bd-mb12{margin-bottom:12px}.bd-mb16{margin-bottom:16px}
.bd-ml-auto{margin-left:auto}
@media (max-width:560px){.bd-landing__panel-head h2{font-size:21px}}

/* Activity Log payment block (Financials › Activity Log): the composed
   description the Head Admin copies into PayPal — shown exactly as it
   copies, line breaks and all. */
.bd-payblock{white-space:pre-wrap;word-break:break-word;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px;line-height:1.55;background:var(--bd-hover);border:1px solid var(--bd-border);border-radius:9px;padding:10px 12px;color:var(--bd-ink);max-width:460px}

/* Creator Leads header: the totals strip carries an eighth tile
   ("Added to campaigns") — the same compact treatment as the seven-tile
   strip it extends, at every width that strip restacks. */
.bd-stats--8{grid-template-columns:repeat(8,minmax(0,1fr));gap:12px}
.bd-stats--8 .bd-stat{padding:14px}
.bd-stats--8 .bd-stat__value{font-size:20px;letter-spacing:-.4px}
.bd-stats--8 .bd-stat__label{font-size:11px}
.bd-stats--8 .bd-stat__sub{font-size:10.5px}
@media(max-width:1150px){.bd-stats--8{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media(max-width:900px){.bd-stats--8{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}}
@media(max-width:370px){.bd-stats--8{grid-template-columns:1fr}}
.bd-stats--10{grid-template-columns:repeat(5,minmax(0,1fr));gap:12px}
.bd-stats--10 .bd-stat{padding:14px}
.bd-stats--10 .bd-stat__value{font-size:20px;letter-spacing:-.4px}
.bd-stats--10 .bd-stat__label{font-size:11px}
.bd-stats--10 .bd-stat__sub{font-size:10.5px}
/* Creator Leads price cell: a compact inline input on desktop (the
   mobile card sizing lives with the bb-leads rules further down). */
.bd-table--leads .ld-price{width:104px;min-width:0;flex:none;padding:6px 8px;border:1px solid var(--bd-border);border-radius:8px;background:var(--bd-card);color:var(--bd-ink);font-size:13px}
.bd-table--leads .ld-videos{width:64px;min-width:0;flex:none;padding:6px 8px;border:1px solid var(--bd-border);border-radius:8px;background:var(--bd-card);color:var(--bd-ink);font-size:13px}

/* ================================================================
   CAMPAIGN SURFACES — compact phone density (Max, 2026-10-18: the
   mobile campaign views were "so enlarged it doesn't make it easy
   on mobile"). Same design, phone density: the Statistics/Payout
   creator rows become compact cards (handle + controls on one line,
   status on its own line, price/videos/views/likes/comments as a
   five-up stat strip, completion as one slim line), the campaign
   header actions shrink to a tight 2-up grid, the stat strips stay
   two-up all the way down to 360px, and the Campaigns list header
   (tiles + filter bar) stops eating multiple screens.
   Everything sits inside the ≤900px breakpoint and is scoped to
   the campaign surfaces (opt-in table classes, #camps-body,
   .bd-page--campaign), so desktop ≥901px is untouched.
   ================================================================ */
@media (max-width:900px){
  /* ---------- Statistics creator card (#cd-creators) ----------
     Column order: chev, handle, niche (desktop column only — hidden
     on the card, the niche rides the handle sub-line instead), status,
     paid date (desktop column only — hidden on the card, it rides the
     completion line instead), price, videos, completion, views,
     likes, comments, notes, actions(flag + menu). */
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow){
    display:flex;flex-wrap:wrap;align-items:center;gap:4px 9px;padding:7px 12px}
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td{
    display:block;flex:none;width:auto!important;min-width:0;height:auto!important;
    padding:0!important;border:0!important;text-align:left;font-size:12.5px;line-height:1.3}
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td::before{display:none}
  /* chevron: small inline toggle at the head of the handle line
     (the generic card pass parks it absolute at the top-right,
     where this card keeps its action buttons) */
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td.bd-chev{position:static;order:0;flex:0 0 14px;width:auto;height:auto;
    display:block;padding:0!important;font-size:12px;color:var(--bd-muted-strong);text-align:left}
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(2){order:1;flex:1 1 110px;min-width:0;padding:0!important}
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(2) .bd-cellmain{gap:9px}
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(2) .cd-handle-link strong{font-size:13.5px}
  /* actions (attention flag + row menu) close the handle line */
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(13){order:2;flex:0 0 auto}
  /* status select + notes share one utility line under the handle.
     The select sizes to its content (the native control fits its
     longest option, "Fully Paid & Posted") instead of growing across
     the whole line — Max, 2026-10-21: the full-width pill was "very
     messy and large" and the payment status ate half the creator
     line. Tightened again 2026-10-22 to the compact 30px control the
     desktop table wears (Notes keeps its own 36px). */
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(4){order:3;flex:0 1 auto;min-width:0;max-width:100%}
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(4) .bd-selwrap{width:auto;max-width:100%}
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(4) .bd-statusselect{width:auto;max-width:100%;min-height:30px;height:30px;font-size:12.5px!important;padding:0 24px 0 9px}
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(12){order:4;flex:0 0 auto}
  #cd-creators .cd-notes-btn{height:36px;min-height:36px;padding:6px 11px;font-size:13.5px}
  /* stat strip: price · videos · views · likes · comments, label over value */
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(6),#cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(7),
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(9),#cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(10),
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(11){flex:1 1 13.5%;min-width:0;font-size:13px;font-weight:600;color:var(--bd-ink)}
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(6){order:5}
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(7){order:6}
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(9){order:7}
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(10){order:8}
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(11){order:9}
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(6)::before,#cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(7)::before,
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(9)::before,#cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(10)::before,
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(11)::before{
    display:block;content:attr(data-label);margin-bottom:1px;color:var(--bd-muted);max-width:none;white-space:nowrap;
    font-size:10px;font-weight:700;letter-spacing:.3px;text-transform:uppercase}
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(6) .bd-muted-sm{font-size:10.5px;font-weight:400}
  /* completion: one slim line — "2 of 2 · 100%" + bar */
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(8){order:10;flex:1 0 100%}
  #cd-creators .cd-completion{flex-direction:row;align-items:center;gap:9px;width:auto;margin:0}
  #cd-creators .cd-completion__line{font-size:13px;white-space:nowrap}
  #cd-creators .cd-completion .bd-progress{flex:1 1 auto;max-width:none;margin-top:0;height:5px}

  /* ---------- Payout creator card (#cd-creators-payout) ----------
     Column order: creator, price, videos, payout, payment, receipt, status. */
  #cd-creators-payout>tbody>tr{
    display:flex;flex-wrap:wrap;align-items:center;gap:4px 9px;padding:7px 12px}
  #cd-creators-payout>tbody>tr>td{
    display:block;flex:none;width:auto!important;min-width:0;height:auto!important;
    padding:0!important;border:0!important;text-align:left;font-size:12.5px;line-height:1.3}
  #cd-creators-payout>tbody>tr>td::before{display:none}
  #cd-creators-payout>tbody>tr>td:nth-child(1){order:0;flex:1 1 100%;min-width:0}
  /* Batch B (2026-10-23): the status select adopts the Statistics
     spec — content-sized, 30px — and shares its line with the receipt
     actions instead of eating a full-width 36px line of its own. */
  #cd-creators-payout>tbody>tr>td:nth-child(7){order:1;flex:0 1 auto;min-width:0;max-width:100%}
  #cd-creators-payout>tbody>tr>td:nth-child(7) .bd-selwrap{width:auto;max-width:100%}
  #cd-creators-payout>tbody>tr>td:nth-child(7) .bd-statusselect{width:auto;max-width:100%;min-height:30px;height:30px;font-size:12.5px!important;padding:0 24px 0 9px}
  #cd-creators-payout>tbody>tr>td:nth-child(2),#cd-creators-payout>tbody>tr>td:nth-child(3),
  #cd-creators-payout>tbody>tr>td:nth-child(4){flex:1 1 25%;min-width:0;font-size:13px;font-weight:600;color:var(--bd-ink)}
  #cd-creators-payout>tbody>tr>td:nth-child(2){order:3}
  #cd-creators-payout>tbody>tr>td:nth-child(3){order:4}
  #cd-creators-payout>tbody>tr>td:nth-child(4){order:5}
  #cd-creators-payout>tbody>tr>td:nth-child(2)::before,#cd-creators-payout>tbody>tr>td:nth-child(3)::before,
  #cd-creators-payout>tbody>tr>td:nth-child(4)::before{
    display:block;content:attr(data-label);margin-bottom:1px;color:var(--bd-muted);max-width:none;white-space:nowrap;
    font-size:10px;font-weight:700;letter-spacing:.3px;text-transform:uppercase}
  #cd-creators-payout>tbody>tr>td:nth-child(5){order:6;flex:1 1 auto;min-width:0}
  #cd-creators-payout>tbody>tr>td:nth-child(5)>div{display:inline;margin-left:6px}
  #cd-creators-payout>tbody>tr>td:nth-child(6){order:2;flex:0 0 auto;display:flex!important;align-items:center;gap:6px}
  #cd-creators-payout>tbody>tr>td:nth-child(6) .bd-mt4{margin-top:0}
  /* Batch B round 2: the receipt-download wrapper joins the flex line
     instead of stacking the second button under Print receipt */
  #cd-creators-payout>tbody>tr>td:nth-child(6)>div{display:contents}
  #cd-creators-payout .bd-btn--sm{height:34px;min-height:34px;padding:5px 10px}

  /* ---------- campaign detail: header + stat strips ---------- */
  .bd-page--campaign .bd-backlink{margin-bottom:2px;font-size:12.5px}
  .bd-page--campaign .bd-campaignimg{width:44px;height:44px;border-radius:11px;font-size:16px}
  .bd-page--campaign .bd-detailtitle{font-size:19px;line-height:1.12}
  .bd-page--campaign .bd-detailmeta{font-size:11.5px;line-height:1.35;margin-top:3px}
  .bd-page--campaign .bd-detailhead{gap:8px}
  .bd-page--campaign .bd-detailhead__actions{gap:5px}
  .bd-page--campaign .bd-detailhead__actions .bd-btn{min-height:38px;padding:7px 10px;font-size:12px;border-radius:9px}
  .bd-page--campaign .bd-stats,.bd-page--campaign .bd-stats--4,.bd-page--campaign .bd-stats--7{
    grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}
  .bd-page--campaign .bd-stat{padding:9px 10px;border-radius:11px;min-height:0}
  .bd-page--campaign .bd-stat__label{font-size:9.5px;min-height:0;line-height:1.25}
  .bd-page--campaign .bd-stat__value{font-size:16px;margin-top:2px;clear:none}
  .bd-page--campaign .bd-stat__sub{font-size:9.5px;line-height:1.3;margin-top:2px}
  .bd-page--campaign .bd-stat .bd-progress{margin-top:5px;height:5px}

  /* ---------- Campaigns list: compact tiles + filter bar ---------- */
  #camps-body .bd-stats{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}
  #camps-body .bd-stat{padding:7px 9px;border-radius:11px;min-height:0;display:flex;align-items:center;gap:8px}
  #camps-body .bd-stat__icon{width:24px;height:24px;margin:0;float:none;flex:none}
  #camps-body .bd-stat__icon svg{width:13px;height:13px}
  #camps-body .bd-stat__body{min-width:0}
  #camps-body .bd-stat__label{font-size:9.5px;min-height:0;line-height:1.25}
  #camps-body .bd-stat__value{font-size:15px;margin-top:1px;clear:none}
  #camps-body .bd-stat__sub{font-size:9.5px;line-height:1.3;margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  #camps-body .bd-filterbar--camps{display:grid;grid-template-columns:1fr 1fr;gap:5px;padding:8px;border-radius:11px}
  #camps-body .bd-filterbar--camps .bd-search{grid-column:1/-1;min-width:0}
  #camps-body .bd-filterbar--camps .bd-search input{height:38px;width:100%;min-width:0}
  #camps-body .bd-filterbar--camps select{width:100%;min-width:0;height:38px;padding:0 8px}
  #camps-body .bd-filterbar--camps .bd-filterbar__spacer{display:none}
  #camps-body .bd-filterbar--camps #camp-help{grid-column:1;min-height:32px;justify-content:center;padding:5px 6px;font-size:10.5px;white-space:nowrap}
  #camps-body .bd-filterbar--camps #camp-count{grid-column:2;min-height:32px;justify-content:center;padding:5px 6px;font-size:10.5px;white-space:nowrap}
}

/* ================================================================
   POSTED-VIDEOS LIST — its own compact phone layout (Max,
   2026-10-21). The expansion's inner table used to fall through to
   the generic label/value card reflow, which stacked every post
   ~280px tall AND labelled its cells with the OUTER creators
   table's headers (the date read "Handle", views read "Niche",
   likes "Status", comments "Paid Date" — the stamper bug is fixed
   in app.js too; this block makes the list right even before
   labels: no borrowed ::before labels at all). One line per post:
   platform chip · posted date · views · likes · comments · View.
   Scoped to .bd-table--posts (only creatorPostsHtml's table), so
   the other .bd-table--inner surfaces are untouched; desktop
   ≥901px never sees any of it.
   ================================================================ */
@media (max-width:900px){
  .bd-table--posts{display:block;width:100%}
  .bd-table--posts thead{display:none}
  .bd-table--posts tbody{display:block}
  .bd-table--posts tbody tr{display:flex;align-items:center;flex-wrap:wrap;gap:5px 10px;width:auto;padding:8px 2px;border-bottom:1px solid var(--bd-line-soft,#eef0ed)}
  .bd-table--posts tbody tr:last-child{border-bottom:0}
  .bd-table--posts tbody td{display:block!important;width:auto!important;min-width:0;height:auto!important;min-height:0;padding:0!important;border:0!important;text-align:left!important;font-size:12px;line-height:1.35;white-space:nowrap}
  .bd-table--posts tbody td::before{display:none!important}
  .bd-table--posts .cdp-date{color:var(--bd-muted-strong);font-weight:600}
  .bd-table--posts .cdp-views,.bd-table--posts .cdp-likes,.bd-table--posts .cdp-comments{font-weight:600;color:var(--bd-ink)}
  .bd-table--posts .cdp-views::after{content:" views"}
  .bd-table--posts .cdp-likes::after{content:" likes"}
  .bd-table--posts .cdp-comments::after{content:" comments"}
  .bd-table--posts .cdp-views::after,.bd-table--posts .cdp-likes::after,.bd-table--posts .cdp-comments::after{color:var(--bd-muted);font-weight:400;font-size:11px}
  .bd-table--posts .cdp-link{margin-left:auto}
  .bd-table--posts .cdp-link .bd-linkbtn{font-size:12px;white-space:nowrap}
}

/* ================================================================
   CREATOR CARDS — scale consistency, pass 2 (Max, 2026-10-19: pass 1
   compacted the card but "some things are enlarged and some are
   smaller" — the status select still rendered at the global 16px
   form size inside a 40px pill, the stat labels sat at 8.5px next
   to 13px values, and the avatar initials rode clipped at the
   circle's top-left). One scale inside the creator cards now:
   controls 37px tall / 13.5px text, stat labels 10px, values and
   the completion line 13px, flag + row-menu buttons 36px.
   ================================================================ */

/* Avatar initials centring (all widths): .bd-cellmain span{display:block}
   out-specifies .bd-avatar's own inline-flex, so initials inside a
   cell-main rendered as a block box with the text at its top-left —
   clipped at the circle's edge on desktop and mobile alike. Restore
   the component's flex centring wherever the avatar sits in a
   cell-main (Statistics/Payout creator cells, portal creator rows). */
.bd-cellmain .bd-avatar{display:inline-flex;align-items:center;justify-content:center}

/* Attention badge (Campaigns list: "⚑ n need attention", the
   per-creator flag system's chip): the pale-pink wash was hard to
   see on the dark theme.
   Strong red from the Refund Request family with bold white text.
   The name-scoped rule out-ranks .bd-campaign__name span's muted
   colour, which otherwise wins inside the campaign name cell. */
.bd-badge--attention{background:#c0392b;color:#fff;font-weight:700}
.bd-campaign__name .bd-badge--attention{color:#fff}
[data-theme="dark"] .bd-badge--attention{background:#c0392b;color:#fff}

/* The profile/group name rides in its own span (for the mobile
   ellipsis below); keep it on the link's own typography — the
   generic .bd-cellmain span rule would otherwise hand it a 2px top
   margin and the cell's muted size/colour. */
.cd-profile-link .cd-profile-link__name{margin-top:0;font-size:inherit;color:inherit}

/* Row-menu item with nothing behind it yet (e.g. Download receipt
   before any receipt is filed): greyed, not clickable. */
.cd-rowmenu-pop button:disabled{opacity:.5;color:var(--bd-muted);cursor:not-allowed}
.cd-rowmenu-pop button:disabled:hover{background:transparent}

@media (max-width:900px){
  /* flag + row menu join the card's control scale (were 32px / 40px) */
  #cd-creators .cd-attn-btn{width:36px;height:36px}
  #cd-creators .cd-rowmenu-btn{width:36px;height:36px;min-width:36px;min-height:36px}
  /* notes count badge shrinks with its button */
  #cd-creators .cd-notes-count{display:inline-flex;align-items:center;justify-content:center;
    height:16px;min-width:16px;padding:0 5px;font-size:10px;border-radius:8px}
  /* profile/group sub-line: one line, ellipsis (full name in its title) */
  #cd-creators td:nth-child(2) .cd-profile-link,
  #cd-creators-payout td:nth-child(1) .cd-profile-link{max-width:100%;min-width:0}
  .cd-profile-link__name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
  .cd-profile-link__ic{flex:none}
  /* Statistics header filter matches the card's title scale, not the
     16px form size: 13px text in a 32px select */
  #cd-statusfilter{font-size:13px!important;height:32px}
}

/* ================================================================
   PHONE DENSITY, pass 3 (Max, 2026-10-19: go further — the list
   chrome still eats the first screen, the Overview tiles are tall
   cards, and the Statistics card should fit ~3 to a screen).
   ≤900px only; desktop geometry untouched.
   ================================================================ */
@media (max-width:900px){
  /* ---------- Campaigns list chrome ---------- */
  .bd-topbar:has(#camp-new){gap:8px;padding-top:12px}
  .bd-topbar:has(#camp-new) .bd-topbar__title h1{font-size:23px}
  .bd-topbar:has(#camp-new) .bd-topbar__title p{font-size:12px;margin-top:3px;line-height:1.35}
  .bd-topbar__controls:has(#camp-new){flex-direction:row;align-items:stretch;gap:8px;width:100%}
  #camp-new,#camp-import{flex:1 1 0;width:auto;height:40px;min-height:40px;padding:9px 12px;font-size:13px;justify-content:center}

  /* ---------- Campaign Overview tile strips ---------- */
  /* header strip (7 tiles, or 4 on CPV/comms): 3-up compact tiles */
  .bd-page--campaign > .bd-stats{grid-template-columns:repeat(3,minmax(0,1fr));gap:5px}
  .bd-page--campaign > .bd-stats .bd-stat{padding:4px 8px}
  .bd-page--campaign > .bd-stats .bd-stat__label{font-size:9px;line-height:1.1;min-height:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .bd-page--campaign > .bd-stats .bd-stat__value{font-size:17px;line-height:1.05;margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .bd-page--campaign > .bd-stats .bd-stat__sub{font-size:9px;line-height:1.15;margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .bd-page--campaign > .bd-stats .bd-stat .bd-progress{margin-top:3px;height:3px}
  /* payout tracker tiles: same type scale, stays 2-up */
  .bd-page--campaign .bd-card .bd-stats--4{gap:5px}
  .bd-page--campaign .bd-card .bd-stats--4 .bd-stat{padding:5px 8px}
  .bd-page--campaign .bd-card .bd-stats--4 .bd-stat__label{font-size:9px;line-height:1.15;min-height:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .bd-page--campaign .bd-card .bd-stats--4 .bd-stat__value{font-size:15px;line-height:1.15;margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .bd-page--campaign .bd-card .bd-stats--4 .bd-stat__sub{font-size:9px;line-height:1.2;margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

  /* ---------- Statistics card: per-video price rides the value line ---------- */
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(6){flex-grow:1.7;flex-basis:28%}
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(6),
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(7),
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(9),
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(10),
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(11){white-space:nowrap!important}
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(6) .bd-muted-sm{display:inline;margin-left:5px}
  /* handle line + completion line tighten to the card's line scale */
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(2) .cd-handle-link strong{line-height:1.22}
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(2) .cd-profile-link{margin-top:1px}
  #cd-creators .cd-completion__line{line-height:1.2}
}

/* ================================================================
   PHONE DENSITY, pass 4 (2026-10-19): passes 1-3 compacted the
   Overview TILES, but the cards framing them kept desktop chrome —
   17-22px card padding, a 17px card head with an 18px gap, and a
   240px chart block — so the tab still read roomy on a phone, and
   the tracker ran a smaller type scale (15px values / 9px labels)
   than the header strip (17px). One frame + one scale across the
   Overview. ≤900px only; desktop geometry untouched.
   ================================================================ */
@media (max-width:900px){
  /* card frame on the campaign page matches the compact tiles */
  .bd-page--campaign .bd-card{padding:10px 12px}
  .bd-page--campaign .bd-card--flush{padding:0}
  .bd-page--campaign .bd-card__head{margin-bottom:10px}
  .bd-page--campaign .bd-card__head h3{font-size:15px}
  .bd-page--campaign .bd-card__sub{font-size:11px;line-height:1.3;margin-top:2px}
  /* header strip + payout tracker tiles: same padding, and the
     tracker joins the header's 17px value scale */
  .bd-page--campaign .bd-card .bd-stats--4{gap:6px;margin-bottom:6px}
  .bd-page--campaign .bd-card .bd-stats--4 .bd-stat{padding:4px 9px}
  .bd-page--campaign .bd-card .bd-stats--4 .bd-stat__label{font-size:9.5px;line-height:1.15}
  .bd-page--campaign .bd-card .bd-stats--4 .bd-stat__value{font-size:17px;line-height:1.1;margin-top:1px}
  .bd-page--campaign .bd-card .bd-stats--4 .bd-stat__sub{font-size:9.5px;line-height:1.2}
  .bd-page--campaign .bd-card .bd-progress{margin-top:6px}
  /* performance card: seg control + chart on the phone scale
     (the canvas itself is drawn shorter by drawLine's h option) */
  .bd-page--campaign .bd-seg__btn{padding:6px 12px;font-size:12px}
  .bd-page--campaign .bd-chart{min-height:158px}
}

/* ================================================================
   PHONE TAPS, pass 5 (2026-10-19): two tap targets on the campaign
   page fought the user. (1) On a Statistics card, taps meant for
   the card kept landing on the two small links inside its identity
   block — the creator's name is an external social link (a tap on
   it left the app) and the profile line under it opens the Bloom
   Profile popup. Worse, mobile browsers' touch adjustment snaps a
   tap to the nearest clickable element, so even taps BESIDE the
   name were retargeted onto those links and the posts dropdown
   never toggled. At phone widths, inside the Statistics table
   only, both links are inert: the whole identity block toggles the
   row like the rest of the card. (The Payout table is untouched —
   its handle and profile line still work, and desktop is as
   before.) (2) The campaign tab strip clipped its last tab
   off-screen at 360px (and on 5-tab CPV campaigns at any phone
   width): a flex row with no overflow — the clipped tab could not
   be tapped at all. It scrolls now. The posts chevron also gets a
   real touch target (the generic card reflow's 44px cell was
   overridden static by the Statistics card's own rules).
   ≤900px only.
   ================================================================ */
@media (max-width:900px){
  #cd-creators .cd-handle-link,
  #cd-creators .cd-handle-link *,
  #cd-creators .cd-profile-link,
  #cd-creators .cd-profile-link *{pointer-events:none}
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td.cd-posts-toggle{width:34px;height:34px;min-width:34px;min-height:34px;display:flex;align-items:center;justify-content:center;font-size:15px}
  #cd-tabs{overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch}
  #cd-tabs::-webkit-scrollbar{display:none}
  #cd-tabs .bd-tabs__tab{flex:0 0 auto}
}

/* ================================================================
   Mobile pass 6 (2026-10-19) — fixes measured on the REAL page
   (production assets + live campaign 394 payload), not fixtures:
   1) Statistics card: the status cell's flex-basis calc(100% - 118px)
      plus the real 111px "Add note" button and the 9px row gap
      overflowed its line by ~2px at EVERY width — Notes wrapped onto
      the stat line, the status select stretched full-width on its own
      row, and Likes/Comments spilled onto a fourth line (188px card).
      Status now flexes from a 0 basis (always fits beside Notes) and
      the five stats share one equal-column strip.
   2) Top bar: the floating menu chip (fixed, z-42) clipped card
      titles scrolled to the top of the screen ("…tistics"). It is
      now a full-width fixed top bar and .bd-main reserves its height,
      so heads are never half-hidden behind it.
   ================================================================ */
@media (max-width:900px){
  /* --- Statistics creator card: status + notes on ONE line ---
     Line-breaking uses flex BASE sizes: status basis leaves exactly
     Notes (111px) + gap (8px); the strip's own bases (26%/13%) are
     what push it onto the next line — with 0 bases it piles onto the
     status line and overlaps. */
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow){gap:5px 8px;padding:8px 12px}
  /* 2026-10-21: the cell no longer flexes across the line — Max found
     the grown pill "very messy and large"; it now hugs the compact
     content-width select (pass-1 block above). Notes still always
     fits beside it (164 + 105 + gaps « line width), and the strip's
     bases still push it to its own line. */
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(4){flex:0 1 auto;min-width:0}
  /* --- stat strip: five columns, one line; price wider for $/video --- */
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(6){flex:1.6 1 26%;min-width:0}
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(7),
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(9),
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(10),
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(11){flex:1 1 13%;min-width:0}
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(6)::before,
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(7)::before,
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(9)::before,
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(10)::before,
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(11)::before{font-size:9.5px;letter-spacing:.2px}
  /* --- taps: no double-tap zoom/gesture delay on card rows --- */
  #cd-creators>tbody>tr{touch-action:manipulation}
  /* --- top bar (was a floating chip) --- */
  .bd-mobile-menu{top:0;left:0;width:100%;height:calc(env(safe-area-inset-top,0px) + 52px);
    padding:env(safe-area-inset-top,0px) 12px 0;border:0;border-bottom:1px solid var(--bd-border);
    border-radius:0;background:var(--bd-card);box-shadow:none;justify-content:flex-start;z-index:46}
  .bd-mobile-nav-open .bd-mobile-menu{left:0;top:0;background:transparent;border-bottom:0;box-shadow:none}
  .bd-main{padding-top:calc(env(safe-area-inset-top,0px) + 52px)}
  .bd-main .bd-card{scroll-margin-top:calc(env(safe-area-inset-top,0px) + 60px)}
  #cd-tabs{scroll-margin-top:calc(env(safe-area-inset-top,0px) + 56px)}
  /* the one in-main sticky bar rides below the top bar when stuck */
  .bd-selbar{top:calc(env(safe-area-inset-top,0px) + 52px)}
}

/* ================================================================
   NICHE on the Statistics creator rows (2026-10-20): desktop shows
   the booking's niche in its own column (see the #cd-creators block
   above); the phone card has no room for a column, so the column
   cell leaves the card layout and the niche appears as a segment on
   the identity sub-line instead ("Profile name · Music Edits").
   The sub-line is a flex row whose two segments both shrink with
   ellipsis, so the card keeps its height; a booking with no niche
   renders no segment. ≤900px only beyond the base rules above.
   ================================================================ */
@media (max-width:900px){
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td.cd-niche-cell{display:none!important}
  #cd-creators .cd-subline .cd-profile-link{flex:0 1 auto;min-width:0}
  #cd-creators .cd-niche-inline{display:block;flex:0 1 auto;min-width:0;
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
}
/* PAID DATE on the Statistics creator rows (2026-10-20): same pattern
   as the niche above — desktop shows the date in its own column (see
   the #cd-creators block above); the phone card drops the column cell
   and the date rides the completion line as "· Paid Oct 19", rendered
   only for bookings a paid Activity Log entry stands behind, so the
   card keeps its height. ≤900px only. */
@media (max-width:900px){
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td.cd-paiddate-cell{display:none!important}
  #cd-creators .cd-paid-inline{display:inline}
}
/* Ready to Pay column (Campaigns list, 2026-10-20): the total standing in
   Ready for Payment per campaign, drawn from the list payload's
   ready_to_pay_total / ready_to_pay_count. Amber — the Ready for Payment
   workflow tone — when money is waiting; a muted $0 when nothing is
   ready, so the column compares at a glance. On phones the metric cells
   hide (the standing ≤900px reflow), so the figure rides the name cell
   as a small line and is only rendered when money is actually ready —
   a zero campaign's card does not grow. */
.bd-num--amber{color:#c07f1a;font-weight:700}
.bd-num--muted{color:var(--bd-muted);font-weight:600}
.bd-campaign__readyline{display:none}
@media (max-width:900px){
  .bd-campaign__readyline{display:block}
  .bd-campaign__readyline .bd-readyline__amt{color:#c07f1a;font-weight:700}
}

/* Financials Activity Log fit (2026-10-20): fixed table layout keeps every
   column and the full actions cell inside the viewport — no sideways
   cut-off at desktop widths. The payment block wraps visually inside its
   column; the copied text is untouched. Compact pass (same day, after
   Max's live screenshot): top-aligned cells, tighter padding, a slimmer
   payment block and a one-line receipt drop zone so rows stay short at
   every width; the campaign filter select is width-capped so a long
   campaign name can't stretch the toolbar. */
.fin-act-table{table-layout:fixed;width:100%}
.fin-act-table th,.fin-act-table td{min-width:0;vertical-align:top}
.fin-act-table td{padding-top:10px;padding-bottom:10px}
.fin-act-table .bd-payblock{max-width:none;font-size:12px;line-height:1.5;padding:8px 10px}
.fin-act-table .bd-dropzone--mini{min-width:0;gap:8px;padding:6px 9px;margin-top:6px;border-radius:9px}
.fin-act-table .bd-dropzone--mini .bd-dropzone__prev{width:28px;height:28px;border-radius:7px;flex:none}
.fin-act-table .bd-dropzone--mini .bd-dropzone__main{min-width:0}
.fin-act-table .bd-dropzone--mini .bd-dropzone__title{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fin-act-table .bd-dropzone--mini .bd-dropzone__hint{display:none}
/* Upload boxes (Receipt / Payment error pair): taller than the
   one-line mini zone's text but a single box tall for the pair —
   min-height pins each box ≥32px and titles wrap inside their box
   instead of truncating on one line. */
.fin-act-table .fin-act-actions .bd-actbox{min-height:36px;align-items:center;justify-content:center;text-align:center;padding:5px 4px}
.fin-act-table .bd-actboxes .bd-actbox{margin-top:0}
.fin-act-table .fin-act-actions .bd-actbox .bd-dropzone__title{white-space:normal;overflow:visible;text-overflow:clip;font-size:10.5px;line-height:1.2}
.fin-act-table .fin-act-actions .bd-actbox--error{border-color:color-mix(in srgb, var(--bd-pink, #d6336c) 45%, var(--bd-border))}
.fin-act-actions .bd-btn{margin-bottom:4px}
#fin-act-campaign{max-width:320px;min-width:0;text-overflow:ellipsis}
@media (max-width:900px){
  #fin-act-campaign{width:calc(100vw - 90px);max-width:calc(100vw - 90px)}
  .fin-act-table .bd-payblock{flex:1 1 auto;min-width:0;text-align:left}
  .fin-act-table .fin-act-actions{justify-content:flex-start!important;text-align:left!important}
}

/* === Campaign performance (Home): the merged Live Campaigns table.
   The card carries ONLY four stats at every width (Max, 2026-10-25:
   the fuller card was too much information) — Total Views · Growth ·
   New 24h · Cost per Video — beside Campaign, Client, the Updated
   note and the LIVE/ENDED pill. Everything else lives on the campaign
   page and the Campaigns list. Rows are compact: a two-line name
   cell (ellipsized name over one muted meta line), a 34px tile and
   slim cell padding keep a desktop row near 60px. === */
.bd-perfhead{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.bd-table--perf .bd-cellmain{min-width:170px}
.bd-table--perf .bd-cellmain>div{min-width:0}
.bd-table--perf tbody td{padding:8px 14px}
.bd-table--perf .bd-tile{width:34px;height:34px;border-radius:9px;font-size:14px}
.bd-table--perf .bd-cellmain{gap:10px}
.bd-table--perf .bd-perfnameline{display:flex;align-items:center;gap:8px;min-width:0}
.bd-table--perf .bd-perfname{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bd-table--perf .bd-perfmeta{display:flex;align-items:center;gap:7px;min-width:0;font-size:12px}
.bd-table--perf .bd-perfmeta__text{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:12px;margin-top:0}
.bd-table--perf .bd-perfmeta .bd-badge{flex:none;margin-top:0}
.bd-perfupd-short{display:none}
@media(max-width:900px){
  .bd-tablewrap--perf{overflow:visible}
  /* Stacked campaign cards (Batch A, 2026-10-23 — mobile audit
     Finding #1): the trimmed real table still measured 561px wide in
     a 430px viewport with a non-scrolling wrapper, so everything past
     Growth was clipped and numbers wrapped mid-token ("790.0K" over
     2–4 lines). Phones now get the Statistics/Creators card treatment.
     Hierarchy pass (2026-10-25, Max: the four-up label/value grid
     still read crammed — Ready to Pay ink spilled into the Updated
     cell and the attention badge truncated against the name): line 1
     = tile + name (clean ellipsis) + LIVE/ENDED pill, with the
     attention badge moved into the meta line where it can never be
     squeezed; then ONE primary row (Total views · Growth · New 24h,
     even columns, larger type); then the secondary figures as inline
     text strips (label + value pairs flowing and wrapping as text,
     not grid cells); the footer line pairs the progress bar with a
     short right-aligned Updated note. The whole card stays the row
     link. ≥901px keeps the full table.
     Trimmed to the four stats (2026-10-25, Max: still too much
     information): the secondary strips and the progress footer are
     gone — the primary row is now four even columns (Total views ·
     Growth · New 24h · Cost per video, its label shortened to
     COST/VIDEO so it can never press against the value at 390px),
     and the Updated note sits alone on the footer line, quiet and
     right-aligned, where the progress bar used to be. */
  .bd-table--perf{display:block;width:100%;min-width:0;max-width:100%}
  .bd-table--perf thead{display:none}
  .bd-table--perf tbody{display:block}
  .bd-table--perf tr{display:block;width:auto;padding:11px 12px;border-bottom:1px solid var(--bd-border)}
  .bd-table--perf tr.bd-table__rowlink{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px}
  .bd-table--perf td{display:block!important;flex:none;width:auto!important;min-width:0;height:auto!important;padding:0!important;border:0!important;text-align:left!important;font-size:12.5px;line-height:1.3;white-space:nowrap!important}
  .bd-table--perf td::before{display:none}
  /* line 1: campaign identity + status pill ONLY — the basis leaves
     room for the pill and nothing else, so the first stat can never
     squeeze up beside the name (at a 21% basis it could shrink-fit
     next to a narrow pill, splitting the stat row 1 + 3); the four
     stats always start together on their own line. */
  .bd-table--perf td:nth-child(1){order:0;flex:1 1 calc(100% - 76px);min-width:0;white-space:normal;padding-bottom:0!important}
  .bd-table--perf .bd-cellmain{min-width:0;gap:9px}
  .bd-table--perf .bd-cellmain>div{flex:1;min-width:0}
  .bd-table--perf .bd-tile{width:30px;height:30px;border-radius:8px;font-size:13px}
  .bd-table--perf .bd-perfname{font-size:13.5px}
  .bd-table--perf .bd-perfmeta{margin-top:2px}
  .bd-table--perf td.perf-c-status{order:1;flex:0 0 auto}
  /* THE four stats: Total views · Growth · New 24h · Cost per video —
     one clean row of four even columns, label over value, values a
     step larger than everything else on the card. Even columns keep
     each value on its own line with nothing to collide with. The
     client cell stays hidden (it is named in the portal, not this
     card). Cost per Video's stamped label ("Cost per Video") is
     wider than a 390px column at this size, so the phone card
     shortens it to COST/VIDEO — same stat, legible. */
  .bd-table--perf td.perf-c-client{display:none!important}
  .bd-table--perf td:nth-child(3),.bd-table--perf td:nth-child(4),.bd-table--perf td:nth-child(5),.bd-table--perf td:nth-child(6){flex:1 1 21%;min-width:0;font-size:15px}
  .bd-table--perf td:nth-child(3){order:2}
  .bd-table--perf td:nth-child(4){order:3}
  .bd-table--perf td:nth-child(5){order:4}
  .bd-table--perf td:nth-child(6){order:5}
  .bd-table--perf td:nth-child(3)::before,.bd-table--perf td:nth-child(4)::before,.bd-table--perf td:nth-child(5)::before,.bd-table--perf td:nth-child(6)::before{
    display:block;content:attr(data-label);margin-bottom:1px;color:var(--bd-muted);font-size:10px;font-weight:700;letter-spacing:.3px;text-transform:uppercase;white-space:nowrap}
  .bd-table--perf td:nth-child(6)::before{content:"COST/VIDEO"}
  /* footer line: the Updated note alone, quiet and right-aligned
     where the progress bar used to sit — the full date span hides on
     phones, the short "Updated Oct 25, 4:19 AM" span shows, nowrap
     so it can never wrap. */
  .bd-table--perf td:nth-child(7){order:6;flex:0 1 auto;min-width:min-content;margin-left:auto;text-align:right!important;white-space:nowrap!important}
  .bd-table--perf td:nth-child(7)::before{display:none}
  .bd-table--perf .bd-perfupd-full{display:none}
  .bd-table--perf .bd-perfupd-short{display:inline;font-size:11px;color:var(--bd-muted);white-space:nowrap}
}

/* === Creators list (Bloom Profiles): the handle is a real profile link
   (socialLinkHtml) that keeps the row's ink look; on phones the row
   compacts to two lines instead of the generic stacked label/value
   cards — line 1 avatar + @handle + niche, line 2 one muted meta line.
   Desktop rendering is untouched. === */
#cd-creatorlist .bd-table__handle a{color:inherit;text-decoration:none}
#cd-creatorlist .bd-table__handle a:hover{text-decoration:underline}
@media(max-width:900px){
  #cd-creatorlist tr.bd-rowlink{display:grid;grid-template-columns:auto auto 1fr auto;align-items:center;gap:2px 7px;padding:10px 34px 10px 14px;position:relative;width:auto}
  #cd-creatorlist tr.bd-rowlink>td{display:block;width:auto;min-width:0;padding:0!important;border:0;white-space:normal;text-align:left}
  #cd-creatorlist tr.bd-rowlink>td::before{display:none}
  #cd-creatorlist tr.bd-rowlink>td:nth-child(1){grid-column:1/4;grid-row:1}
  #cd-creatorlist tr.bd-rowlink>td:nth-child(2){grid-column:4/5;grid-row:1;justify-self:end}
  #cd-creatorlist tr.bd-rowlink>td:nth-child(3){grid-column:1/2;grid-row:2}
  #cd-creatorlist tr.bd-rowlink>td:nth-child(4){grid-column:2/3;grid-row:2}
  #cd-creatorlist tr.bd-rowlink>td:nth-child(5){grid-column:3/4;grid-row:2}
  #cd-creatorlist tr.bd-rowlink>td:nth-child(3),
  #cd-creatorlist tr.bd-rowlink>td:nth-child(4),
  #cd-creatorlist tr.bd-rowlink>td:nth-child(5){font-size:12px;color:var(--bd-muted);line-height:1.35}
  #cd-creatorlist tr.bd-rowlink>td:nth-child(3)::after{content:" campaigns"}
  #cd-creatorlist tr.bd-rowlink>td:nth-child(4)::before{content:"· ";display:inline}
  #cd-creatorlist tr.bd-rowlink>td:nth-child(4)::after{content:" views"}
  #cd-creatorlist tr.bd-rowlink>td:nth-child(5)::before{content:"· ";display:inline}
  #cd-creatorlist tr.bd-rowlink>td:nth-child(5) .cl-prog{display:inline;max-width:none}
  #cd-creatorlist tr.bd-rowlink>td:nth-child(5) .cl-prog__line{display:inline-flex;gap:5px;white-space:nowrap}
  #cd-creatorlist tr.bd-rowlink>td:nth-child(5) .cl-prog__frac{display:none}
  #cd-creatorlist tr.bd-rowlink>td:nth-child(5) .cl-prog__line strong{font-size:12px;color:var(--bd-muted)}
  #cd-creatorlist tr.bd-rowlink>td:nth-child(5) .bd-progress{display:none}
  #cd-creatorlist tr.bd-rowlink::after{content:"›";position:absolute;right:12px;top:9px;font-size:19px;line-height:1;color:var(--bd-muted);transition:transform .15s}
  #cd-creatorlist tr.bd-rowlink--open::after{transform:rotate(90deg)}
  #cd-creatorlist tr.bd-rowexpand{display:block}
}

/* === Financials Activity Log — phone accordion (Batch A, 2026-10-23,
   mobile audit Finding #2): an entry stacked 662px tall (label over
   value × 7 cells) — the 131-entry Ready queue ran ~86,700px — and
   the table track measured 404px inside its ~380px card. On phones
   each entry is a collapsed card: line 1 creator · amount · status,
   line 2 campaign + video count, the No-PayPal flag when present —
   and the payment block, marked-by line and every action (copy,
   mark paid / revert, receipt upload + drop zone) live behind the
   row's chevron toggle, one entry open at a time (the toggle state
   is viewFinancialsActivity's actOpenId, kept across in-place
   restamps). Desktop keeps the table; the toggle is display:none
   there. === */
.fin-act-toggle{display:none}
@media(max-width:900px){
  .fin-act-wrap{overflow:visible;max-width:100%}
  .fin-act-table{display:block;width:100%;min-width:0;max-width:100%}
  .fin-act-table tbody{display:block}
  .fin-act-table tr[data-act-row]{display:flex;flex-wrap:wrap;align-items:center;gap:5px 10px;width:auto;padding:11px 48px 11px 12px;position:relative;border-bottom:1px solid var(--bd-border)}
  .fin-act-table tr[data-act-row]>td{display:block!important;flex:none;width:auto!important;min-width:0;height:auto!important;padding:0!important;border:0!important;text-align:left!important;font-size:12.5px;line-height:1.35;white-space:nowrap}
  .fin-act-table tr[data-act-row]>td::before{display:none}
  .fin-act-toggle{display:inline-flex;align-items:center;justify-content:center;position:absolute;right:8px;top:8px;width:36px;height:36px;border:0;border-radius:9px;background:transparent;color:var(--bd-muted-strong);cursor:pointer}
  .fin-act-toggle svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:2;transition:transform .15s}
  .fin-act-table tr.fin-act-open .fin-act-toggle svg{transform:rotate(180deg)}
  /* line 1: creator · amount · status */
  .fin-act-table td[data-label="Creator"]{order:0;flex:1 1 26%;min-width:0;overflow:hidden;text-overflow:ellipsis}
  .fin-act-table td[data-label="Creator"] strong{font-size:13.5px}
  .fin-act-table td[data-label="Amount"]{order:1;flex:0 0 auto}
  .fin-act-table td[data-label="Amount"] strong{font-size:13.5px}
  .fin-act-table td[data-label="Amount"] .bd-muted-sm{display:inline;margin-left:6px}
  .fin-act-table td[data-label="Status"]{order:2;flex:0 0 auto}
  /* line 2: campaign, one line (platform rides along inline) */
  .fin-act-table td[data-label="Campaign"]{order:3;flex:1 1 100%;min-width:0;overflow:hidden;text-overflow:ellipsis}
  .fin-act-table td[data-label="Campaign"] .bd-muted-sm{display:inline;margin-left:6px}
  /* collapsed: from the payment cell only the No-PayPal flag survives */
  .fin-act-table tr:not(.fin-act-open) td[data-label="Payment"]{display:none!important}
  .fin-act-table tr:not(.fin-act-open) td[data-label="Payment"]:has(.fin-act-noemail){display:block!important;order:4;flex:1 1 100%}
  .fin-act-table tr:not(.fin-act-open) td[data-label="Payment"] .bd-payblock{display:none}
  .fin-act-table .fin-act-noemail{margin-top:0!important}
  .fin-act-table tr:not(.fin-act-open) td[data-label="Marked by"],
  .fin-act-table tr:not(.fin-act-open) td.fin-act-actions{display:none!important}
  /* expanded: payment block, marked-by and actions stack full width */
  .fin-act-table tr.fin-act-open td[data-label="Payment"]{order:5;flex:1 1 100%;white-space:normal}
  .fin-act-table tr.fin-act-open td[data-label="Marked by"]{order:6;flex:1 1 100%;white-space:normal}
  .fin-act-table tr.fin-act-open td.fin-act-actions{order:7;flex:1 1 100%;white-space:normal}
  .fin-act-table .bd-payblock{white-space:normal}
}

/* === CPV Submissions review — phone cards (Batch A, 2026-10-23,
   mobile audit Finding #3): rows stacked 510px tall, the handle
   printed twice (the payload's creator name IS the handle) and
   Approve/Reject sat at the bottom of every card. Phones get a
   compact card: handle once + status pill, a chip line (platform ·
   post link · views · counted · earned · date), the audio line, and
   the review actions pinned in a 44px row. The review handlers key
   on the buttons' classes, which are unchanged. Desktop untouched. === */
@media(max-width:900px){
  .cpv-sub-table{display:block;width:100%;min-width:0;max-width:100%}
  .cpv-sub-table tbody{display:block}
  .cpv-sub-table tr{display:flex;flex-wrap:wrap;align-items:center;gap:5px 10px;width:auto;padding:10px 12px;border-bottom:1px solid var(--bd-border)}
  .cpv-sub-table td{display:block!important;flex:none;width:auto!important;min-width:0;height:auto!important;padding:0!important;border:0!important;text-align:left!important;font-size:12.5px;line-height:1.35;white-space:nowrap}
  .cpv-sub-table td::before{display:none}
  /* line 1: handle once (the duplicate name line hides — it repeats
     the handle) + status pill */
  .cpv-sub-table td.cpv-c-creator{order:0;flex:1 1 38%;min-width:0;overflow:hidden}
  .cpv-sub-table td.cpv-c-creator strong{display:none}
  .cpv-sub-table td.cpv-c-creator .bd-muted-sm{margin:0;font-size:13px;font-weight:600;color:var(--bd-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .cpv-sub-table td.cpv-c-status{order:1;flex:0 1 auto;min-width:0}
  .cpv-sub-table td.cpv-c-status .cpv-reason{white-space:normal;overflow-wrap:anywhere}
  /* chip line: platform · post · views · counted · earned · date */
  .cpv-sub-table td.cpv-c-platform{order:2;flex:0 0 auto}
  .cpv-sub-table td.cpv-c-post{order:3;flex:0 0 auto}
  .cpv-sub-table td.cpv-c-views{order:4;font-weight:600}
  .cpv-sub-table td.cpv-c-counted{order:5;font-weight:600}
  .cpv-sub-table td.cpv-c-earned{order:6;font-weight:600}
  .cpv-sub-table td.cpv-c-views::before{display:inline;content:"Views ";color:var(--bd-muted);font-size:11px;font-weight:400}
  .cpv-sub-table td.cpv-c-counted::before{display:inline;content:"Counted ";color:var(--bd-muted);font-size:11px;font-weight:400}
  .cpv-sub-table td.cpv-c-earned::before{display:inline;content:"Earned ";color:var(--bd-muted);font-size:11px;font-weight:400}
  .cpv-sub-table td.cpv-c-submitted{order:7;flex:0 0 auto;margin-left:auto;color:var(--bd-muted);font-size:11.5px}
  /* audio line: badge + the post's sound name, ellipsized */
  .cpv-sub-table td.cpv-c-audio{order:8;flex:1 1 100%;min-width:0;white-space:normal}
  .cpv-sub-table td.cpv-c-audio .cpv-audiocell{max-width:100%}
  /* pinned 44px action row (an empty cell — an already-approved row
     under review — takes no space) */
  .cpv-sub-table td.cpv-actions-cell{order:9;flex:1 1 100%;display:flex!important;gap:8px;align-items:stretch;min-height:44px}
  .cpv-sub-table td.cpv-actions-cell:empty{display:none}
  .cpv-sub-table td.cpv-actions-cell .cpv-actions{flex:1 1 100%;display:flex;gap:8px}
  .cpv-sub-table td.cpv-actions-cell .bd-btn{flex:1 1 0;justify-content:center;min-height:44px}
}

/* ================================================================
   BATCH B — the shared .bd-table ballooning disease (mobile audit
   2026-10-23, NEEDS WORK table). On ≤900px the generic .bd-table
   passes stack label-over-value, so every row on these surfaces ran
   181–418px tall while technically "fitting". One compact stacked
   variant — .bd-table--cards — in Batch A's house style: identity
   line first, money/numbers as nowrap chips with inline mini-labels
   on a meta line, secondary fields flowing after, actions on their
   own line at the end. Nothing is removed from any screen; fields
   move within the card only. All rules live inside ≤900px — desktop
   rendering is untouched. Per-surface tweaks follow the shared
   block, keyed by the bb-* class the builders now carry.
   ================================================================ */
@media(max-width:900px){
  .bd-tablewrap:has(> .bd-table--cards){overflow:visible;max-width:100%}
  .bd-table--cards{display:block;width:100%;min-width:0!important;max-width:100%;table-layout:auto!important}
  .bd-table--cards thead{display:none}
  .bd-table--cards tbody,.bd-table--cards tfoot{display:block}
  .bd-table--cards tr{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;width:auto;padding:10px 12px;border-bottom:1px solid var(--bd-border);position:relative}
  .bd-table--cards tbody tr:last-child{border-bottom:0}
  .bd-table--cards td{display:block!important;order:10;flex:none;width:auto!important;min-width:0;height:auto!important;min-height:0;padding:0!important;border:0!important;text-align:left!important;font-size:12.5px;line-height:1.35;white-space:normal;overflow-wrap:anywhere}
  .bd-table--cards td::before{display:none}
  /* identity: first cell (or .bb-id) takes the full first line; its
     muted sub-lines ride inline after the name instead of stacking */
  .bd-table--cards td:first-child,.bd-table--cards td.bb-id{order:0;flex:1 1 100%;min-width:0}
  .bd-table--cards td:first-child .bd-muted-sm,.bd-table--cards td.bb-id .bd-muted-sm{display:inline;margin:0 0 0 6px}
  .bd-table--cards td:first-child strong,.bd-table--cards td.bb-id strong{font-size:13.5px}
  /* money/numbers: nowrap chips, mini-label inline before the value */
  .bd-table--cards td.num{white-space:nowrap!important;font-weight:600;color:var(--bd-ink)}
  .bd-table--cards td.num[data-label]:not([data-label=""])::before{display:inline-block;content:attr(data-label);margin-right:5px;color:var(--bd-muted);font-size:9px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;vertical-align:1px}
  /* actions: own line at the end, right-aligned, buttons wrap if needed */
  .bd-table--cards td.bb-act,.bd-table--cards td:last-child:has(button){order:90;flex:1 1 100%;display:flex!important;flex-wrap:wrap;gap:6px;align-items:center;justify-content:flex-end;text-align:right!important}
  .bd-table--cards td.bb-act:empty,.bd-table--cards td:last-child:has(button):empty{display:none!important}
  .bd-table--cards td .bd-rowactions{justify-content:flex-end;flex-wrap:wrap}
  .bd-table--cards td[colspan]{flex:1 1 100%}
  .bd-table--cards select{max-width:100%}
  /* total rows stay a single strip, not a card */
  .bd-table--cards tfoot tr{background:var(--bd-hover)}
  .bd-table--cards tfoot td:first-child{flex:0 0 auto}

  /* ---- Withdrawals (bb-wd): date is a chip, creator is identity ---- */
  .bb-wd td:first-child{order:0;flex:0 0 auto;white-space:nowrap}
  .bb-wd td.bb-id{flex:1 1 auto}
  .bb-wd td.bb-act .bd-btn{height:34px;min-height:34px;padding:5px 12px}
  .bb-wd td.bb-id{order:1}
  .bb-wd td:nth-child(4) div{display:inline;margin-left:5px}
  .bb-wd td:nth-child(5){flex:1 1 auto;min-width:0}
  .bb-wd td:nth-child(5) .bd-muted-sm{display:block;margin-top:2px}

  /* ---- Referrals (bb-refbal / bb-refatt) ---- */
  .bb-refbal td.bb-id .bd-muted-sm.bd-mt4{display:block;margin:3px 0 0}
  .bb-refatt td:nth-child(2) .bd-muted-sm{display:inline;margin-left:6px}

  /* ---- Refunds ledger (bb-rfnd): notes take their own line ---- */
  .bb-rfnd td:last-child{flex:1 1 100%;order:50}

  /* ---- Financials › Campaigns (bb-fincamp): the metric labels ride
     inline as td.num::before under the shared card rule above, but the
     older generic reflow (.bd-table td::before, "ONE card reflow")
     clamps that pseudo to max-width:46% — the card rule never reset
     it — so a nowrap label's glyphs overflow their box and print on
     top of the value ("TOTAL BUDG$1,500", "ACTUAL SPEND B$1,000";
     Max's iPhone screenshot, 2026-10-27). Fix: metrics become a
     2-column grid (flex halves) with the label as a BLOCK line above
     its value, clamp removed, label allowed to wrap. The totals
     footer (tfoot) shares the same cells, so it gets the same grid;
     its "Total" cell takes its own line. Desktop ≥901px untouched —
     every rule here lives inside the ≤900px block. ---- */
  .bb-fincamp td.num{flex:1 1 calc(50% - 8px);min-width:0}
  .bb-fincamp td.num[data-label]:not([data-label=""])::before{display:block;content:attr(data-label);max-width:none;margin:0 0 2px;white-space:normal;vertical-align:baseline}
  .bb-fincamp tfoot td:first-child{flex:1 1 100%}

  /* ---- Clients list (bb-clients): COMPACT card (Max, 2026-10-28,
     round 2). The -57 layout was readable but 167px per card: name
     line, contact line, a 2x2 stats grid, actions on their own line.
     Rebuilt as a small GRID (Clients-scoped — the shared card
     system stays flex) so the anatomy is deterministic at every
     width, 90px per card, uniform:
       row 1 — name (spans 2 cols, ellipsis) + BOTH actions inline
         as small buttons (Edit + View portal, right span), so the
         portal entry point can't hide at the bottom of a tall card;
       row 2 — portal badge + contact (muted, ellipsis);
       row 3 — the four stats, one per column, label above value.
     The -57 overlap fix is preserved in shape: stat labels stay
     BLOCK lines above their values with the generic reflow's
     max-width:46% clamp removed — never the inline chip whose
     nowrap glyphs painted over the values. ---- */
  .bb-clients.bd-table--cards tr{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-template-rows:auto auto auto;align-items:center;gap:2px 8px;padding:6px 12px}
  .bb-clients td:first-child:not([colspan]){grid-row:1;grid-column:1/3;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13.5px;line-height:1.25;padding:0!important;border-bottom:0!important}
  .bb-clients td:nth-child(3){grid-row:2;grid-column:1;min-width:0}
  .bb-clients td:nth-child(2){grid-row:2;grid-column:2/5;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--bd-muted-strong);font-size:11px;line-height:1.3}
  .bb-clients td.num{grid-row:3;min-width:0;font-size:12.5px;line-height:1.2}
  .bb-clients td.num[data-label]:not([data-label=""])::before{display:block;content:attr(data-label);max-width:none;margin:0 0 1px;white-space:nowrap;font-size:8.5px;vertical-align:baseline}
  .bb-clients td[colspan]{grid-column:1/-1}
  .bb-clients.bd-table--cards td:last-child:has(button){grid-row:1;grid-column:3/5;justify-self:end;display:flex!important;flex-wrap:nowrap;gap:6px;align-items:center;text-align:right!important}
  .bb-clients td:last-child .bd-rowactions{flex-wrap:nowrap;gap:6px}

  /* ---- Client campaigns (bb-clcamp): progress = one slim line ---- */
  .bb-clcamp td:first-child{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .bb-clcamp td:last-child{order:50;flex:1 1 100%;display:flex!important;align-items:center;gap:10px}
  .bb-clcamp .bd-campprog__line{flex:none;display:flex;gap:6px;align-items:baseline;white-space:nowrap}
  .bb-clcamp .bd-progress{flex:1 1 auto;max-width:none;margin-top:0}

  .bb-clients.bd-table--cards td:last-child .bd-btn{height:26px;min-height:26px;padding:3px 9px;font-size:11.5px;border-radius:8px;gap:5px}
  .bb-clients.bd-table--cards td:last-child .bd-btn svg{width:13px;height:13px}

  /* ---- Staff Team (bb-team): name + email on the identity line,
     compact role select sharing a line with status + added ---- */
  .bb-team tr{padding-top:9px;padding-bottom:9px}
  .bb-team td:first-child{flex:1 1 auto}
  .bb-team td:nth-child(2){order:0;flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--bd-muted-strong);font-size:12px}
  .bb-team .tm-role{height:32px;min-height:32px;font-size:12.5px;width:auto;max-width:150px;padding:0 24px 0 9px}
  .bb-team td:last-child .bd-btn{height:34px;min-height:34px;padding:5px 10px}
  .bb-team td:last-child .bd-iconbtn{width:34px;height:34px;min-width:34px;min-height:34px}

  /* ---- Logins (bb-logins): staff Team anatomy, shared by the client
     profile's Portal logins and the portal Team tab ---- */
  .bb-logins td:first-child{flex:1 1 auto}
  .bb-logins td:nth-child(2){order:0;flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--bd-muted-strong);font-size:12px}
  .bb-logins td .bd-rowactions{flex-wrap:nowrap;width:100%}
  .bb-logins td .bd-rowactions select{flex:1 1 auto;min-width:0;max-width:150px;height:32px;font-size:12.5px}
  .bb-logins td .bd-rowactions .bd-btn{height:34px;min-height:34px;padding:5px 10px}
  .bb-logins td .bd-rowactions .bd-iconbtn{width:34px;height:34px;min-width:34px;min-height:34px}
  .bb-logins td:nth-child(4),.bb-logins td:nth-child(5){white-space:nowrap!important}
  .bb-logins .bd-rowactions .bd-btn,.bb-logins .bd-rowactions .bd-iconbtn{flex:none}
  .bb-logins td:nth-child(4)[data-label]:not([data-label=""])::before,
  .bb-logins td:nth-child(5)[data-label]:not([data-label=""])::before{display:inline-block;content:attr(data-label);margin-right:5px;color:var(--bd-muted);font-size:9px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;vertical-align:1px}

  /* ---- Portal Invoices (bb-pinv): campaign under the number, dates
     as muted chips, status sub-line inline (amounts never wrap) ---- */
  .bb-pinv td:first-child{font-size:13.5px}
  .bb-pinv td:nth-child(2){order:1;flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--bd-muted-strong)}
  .bb-pinv td:nth-child(5),.bb-pinv td:nth-child(6){order:1}
  .bb-pinv td:last-child .bd-btn{height:34px;min-height:34px;padding:5px 10px;font-size:12.5px}
  .bb-pinv td:nth-child(5),.bb-pinv td:nth-child(6){color:var(--bd-muted-strong);white-space:nowrap!important}
  .bb-pinv td:nth-child(5)[data-label]:not([data-label=""])::before,
  .bb-pinv td:nth-child(6)[data-label]:not([data-label=""])::before{display:inline-block;content:attr(data-label);margin-right:5px;color:var(--bd-muted);font-size:9px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;vertical-align:1px}
  .bb-pinv .bd-statussub{display:inline;margin:0 0 0 5px}

  /* ---- Creator-facing earnings/withdrawals (bb-cearn) ---- */
  .bb-cearn td:first-child .bd-muted-sm{display:inline;margin-left:6px}

  /* ---- Payment History accordion: Batch A's fin-act treatment
     extended to the history rows (data-hist-row). Collapsed card =
     creator · amount · paid date; campaign, the payment block,
     marked-by and every receipt action live behind the chevron,
     one entry open at a time (histOpenId, kept across the view's
     in-place receipt restamps). The Batch A block above scopes its
     rules to tr[data-act-row]; these mirror them for data-hist-row. */
  .fin-act-table tr[data-hist-row]{display:flex;flex-wrap:wrap;align-items:center;gap:5px 10px;width:auto;padding:11px 48px 11px 12px;position:relative;border-bottom:1px solid var(--bd-border)}
  .fin-act-table tr[data-hist-row]>td{display:block!important;flex:none;width:auto!important;min-width:0;height:auto!important;padding:0!important;border:0!important;text-align:left!important;font-size:12.5px;line-height:1.35;white-space:nowrap}
  .fin-act-table tr[data-hist-row]>td::before{display:none}
  .fin-act-table tr.fin-act-open .fin-act-toggle svg{transform:rotate(180deg)}
  .fin-act-table tr[data-hist-row] td[data-label="Creator"]{order:0;flex:1 1 26%;min-width:0;overflow:hidden;text-overflow:ellipsis}
  .fin-act-table tr[data-hist-row] td[data-label="Creator"] strong{font-size:13.5px}
  .fin-act-table tr[data-hist-row] td[data-label="Amount"]{order:1;flex:0 0 auto}
  .fin-act-table tr[data-hist-row] td[data-label="Amount"] strong{font-size:13.5px}
  .fin-act-table tr[data-hist-row] td[data-label="Amount"] .bd-muted-sm{display:inline;margin-left:6px}
  .fin-act-table tr[data-hist-row] td[data-label="Paid date"]{order:2;flex:0 0 auto;color:var(--bd-muted-strong)}
  .fin-act-table tr[data-hist-row]:not(.fin-act-open) td[data-label="Campaign"],
  .fin-act-table tr[data-hist-row]:not(.fin-act-open) td[data-label="Payment"],
  .fin-act-table tr[data-hist-row]:not(.fin-act-open) td[data-label="Marked by"],
  .fin-act-table tr[data-hist-row]:not(.fin-act-open) td.fin-act-actions{display:none!important}
  .fin-act-table tr[data-hist-row].fin-act-open td[data-label="Campaign"]{order:3;flex:1 1 100%;min-width:0;overflow:hidden;text-overflow:ellipsis}
  .fin-act-table tr[data-hist-row].fin-act-open td[data-label="Campaign"] .bd-muted-sm{display:inline;margin-left:6px}
  .fin-act-table tr[data-hist-row].fin-act-open td[data-label="Payment"]{order:4;flex:1 1 100%;white-space:normal}
  .fin-act-table tr[data-hist-row].fin-act-open td[data-label="Marked by"]{order:5;flex:1 1 100%;white-space:normal}
  .fin-act-table tr[data-hist-row].fin-act-open td[data-label="Marked by"]::before{display:inline-block;content:"Marked by ";color:var(--bd-muted);font-size:11px}
  .fin-act-table tr[data-hist-row].fin-act-open td.fin-act-actions{order:6;flex:1 1 100%;white-space:normal}
  .fin-act-table tr[data-hist-row] .bd-payblock{white-space:normal}

  /* ---- Creator Leads (bb-leads): collapsed card = handle + platform
     · niche meta line; the three selects, assigned/added and the
     actions live in the expanded state behind the row's chevron
     (ldOpenId, one open at a time). ---- */
  .bb-leads tr{padding-right:48px}
  .bb-leads tr.bb-open .fin-act-toggle svg{transform:rotate(180deg)}
  .bb-leads td:nth-child(2),.bb-leads td:nth-child(3){color:var(--bd-muted-strong);font-size:12px}
  .bb-leads tr:not(.bb-open) td:nth-child(n+4){display:none!important}
  .bb-leads tr.bb-open td:nth-child(4),.bb-leads tr.bb-open td:nth-child(5),.bb-leads tr.bb-open td:nth-child(6){flex:1 1 40%;min-width:0}
  .bb-leads tr.bb-open td:nth-child(4) .bd-selwrap,.bb-leads tr.bb-open td:nth-child(5) .bd-selwrap,.bb-leads tr.bb-open td:nth-child(6) .bd-selwrap{display:flex;width:100%}
  .bb-leads tr.bb-open td:nth-child(4) select,.bb-leads tr.bb-open td:nth-child(5) select,.bb-leads tr.bb-open td:nth-child(6) select{flex:1;min-width:0}
  /* price cell (9th) and videos cell (10th): join the expanded
     card's field flow, inputs stretched like the selects; collapsed
     rows hide them via the nth-child(n+4) rule above */
  .bb-leads tr.bb-open td:nth-child(9){flex:1 1 40%;min-width:0}
  .bb-leads tr.bb-open td:nth-child(9) .ld-price{width:100%;height:40px;min-height:40px;border-radius:9px}
  .bb-leads tr.bb-open td:nth-child(10){flex:1 1 40%;min-width:0}
  .bb-leads tr.bb-open td:nth-child(10) .ld-videos{width:100%;height:40px;min-height:40px;border-radius:9px}
  .bb-leads tr.bb-open td:nth-child(7)::before,.bb-leads tr.bb-open td:nth-child(8)::before{display:inline-block;content:attr(data-label);margin-right:5px;color:var(--bd-muted);font-size:9px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;vertical-align:1px}
  /* the 8 stat tiles collapse from 4 stacked rows (~375px) into a
     compact 4 x 2 strip */
  .bd-stats--8,.bd-stats--10{grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}
  .bd-stats--8 .bd-stat,.bd-stats--10 .bd-stat{padding:6px 8px;border-radius:11px;min-height:0}
  .bd-stats--8 .bd-stat__label,.bd-stats--10 .bd-stat__label{font-size:9.5px;line-height:1.2;min-height:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .bd-stats--8 .bd-stat__value,.bd-stats--10 .bd-stat__value{font-size:15px;margin-top:1px;clear:none}
  .bd-stats--8 .bd-stat__sub,.bd-stats--10 .bd-stat__sub{font-size:9px;line-height:1.25;margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

  /* ---- Add Creators (cd-addtable): the Creators-list card pattern —
     line 1 checkbox · avatar + handle · POC chip · actions, line 2 a
     muted meta line (niche · campaigns pill · total views), line 3
     the standing terms as labelled mini-cells (Price · Videos). Nine
     cells since the columns rework (Max, 2026-10-28): the POC chip
     sits beside the handle again on mobile (its own cell now, placed
     in the identity row), and Price / Videos get their own meta line
     instead of vanishing into the identity cell. ---- */
  #cd-addtable{display:block;width:100%;min-width:0!important;max-width:100%}
  #cd-addtable thead{display:none}
  #cd-addtable tbody{display:block}
  #cd-addtable tr.bd-rowexp{display:grid;grid-template-columns:auto minmax(72px,1fr) auto auto;align-items:center;gap:2px 7px;padding:10px 12px;position:relative;width:auto;border-bottom:1px solid var(--bd-border)}
  #cd-addtable tr.bd-rowexp>td{display:block;width:auto;min-width:0;padding:0!important;border:0;white-space:normal;text-align:left}
  #cd-addtable tr.bd-rowexp>td::before{display:none}
  #cd-addtable tr.bd-rowexp>td:nth-child(1){grid-column:1/2;grid-row:1}
  #cd-addtable tr.bd-rowexp>td:nth-child(2){grid-column:2/3;grid-row:1;min-width:0}
  #cd-addtable tr.bd-rowexp>td:nth-child(4){grid-column:3/4;grid-row:1;justify-self:start}
  #cd-addtable tr.bd-rowexp>td:nth-child(9){grid-column:4/5;grid-row:1;justify-self:end}
  /* Round 3: on mobile the actions cell stacks (Profile over the
     ✓ Added tag) instead of running both side by side — side by side
     the cell was ~140px and crushed the identity column on booked
     rows once the campaigns pill became a full labelled button. */
  #cd-addtable tr.bd-rowexp>td:nth-child(9){display:flex!important;flex-direction:column;align-items:flex-end;gap:4px}
  #cd-addtable tr.bd-rowexp>td:nth-child(3){grid-column:1/3;grid-row:2}
  #cd-addtable tr.bd-rowexp>td:nth-child(7){grid-column:3/4;grid-row:2;justify-self:end}
  #cd-addtable tr.bd-rowexp>td:nth-child(8){grid-column:4/5;grid-row:2;justify-self:end}
  #cd-addtable tr.bd-rowexp>td:nth-child(5){grid-column:1/3;grid-row:3}
  #cd-addtable tr.bd-rowexp>td:nth-child(6){grid-column:3/5;grid-row:3;justify-self:end}
  #cd-addtable tr.bd-rowexp>td:nth-child(3),
  #cd-addtable tr.bd-rowexp>td:nth-child(5),
  #cd-addtable tr.bd-rowexp>td:nth-child(6),
  #cd-addtable tr.bd-rowexp>td:nth-child(7),
  #cd-addtable tr.bd-rowexp>td:nth-child(8){font-size:12px;color:var(--bd-muted);line-height:1.35;white-space:nowrap}
  /* No "· " separator before the campaigns cell — the campaigns
     control is a real pill button now, not meta-line text, and the
     dot cost the identity column width booked rows can't spare. */
  #cd-addtable tr.bd-rowexp>td:nth-child(8)::before{content:"· ";display:inline}
  #cd-addtable tr.bd-rowexp>td:nth-child(8)::after{content:" views"}
  /* Labelled terms line: the bare numbers would be meaningless
     without their column headers, which mobile hides. */
  #cd-addtable tr.bd-rowexp>td:nth-child(5)::before{content:"Price ";display:inline}
  #cd-addtable tr.bd-rowexp>td:nth-child(6)::before{content:"Videos ";display:inline}
  #cd-addtable .cd-campcount{min-height:30px;padding:4px 10px;font-size:12px;gap:5px}
  #cd-addtable tr.bd-rowexpand{display:block;width:auto;border-bottom:1px solid var(--bd-border)}
  #cd-addtable tr.bd-rowexpand>td{display:block;width:auto;padding:0!important;border:0}
  #cd-addtable tr.bd-rowexpand>td::before{display:none}

  /* ---- Portal campaign detail (cpd-creators): identity line, a
     nowrap chip line (videos · views · likes · comments, labelled),
     completion as one slim line. The expansion's posts table already
     has its own compact block (.bd-table--posts). ---- */
  #cpd-creators{display:block;width:100%;min-width:0!important;max-width:100%}
  #cpd-creators thead{display:none}
  #cpd-creators tbody{display:block}
  #cpd-creators tr:not(.bd-rowexpand){display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;width:auto;padding:10px 12px;border-bottom:1px solid var(--bd-border)}
  #cpd-creators tr:not(.bd-rowexpand)>td{display:block!important;flex:none;width:auto!important;min-width:0;height:auto!important;padding:0!important;border:0!important;text-align:left!important;font-size:12.5px;line-height:1.35;white-space:normal}
  #cpd-creators tr:not(.bd-rowexpand)>td::before{display:none}
  #cpd-creators td.cpd-toggle{order:0;flex:0 0 14px;font-size:12px;color:var(--bd-muted-strong)}
  #cpd-creators tr:not(.bd-rowexpand)>td:nth-child(2){order:1;flex:1 1 55%;min-width:0}
  #cpd-creators tr:not(.bd-rowexpand)>td:nth-child(3),#cpd-creators tr:not(.bd-rowexpand)>td:nth-child(5),
  #cpd-creators tr:not(.bd-rowexpand)>td:nth-child(6),#cpd-creators tr:not(.bd-rowexpand)>td:nth-child(7){white-space:nowrap!important;font-weight:600}
  #cpd-creators tr:not(.bd-rowexpand)>td:nth-child(3){order:2}
  #cpd-creators tr:not(.bd-rowexpand)>td:nth-child(5){order:3}
  #cpd-creators tr:not(.bd-rowexpand)>td:nth-child(6){order:4}
  #cpd-creators tr:not(.bd-rowexpand)>td:nth-child(7){order:5}
  #cpd-creators tr:not(.bd-rowexpand)>td:nth-child(3)::before,#cpd-creators tr:not(.bd-rowexpand)>td:nth-child(5)::before,
  #cpd-creators tr:not(.bd-rowexpand)>td:nth-child(6)::before,#cpd-creators tr:not(.bd-rowexpand)>td:nth-child(7)::before{display:inline-block;content:attr(data-label);margin-right:5px;color:var(--bd-muted);font-size:9px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;vertical-align:1px}
  #cpd-creators tr:not(.bd-rowexpand)>td:nth-child(4){order:6;flex:1 1 100%}
  #cpd-creators .cd-completion{flex-direction:row;align-items:center;gap:9px;width:auto;margin:0}
  #cpd-creators .cd-completion__line{font-size:12.5px;white-space:nowrap}
  #cpd-creators .cd-completion .bd-progress{flex:1 1 auto;max-width:none;margin-top:0;height:5px}
  #cpd-creators tr.bd-rowexpand>td{display:block!important;width:auto;padding:0!important;border:0}
  #cpd-creators tr.bd-rowexpand>td::before{display:none}
}

/* === Mobile fix Batch C (2026-10-23, audit findings #5 + #6): the
   smaller items — Creators-list clipped chips + stat strip, Financials
   subtab strip affordance, portal unpaid-banner collapse, campaign
   header pill wrap, small-link tap targets. All rules are scoped to
   <=900px (plus two display defaults that are inert on desktop:
   .cp-banners is display:contents and .cp-bannersum /
   .bd-subtabs__more are display:none), so desktop rendering is
   unchanged. === */
.bd-subtabs__more{display:none}
@media(max-width:900px){
  /* ---- Creators list: the identity cell's unbroken handle token
     inflated the row grid's auto tracks, so the platform chip / manual
     pill rendered past the card edge and were clipped invisibly
     (worst: pill right edge 750px in a 418px card). The cell now
     spans the row and clips at its own box; inside, the handle is a
     shrinkable flex item with ellipsis and the chips are flex:none.
     The niche chip moves down to the meta line (row 2, right end)
     instead of crowding the identity line. ---- */
  #cd-creatorlist tr.bd-rowlink>td:nth-child(1){grid-column:1/5;overflow:hidden}
  #cd-creatorlist tr.bd-rowlink>td:nth-child(2){grid-column:4/5;grid-row:2;justify-self:end;align-self:center}
  #cd-creatorlist .cl-id{width:100%}
  #cd-creatorlist .cl-id__txt{display:flex;align-items:center;flex-wrap:wrap;gap:3px 6px;flex:1 1 auto;min-width:0;white-space:normal;overflow:visible;text-overflow:clip}
  #cd-creatorlist .bd-table__handle{display:block;flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  #cd-creatorlist .cl-id .bd-chip,#cd-creatorlist .cl-id .bd-pill{flex:none}
  /* ---- Creators stat strip: the 4 summary pills stacked full-width
     (~300px of filter bar before the first creator). The bar becomes
     a flex wrap — search on its own row, the two selects sharing a
     row, the 4 pills as a compact 2x2 grid. ---- */
  #cr-body .bd-filterbar{display:flex;flex-wrap:wrap;gap:7px;padding:10px}
  #cr-body .bd-filterbar .bd-search{flex:1 1 100%;min-width:0}
  #cr-body .bd-filterbar .bd-select{flex:1 1 40%;min-width:0;max-width:none!important}
  #cr-body .bd-filterbar>.bd-filterpill{flex:1 1 calc(50% - 7px);justify-content:center;text-align:center;padding:7px 6px;font-size:11.5px;min-width:0}
  /* ---- Financials subtab strip: tabs were 35px tall in a 406px
     scroller with 4 of 7 off-edge and no signal. Tabs get a 40px hit
     height + scroll-snap; a chevron chip rides the strip's right
     edge until it is scrolled to the end (JS toggles --end). ---- */
  .bd-subtabs-wrap{position:relative}
  .bd-subtabs{scroll-snap-type:x proximity;padding-right:34px}
  .bd-subtab{min-height:40px;box-sizing:border-box;display:inline-flex;align-items:center;scroll-snap-align:start}
  .bd-subtabs__more{position:absolute;top:50%;right:2px;transform:translateY(-50%);width:26px;height:26px;border-radius:50%;background:var(--bd-card);border:1px solid var(--bd-border);color:var(--bd-purple-deep);display:flex;align-items:center;justify-content:center;font-size:19px;line-height:1;pointer-events:none;box-shadow:0 1px 5px rgba(20,30,25,.18);transition:opacity .15s;z-index:2}
  .bd-subtabs-wrap--end .bd-subtabs__more{opacity:0}
  /* ---- Portal home invoice banners were removed in portal batch 2
     (the Invoices nav badge carries the outstanding count instead);
     no banner rules remain. ---- */
  /* ---- Campaign header: the status pill wrapped its own text
     ("Paid & / Launching" on 2 lines) as a shrinkable flex item.
     It keeps its natural width now. ---- */
  .bd-page--campaign .bd-detailtitle .bd-badge{white-space:nowrap;flex:none}
  /* ---- Tap targets: back-links and text link-buttons measured
     15-18px tall. Vertical padding grows the hit area to >=40px;
     the text size and colour are unchanged. ---- */
  .bd-backlink{min-height:40px;box-sizing:border-box;padding-top:11px;padding-bottom:11px}
  .bd-linkbtn{min-height:40px;box-sizing:border-box;padding-top:10px;padding-bottom:10px}
}

/* === Client portal batch 2 (2026-10-23): overview-first portal —
   Invoices nav badge, views-breakdown blocks, per-campaign
   performance rows. Desktop rules first; the <=900px block keeps
   every row inside the viewport (no sideways overflow). === */
.bd-nav__badge{margin-left:auto;min-width:20px;height:20px;border-radius:10px;background:#d9932c;color:#fff;font-size:11px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;padding:0 6px;flex:none}
.bd-nav__badge[hidden]{display:none}
.bd-tabbar__item .bd-nav__badge{margin-left:2px;min-width:16px;height:16px;font-size:9.5px;padding:0 4px}
.cp-windows{margin-bottom:16px}
.cp-graph{margin-bottom:16px}
.cp-windows__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
.cp-windows__block{min-width:0}
.cp-windows__label{font-size:12px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;color:var(--bd-muted)}
.cp-windows__value{font-size:26px;font-weight:700;letter-spacing:-.6px;color:var(--bd-ink);margin-top:4px;line-height:1.1;white-space:nowrap}
.cp-perf{margin-bottom:16px}
.cp-perf__list{display:flex;flex-direction:column}
.cp-perf__row{display:grid;grid-template-columns:minmax(0,1.6fr) repeat(4,minmax(0,.6fr)) auto;gap:14px;align-items:center;padding:13px 2px;border-bottom:1px solid var(--bd-border);cursor:pointer;min-width:0}
.cp-perf__row:last-child{border-bottom:0}
.cp-perf__row:hover{background:#f6f8f6}
.cp-perf__name{display:flex;flex-direction:column;gap:2px;min-width:0}
.cp-perf__name>strong{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--bd-ink)}
.cp-perf__meta{font-size:12px;color:var(--bd-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cp-perf__stat{display:flex;flex-direction:column;gap:1px;min-width:0;text-align:right}
.cp-perf__stat strong{white-space:nowrap;color:var(--bd-ink)}
.cp-perf__label{font-size:10px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;color:var(--bd-muted);white-space:nowrap}
@media(max-width:900px){
  .cp-windows__grid{grid-template-columns:1fr;gap:12px}
  .cp-windows__value{font-size:22px}
  .cp-perf__row{grid-template-columns:repeat(4,1fr);gap:6px 10px;padding:12px 0}
  .cp-perf__name{grid-column:1/-1;flex-direction:row;align-items:baseline;gap:8px}
  .cp-perf__name>strong{flex:0 1 auto}
  .cp-perf__meta{flex:1 1 auto;text-align:right}
  .cp-perf__stat{text-align:left}
  .cp-perf__row .cp-pill{grid-column:1/-1;justify-self:start}
}

/* Sheet-import preview: the "No Profile Created" pill (purple — distinct
   from the amber Incomplete badge) and the creator cell's long PayPal
   destinations wrap inside the modal instead of stretching the preview
   table past its right edge. min-width:0 lifts the legacy bare-table
   940px floor for this table only (same pattern as #clients-table) —
   inside the 560px import modal that floor is what forced the sideways
   scroll, and no wrap rule can beat it. */
.bd-pill--noprofile{background:var(--bd-purple-soft,#f0eafc);color:var(--bd-purple-deep);border:1px solid var(--bd-purple-pale,#ddd0fa);white-space:nowrap}
.bd-table--preview{min-width:0}
.bd-table--preview td:first-child{overflow-wrap:anywhere}
.bd-table--preview td:first-child .bd-muted-sm{overflow-wrap:anywhere}

/* ================================================================
   PHONE DENSITY, pass 7 (2026-10-23, Max: "compact the mobile
   version more across the platform since it's still very large").
   One shared density step at <=768px on top of passes 1-6 and
   Batches A-C: tighter card frames, page chrome and list rows
   across the staff app, the client portal and the creator
   surfaces. Nothing is removed — no content, data or actions —
   and the in-place behaviours are untouched. Tap floors hold:
   icon buttons >=32px, status selects stay 30px. >=769px
   geometry is untouched by construction.
   Also fixes the Statistics PRICE collision from Max's
   screenshot ("$13.33 / video" painting into the VIDEOS value):
   pass 3 forced the price cell nowrap, so an over-long price +
   per-video line overflowed its flex box and painted over the
   next cell. The cell may wrap now, and the per-video span stays
   nowrap so it wraps as one unit onto its own line instead of
   colliding.
   ================================================================ */
@media (max-width:768px){
  /* stop mobile browsers inflating small text past its set size */
  html{-webkit-text-size-adjust:100%;text-size-adjust:100%}

  /* ---------- shared chrome ---------- */
  .bd-content{padding:12px 10px}
  .bd-topbar{padding:16px 12px 2px}
  .bd-card{padding:12px}
  .bd-card--flush{padding:0}
  .bd-card__head{margin-bottom:10px}
  .bd-card__head h3{font-size:15px}
  .bd-btn{min-height:36px;padding:8px 13px;font-size:13px}
  .bd-btn--sm{min-height:32px;padding:5px 10px;font-size:12.5px}
  .bd-iconbtn{width:36px;height:36px;min-width:36px;min-height:36px}
  .bd-avatar{width:32px;height:32px;font-size:12px}
  .bd-stat{padding:9px 11px}
  .bd-stat__value{font-size:17px}
  .bd-stat__icon{width:30px;height:30px}
  .bd-stats{gap:8px}
  .bd-subtab{min-height:36px;padding-top:5px;padding-bottom:5px;font-size:12.5px}

  /* ---------- Statistics creator card (the anchor) ---------- */
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow),
  #cd-creators-payout>tbody>tr{gap:4px 7px;padding:6px 10px}
  #cd-creators .bd-avatar{width:30px;height:30px}
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(2) .bd-cellmain{gap:7px}
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(2) .cd-handle-link strong{font-size:13px}
  #cd-creators .cd-attn-btn{width:32px;height:32px}
  #cd-creators .cd-rowmenu-btn{width:32px;height:32px;min-width:32px;min-height:32px}
  #cd-creators .cd-notes-btn{height:30px;min-height:30px;padding:4px 9px;font-size:12.5px}
  /* stat strip: one type step down, labels included */
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(6),
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(7),
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(9),
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(10),
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(11){font-size:12.5px;line-height:1.18}
  #cd-creators .cd-completion__line{line-height:1.15}
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(6)::before,
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(7)::before,
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(9)::before,
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(10)::before,
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(11)::before{font-size:9px}
  /* the collision fix: the price cell wraps, the per-video unit doesn't */
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(6){white-space:normal!important;flex:1.75 1 28%}
  #cd-creators>tbody>tr:not(.bd-rowexpand):not(.cd-notesrow)>td:nth-child(6) .bd-muted-sm{font-size:10.5px;white-space:nowrap;margin-left:4px}
  #cd-creators .cd-completion{font-size:12px}
  #cd-creators .cd-completion .bd-progress{height:4px}
  /* Payout view mirrors the card treatment */
  #cd-creators-payout>tbody>tr>td:nth-child(2),
  #cd-creators-payout>tbody>tr>td:nth-child(3),
  #cd-creators-payout>tbody>tr>td:nth-child(4){font-size:12.5px}
  #cd-creators-payout .bd-avatar{width:30px;height:30px}

  /* ---------- Home performance rows (.bd-table--perf) ---------- */
  .bd-table--perf tr{padding:8px 10px}
  .bd-table--perf tr.bd-table__rowlink{gap:4px 8px}
  .bd-table--perf .bd-tile{width:26px;height:26px;font-size:12px}
  .bd-table--perf .bd-cellmain{gap:7px}
  .bd-table--perf td:nth-child(3)::before,.bd-table--perf td:nth-child(4)::before,.bd-table--perf td:nth-child(5)::before{font-size:9px}

  /* ---------- Campaigns list ---------- */
  .bd-campaign{padding:8px 0!important;gap:6px 10px!important;grid-template-columns:32px minmax(0,1fr) minmax(0,1fr) 30px!important}
  .bd-campaign__tile{width:32px;height:32px;font-size:14px}

  /* ---------- Batch B shared card system (.bd-table--cards) ------ */
  .bd-table--cards tr{gap:3px 8px;padding:7px 10px}
  .bd-table--cards td:first-child strong,.bd-table--cards td.bb-id strong{font-size:13px}
  .bb-wd td.bb-act .bd-btn,.bb-clients td:last-child .bd-btn,.bb-team td:last-child .bd-btn,
  .bb-logins td .bd-rowactions .bd-btn,.bb-pinv td:last-child .bd-btn{height:32px;min-height:32px}
  .bb-team .tm-role{height:30px;min-height:30px}
  .bb-logins td .bd-rowactions select{height:30px}
  .bb-team td:last-child .bd-iconbtn,.bb-logins td .bd-rowactions .bd-iconbtn{width:32px;height:32px;min-width:32px;min-height:32px}
  .bb-team tr{padding-top:7px;padding-bottom:7px}
  /* client campaigns progress line keeps its slim profile */
  .bb-clcamp td:last-child{gap:8px}

  /* ---------- Financials: Activity Log + Payment History ---------- */
  .fin-act-table tr[data-act-row],.fin-act-table tr[data-hist-row]{gap:4px 8px;padding:8px 44px 8px 10px}
  .fin-act-toggle{width:32px;height:32px;top:6px;right:6px}
  .fin-act-table td[data-label="Creator"] strong{font-size:13px}
  .fin-act-table td[data-label="Amount"] strong{font-size:13px}

  /* ---------- Creators list + Add Creators ---------- */
  #cd-creatorlist tr.bd-rowlink{gap:1px 6px;padding:7px 30px 7px 10px}
  #cd-creatorlist tr.bd-rowlink::after{top:6px;right:10px}
  #cd-creatorlist .bd-avatar{width:30px;height:30px}
  #cd-addtable tr.bd-rowexp{gap:1px 6px;padding:7px 10px}
  #cd-addtable .bd-avatar{width:30px;height:30px}

  /* ---------- Creator Leads ---------- */
  .bb-leads tr{padding-right:44px}
  .bb-leads tr.bb-open td:nth-child(9) .ld-price,.bb-leads tr.bb-open td:nth-child(10) .ld-videos{height:36px;min-height:36px}

  /* ---------- CPV Submissions ---------- */
  .cpv-sub-table tr{gap:4px 8px;padding:7px 10px}
  .cpv-sub-table td.cpv-actions-cell{min-height:38px}
  .cpv-sub-table td.cpv-actions-cell .bd-btn{min-height:38px}

  /* ---------- Client portal ---------- */
  .cp-perf__row{gap:4px 8px;padding:8px 0}
  .cp-windows__grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
  .cp-windows__value{font-size:18px;margin-top:2px}
  .cp-windows__label{font-size:10px}
  .cp-windows__block .bd-muted-sm{font-size:10px;line-height:1.3}
  .portal-campaign__visual{height:96px}
  #cpd-creators tr:not(.bd-rowexpand){gap:3px 8px;padding:7px 10px}
  #cpd-creators .cd-completion .bd-progress{height:4px}

  /* ---------- Creator surfaces ---------- */
  .bd-landing__cover{height:92px;font-size:34px}
  .bd-landing__cardbody{padding:12px;gap:7px}
  /* My Campaigns post rows: Batch B-style flex cards (the generic
     stack ran ~302px per post); labels ride inline via data-label */
  .creator-subs .bd-table--inner{display:block;width:100%;min-width:0;max-width:100%}
  .creator-subs .bd-table--inner thead{display:none}
  .creator-subs .bd-table--inner tbody{display:block}
  .creator-subs .bd-table--inner tr{display:flex;flex-wrap:wrap;align-items:center;gap:3px 10px;width:auto;padding:7px 10px;border-bottom:1px solid var(--bd-border)}
  .creator-subs .bd-table--inner td{display:block!important;flex:none;width:auto!important;min-width:0;height:auto!important;padding:0!important;border:0!important;text-align:left!important;font-size:12.5px;line-height:1.35;white-space:nowrap}
  .creator-subs .bd-table--inner td::before{display:none}
  .creator-subs .bd-table--inner td.num{font-weight:600;color:var(--bd-ink)}
  .creator-subs .bd-table--inner td.num[data-label]:not([data-label=""])::before{display:inline-block;content:attr(data-label);margin-right:5px;color:var(--bd-muted);font-size:9px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;vertical-align:1px}
  .creator-subs .bd-table--inner .bd-linkbtn{min-height:32px;padding-top:6px;padding-bottom:6px}
}

/* Quiet completion-flag note (2026-10-23): a completed campaign with an
   unpaid invoice states the Manager Attention flag once, calmly, with
   the invoice steps on the Financials tab — muted text, no banner, no
   red. Indented to align with the step body text (30px icon + 14px gap
   + 4px step padding). */
.bd-finnote{display:flex;gap:8px;align-items:flex-start;margin-left:48px;padding:0 4px 14px;font-size:12.5px;line-height:1.45;color:var(--bd-muted-strong)}
.bd-finnote svg{width:13px;height:13px;flex:none;margin-top:2px;stroke:var(--bd-muted);fill:none;stroke-width:1.8}

/* ---- Creator Leads sections (2026-10-27): In-Groupchat / No
   Groupchat split, the Active campaigns count + expansion, the
   Groupchat toggle switch, and the row actions. Appended columns
   (Campaigns 11, Groupchat 12, actions 13) keep every positional
   rule above valid. ---- */
.ld-section{margin-bottom:4px}
/* Active campaigns count — a quiet pill button; clicking toggles
   the lead's campaign-list row, same as the row chevron. */
.ld-camps{display:inline-flex;align-items:center;justify-content:center;min-width:34px;height:28px;padding:0 9px;border-radius:999px;border:1px solid var(--bd-border);background:var(--bd-hover);color:var(--bd-text);font:inherit;font-size:12.5px;font-weight:700;cursor:pointer}
.ld-camps:hover{border-color:var(--bd-accent)}
/* Groupchat toggle — compact switch + label. */
.ld-gc{display:inline-flex;align-items:center;gap:7px;cursor:pointer;font-size:12px;font-weight:600;color:var(--bd-muted-strong);white-space:nowrap;position:relative}
.ld-gc input{position:absolute;left:0;top:50%;transform:translateY(-50%);width:34px;height:20px;margin:0;opacity:0;cursor:pointer}
.ld-gc__track{width:34px;height:20px;border-radius:999px;background:#d4d9d4;position:relative;flex:none;transition:background .15s}
.ld-gc__track::after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;transition:left .15s}
.ld-gc input:checked + .ld-gc__track{background:var(--bd-green-text)}
.ld-gc input:checked + .ld-gc__track::after{left:16px}
.ld-gc input:focus-visible + .ld-gc__track{outline:2px solid var(--bd-purple);outline-offset:2px}
/* Campaign-list expansion row content. */
.ld-detail__label{display:block;font-size:10px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--bd-muted);margin-bottom:3px}
.ld-detail__list{display:flex;flex-wrap:wrap;gap:4px 16px}
@media (max-width:768px){
  /* the expansion row is a full-width block under its card (the
     generic bd-rowexpand rule already blocks its cell) */
  .bb-leads tr.ld-detail{display:block}
  /* the new cells join the expanded card's field flow like the
     price / videos cells */
  .bb-leads tr.bb-open td:nth-child(11),.bb-leads tr.bb-open td:nth-child(12){flex:1 1 40%;min-width:0}
  .bb-leads tr.bb-open td:nth-child(11)::before,.bb-leads tr.bb-open td:nth-child(12)::before{display:inline-block;content:attr(data-label);margin-right:5px;color:var(--bd-muted);font-size:9px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;vertical-align:1px}
  .bb-leads tr.bb-open td.ld-actions{flex:1 1 100%;white-space:normal}
}

/* ---- Statistics creators sections (2026-10-27): the section
   header rows inside #cd-creators — one strip per section tbody
   (From Creator Leads / Ready for Payment, Paid & Posting /
   Sent Audio — Negotiating), dot + label + visible count, the
   Campaigns-list section idiom carried into the table. ---- */
#cd-creators tr.cd-sechead td{background:var(--bd-hover);height:auto;padding:8px 14px;border-top:1px solid var(--bd-border);border-bottom:1px solid var(--bd-border)}
.cd-sechead__in{display:flex;align-items:center;gap:9px}
.cd-sechead__label{font-family:var(--font-ui);font-size:11px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--bd-ink)}
/* Section 1's total rides the right of its header strip: the sum of
   the section's booking prices, named as outside the budget. */
.cd-sechead__total{margin-left:auto;font-size:12px;font-weight:600;color:var(--bd-muted-strong);white-space:nowrap}

/* ================================================================
   CREATOR LEADS — desktop compaction (2026-10-27 follow-up).
   The 2026-10-14 fit pass sized this table for its widest control
   strings: a 1190px min-width floor and a 226px Price track, with
   the appended columns (Videos / Campaigns / Groupchat / actions)
   at natural width — the actions cell alone wanted ~353px. The
   sheet's wrapper offers ~924px at a 1280px viewport, so the table
   scrolled ~600px sideways and the ⋯ sat off-screen. This pass
   drops the floor and gives all 13 columns compact fixed tracks
   summing to 910px: controls shrink to their track (the status
   select clips its long labels while closed — the opened list
   still shows them in full), text cells ellipsize (full text in
   the cell title), and the two action buttons stack in one cell
   with the ⋯ beside them; the standalone × moved into that menu,
   leaving one actions column. The ≤900px card layout is untouched.
   ================================================================ */
@media (min-width:901px){
  .bd-table--leads{table-layout:fixed;min-width:0;width:100%}
  .bd-table--leads thead th,.bd-table--leads tbody td{padding-left:5px;padding-right:5px}
  .bd-table--leads thead th{font-size:8.2px;letter-spacing:.3px}
  /* height:auto releases the legacy global td height (36px) that
     pinned the actions cell while its stacked buttons need ~56px —
     the row now grows to fit them instead of clipping the second. */
  .bd-table--leads tbody td{font-size:11.5px;height:auto;padding-top:9px;padding-bottom:9px}
  .bd-table--leads thead th:nth-child(1){width:84px}
  .bd-table--leads thead th:nth-child(2){width:50px}
  .bd-table--leads thead th:nth-child(3){width:56px}
  .bd-table--leads thead th:nth-child(4){width:78px}
  .bd-table--leads thead th:nth-child(5){width:62px}
  .bd-table--leads thead th:nth-child(6){width:104px}
  .bd-table--leads thead th:nth-child(7){width:54px}
  .bd-table--leads thead th:nth-child(8){width:70px}
  .bd-table--leads thead th:nth-child(9){width:56px}
  .bd-table--leads thead th:nth-child(10){width:40px}
  .bd-table--leads thead th:nth-child(11){width:52px}
  .bd-table--leads thead th:nth-child(12){width:52px}
  .bd-table--leads thead th:nth-child(13){width:148px}
  /* text cells clip inside their track instead of forcing width */
  .bd-table--leads tbody td:nth-child(2){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .bd-table--leads td.ld-added{font-size:10px}
  /* controls take their track's width at one compact height */
  .bd-table--leads .bd-selwrap{display:block;width:100%}
  .bd-table--leads td select.bd-select--sm{width:100%;height:28px;font-size:11px;padding-left:6px;padding-right:20px}
  .bd-table--leads .bd-selchev{right:5px}
  .bd-table--leads .bd-selchev svg{width:11px;height:11px}
  .bd-table--leads .ld-price,.bd-table--leads .ld-videos{width:100%;height:28px;padding:4px 6px;font-size:11px}
  .bd-table--leads .ld-camps{min-width:30px;height:24px;padding:0 7px;font-size:11.5px}
  /* the Groupchat cell is the switch alone (the header names it;
     the input keeps its aria-label) */
  .bd-table--leads .ld-gc>span:last-child{display:none}
  /* actions: the pair stacks in one cell, the ⋯ rides beside them */
  .bd-table--leads td.ld-actions{display:grid;grid-template-columns:minmax(0,1fr) 26px;grid-template-rows:auto auto;gap:4px;align-items:start;white-space:normal}
  .bd-table--leads td.ld-actions .bd-btn--sm{width:100%;height:26px;min-height:26px;padding:0 2px;font-size:9.2px;letter-spacing:-.1px;border-radius:7px;justify-content:center}
  .bd-table--leads td.ld-actions .ld-profile{margin-left:0}
  .bd-table--leads td.ld-actions .ld-menu{grid-column:2;grid-row:1;width:26px;height:26px;margin:0}
}

/* ================================================================
   Creator Leads filter bar — one-row desktop arrangement
   (2026-10-27). The bar's selects carry .bd-select{width:100%}, so
   as flex items each one stretched onto a full-width row of its
   own: 4 stacked rows, 189px tall, even on a maximized window.
   Scoped to the leads bar only: above 768px the four controls sit
   on ONE row — the search flexes inside a 260–360px band and the
   selects size to their content (150–220px) — and the row wraps
   to two rows gracefully when the content column narrows.
   At ≤768px nothing changes: the generic stacked .bd-filterbar
   treatment stays.
   ================================================================ */
@media (min-width:769px){
  .bd-filterbar--leads .bd-search{flex:1 1 300px;min-width:260px;max-width:360px}
  .bd-filterbar--leads .bd-select{width:auto;flex:0 1 auto;min-width:150px;max-width:220px}
}

/* ================================================================
   Campaigns list polish (Max, 2026-10-27): the row's right side
   becomes one clean group. Measured before: the status select's
   track was minmax(150px,1.05fr) — 150px at 1280/1440 while the
   select's own content width is 202px — and the 30px "go" track
   held a 30px ⋯ button + a 16px arrow icon, so the button was
   pushed 6px INTO the select and the arrow crowded the row's
   right edge. Now:
   - the status track is a fixed 202px (the widest status label,
     "Payment Process Pending", at its intrinsic width) in BOTH
     the list head and the rows — same tracks, so the STATUS
     header stays exactly over the selects;
   - the trailing arrow is gone (markup): the row is the link,
     the select has its own chevron. The go track is 36px and
     holds only the 30px ⋯ button, centred, with the grid gap
     separating it from the select and 10px of row right padding
     separating it from the row's edge;
   - row vertical padding is one value (18px) in every mode —
     the old :first-child 2px top made the Past view's first row
     sit tighter than every other row;
   - the header actions sit on one line (markup wraps them in
     .bd-camphead-actions); the camps filter bar's selects and
     toggle get one min-height so their boxes share the search
     field's centreline with even gaps.
   Scoped to .bd-camplist (this page only). The mobile card
   grids below 769px are !important and keep their treatment;
   the arrow's removal alone cleans the mobile ⋯ cell.
   ================================================================ */
.bd-camphead-actions{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.bd-camplist .bd-campaign{grid-template-columns:44px minmax(0,1.5fr) minmax(0,.7fr) minmax(0,.7fr) minmax(120px,.9fr) minmax(0,.8fr) minmax(0,.7fr) minmax(0,.8fr) 202px 36px;padding:18px 10px 18px 0}
.bd-camplist .bd-campaign--manage{grid-template-columns:30px 44px minmax(0,1.5fr) minmax(0,.7fr) minmax(0,.7fr) minmax(120px,.9fr) minmax(0,.8fr) minmax(0,.7fr) minmax(0,.8fr) 202px 36px}
.bd-camplist .bd-campaigns__head{grid-template-columns:44px minmax(0,1.5fr) minmax(0,.7fr) minmax(0,.7fr) minmax(120px,.9fr) minmax(0,.8fr) minmax(0,.7fr) minmax(0,.8fr) 202px 36px;padding-right:10px}
.bd-camplist .bd-campaigns__head--manage{grid-template-columns:30px 44px minmax(0,1.5fr) minmax(0,.7fr) minmax(0,.7fr) minmax(120px,.9fr) minmax(0,.8fr) minmax(0,.7fr) minmax(0,.8fr) 202px 36px}
.bd-camplist .bd-campaign__go{justify-content:center;align-items:center}
.bd-camplist .bd-campmenu-btn{margin-right:0}
.bd-camplist .bd-statusselect{width:100%}
.bd-filterbar--camps .bd-select--sm,.bd-filterbar--camps .bd-btn--sm{min-height:36px}

/* POC batch (2026-10-27): POC chip, POC editor value wraps, inline form
   errors, Back to Top on the campaign creators sheet. */
.bd-chip--poc{background:var(--bd-green-soft,#e6f4ec);border-color:transparent;color:var(--bd-green-text,#1d7a4f);white-space:nowrap}
.bd-table .bd-chip--poc{padding:2px 8px;font-size:10.5px;vertical-align:middle}
.poc-valwrap[hidden],.np-pocwrap[hidden]{display:none!important}
.bd-alert--err{background:#fdeeee;border:1px solid #f3c1c1;color:#a8443c;border-radius:10px;padding:10px 14px;font-size:13px;margin-top:10px}
.bd-backtotop{position:fixed;right:20px;bottom:24px;z-index:40;display:flex;align-items:center;gap:6px;padding:10px 16px;border-radius:999px;border:1px solid var(--bd-border);background:var(--bd-card);color:var(--bd-ink);font:600 13px var(--font-ui);box-shadow:0 10px 28px rgba(10,25,18,.18);cursor:pointer;opacity:0;pointer-events:none;transform:translateY(8px);transition:opacity .25s ease,transform .25s ease}
.bd-backtotop--show{opacity:1;pointer-events:auto;transform:none}
@media(max-width:900px){.bd-backtotop{bottom:calc(84px + env(safe-area-inset-bottom));right:14px}}
.cd-addprof{cursor:pointer}
.cd-addprof:hover strong{color:var(--bd-purple-deep)}

/* ================================================================
   Add Creators filter bar — one-row desktop arrangement
   (2026-10-27, the -34 Creator Leads treatment applied to the
   campaign Add Creators tab). The header was an inline-styled flex
   div whose selects carry .bd-select{width:100%}, so "All niches"
   and "All platforms" each stretched full-width onto their own
   stacked row (bar 154px tall) and pushed "+ New creator" onto a
   fourth row. Scoped to this tab's bar only, same numbers as the
   leads bar: above 768px the controls sit on ONE row — the search
   flexes inside a 260–360px band and the selects size to their
   content (150–220px) — wrapping only when the column narrows;
   at ≤768px the generic .bd-filterbar treatment stays.
   ================================================================ */
@media (min-width:769px){
  .bd-filterbar--addcreators #cd-addq{flex:1 1 300px;min-width:260px;max-width:360px}
  .bd-filterbar--addcreators .bd-select{width:auto;flex:0 1 auto;min-width:150px;max-width:220px}
}

/* ================================================================
   Platform cohesion pass (2026-10-27, Max): every page reads as
   one platform — the -34/-35 filter-bar pattern becomes the shared
   .bd-filterbar--std modifier (Creators, Bloom Profiles, Clients,
   Team, Financials Campaigns + Refunds bars adopt it; their inline
   max-width styles are gone), the scoped reference bars share the
   Campaigns 36px control height, page-head actions can no longer
   be squeezed by a long subtitle, and the hand-rolled detail
   title (.bd-pagehead__title h1) takes the shared title weight.
   ================================================================ */
.bd-topbar__controls{flex-shrink:0}
.bd-pagehead__title h1{font-weight:600}
@media (min-width:769px){
  .bd-filterbar--std .bd-search{flex:1 1 300px;min-width:260px;max-width:360px}
  .bd-filterbar--std .bd-select{width:auto;flex:0 1 auto;min-width:150px;max-width:220px;height:36px;min-height:36px}
  .bd-filterbar--std .bd-select--sm,.bd-filterbar--std .bd-btn--sm{min-height:36px}
  .bd-filterbar--leads .bd-select,.bd-filterbar--addcreators .bd-select{min-height:36px}
}

/* ================================================================
   Filter-select sizing fix (Max, 2026-10-27): on the Creator List
   the niche/platform selects squeezed their values against the
   chevron ("Movie Edits" unreadable). The cohesion sizing above
   left every filter-bar select flex:0 1 auto under a 220px cap, so
   in a crowded bar the box could end up narrower than its widest
   option + chevron zone. Now, on desktop:
   - selects never shrink (flex:0 0 auto): width:auto sizes the box
     to the widest option, and a crowded bar wraps instead of
     squeezing a select;
   - the cap rises 220px -> 300px so long values (niche names, the
     Refunds month labels) fit whole;
   - padding-right reserves an explicit chevron zone (26px, 24px on
     the Campaigns bar's --sm selects) so text never runs under the
     arrow in any engine.
   On phones the generic grid bars give each select its own
   full-width row (the Campaigns bar keeps its built 2-up grid),
   and the Creator List's two selects stop sharing a row — at 390px
   the shared row left "Video Game Edits" 5px under its chevron.
   ================================================================ */
@media (min-width:769px){
  .bd-filterbar--std .bd-select,.bd-filterbar--leads .bd-select,.bd-filterbar--addcreators .bd-select{flex:0 0 auto;max-width:300px;padding-right:26px}
  .bd-filterbar--camps .bd-select{max-width:300px;padding-right:24px}
}
@media (max-width:560px){
  .bd-filterbar:not(.bd-filterbar--camps)>.bd-select{grid-column:1/-1}
  #cr-body .bd-filterbar .bd-select{flex:1 1 100%}
}

/* Version guard banner (app.js bdShowUpdateBanner): slim bar pinned to the
   very top when a newer build is live; deep-green Bloom bar, purple Update. */
.bd-update-banner{position:fixed;top:0;left:0;right:0;z-index:95;display:flex;align-items:center;justify-content:center;gap:12px;padding:calc(8px + env(safe-area-inset-top)) 14px 8px;background:var(--bd-sidebar);color:#fff;font-family:var(--font-body);font-size:12.5px;box-shadow:0 2px 10px rgba(11,61,46,.28)}
.bd-update-banner__msg{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bd-update-banner__btn{flex:none;border:0;border-radius:999px;background:var(--bd-purple);color:#fff;font-family:var(--font-ui);font-weight:600;font-size:11.5px;padding:5px 14px;cursor:pointer}
.bd-update-banner__btn:hover{background:var(--bd-purple-deep)}
.bd-update-banner__close{flex:none;border:0;background:transparent;color:#cfe3d9;font-size:16px;line-height:1;padding:2px 6px;cursor:pointer}
.bd-update-banner__close:hover{color:#fff}

/* ---- Clients list (bb-clients): IDENTITY + POLISH (Max, 2026-10-28,
   round 3). The -58 compact grid was functional but flat: rows sat as
   hairline-divided lines inside one big container, the name was plain
   text and Edit read as an unstyled white pill. Still Clients-scoped
   and ≤900px-only (plus the monogram's desktop display:none) — every
   rule reuses the app's own tokens (.bd-card surface/border/radius/
   shadow, the #0B3D2E brand green, bd-btn--primary for View portal):
     · each client is its own elevated card; the shared container
       chrome is neutralized only around this table (:has);
     · brand-green monogram chip beside a stronger name;
     · stats keep the one tight row, values gain real weight;
     · Edit becomes a ghost button (transparent + border, the app's
       bd-btn--ghostlight shape) instead of the default light pill.
   The -57/-58 overlap fix is untouched: stat labels stay BLOCK lines
   above their values with the 46% clamp removed. ---- */
.cl-mono{display:none}
@media (max-width:900px){
  .bd-app .bd-card--table:has(.bb-clients){background:transparent;border-color:transparent;box-shadow:none;padding:0}
  .bb-clients.bd-table--cards tr.cl-row{background:var(--bd-card);border:1px solid var(--bd-border);border-bottom:1px solid var(--bd-border);border-radius:var(--radius-card);box-shadow:0 1px 3px #16281f0a;padding:8px 11px;margin:0 0 10px;gap:4px 8px}
  html[data-theme="dark"] .bb-clients.bd-table--cards tr.cl-row{box-shadow:0 1px 2px rgba(0,0,0,.25),0 8px 24px rgba(0,0,0,.3)}
  .bb-clients td:first-child:not([colspan]){display:flex!important;align-items:center;gap:8px}
  .cl-mono{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;flex:none;border-radius:50%;background:var(--bd-sidebar);color:#e8f3ec;font:700 10.5px var(--font-ui);letter-spacing:.2px}
  .cl-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600;font-size:12.5px}
  .bb-clients td.num{font-size:13px;font-weight:700}
  .bb-clients td.num[data-label]:not([data-label=""])::before{font-weight:600;letter-spacing:.4px}
  .bb-clients.bd-table--cards td:last-child .bd-btn{height:28px;min-height:28px;padding:4px 11px;font-size:12px;border-radius:9px;gap:5px}
  .bb-clients.bd-table--cards td:last-child .bd-btn:not(.bd-btn--primary):not(.bd-btn--danger-ghost){background:transparent;border:1px solid var(--bd-border);color:var(--bd-ink)}
  .cl-footnote{margin-top:0}
}
