/* ==========================================
   Shared Dashboard Pages Stylesheet
   ========================================== */

/* Stats Grid */
.dp-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;margin-bottom:28px}
.dp-stat-card{background:var(--wv-surface);border-radius:14px;padding:20px 18px;display:flex;justify-content:space-between;align-items:center;box-shadow:0 2px 10px rgba(0,0,0,.05)}
.dp-stat-label{font-size:var(--wv-fs-meta);color:var(--wv-text-muted);margin-bottom:6px;display:block}
.dp-stat-val{font-family:var(--wv-ff);font-variant-numeric:tabular-nums;font-size:var(--wv-fs-h2);font-weight:800;color:var(--wv-primary)}
.dp-icon{width:48px;height:48px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:var(--wv-fs-h3)}
.dp-teal{background:var(--wv-info-soft);color:var(--wv-info-ink)}
.dp-green{background:var(--wv-success-soft);color:var(--wv-success-ink)}
.dp-red{background:var(--wv-danger-soft);color:var(--wv-danger-ink)}
.dp-yellow{background:rgba(253,197,90,.15);color:var(--wv-warning-ink)}
.dp-orange{background:var(--wv-accent-soft);color:var(--wv-accent-ink)}
.dp-blue{background:var(--wv-info-soft);color:var(--wv-info-ink)}
.dp-purple{background:rgba(39,4,66,.1);color:var(--wv-primary)}

/* Main Card */
.dp-card{background:var(--wv-surface);border-radius:16px;box-shadow:0 2px 12px rgba(0,0,0,.05);overflow:hidden}

/* Toolbar */
.dp-toolbar{display:flex;justify-content:space-between;align-items:center;padding:18px 24px 0}
.dp-toolbar-left{display:flex;gap:10px;align-items:center}

/* Toggle */
.dp-toggle{position:relative;display:inline-block;width:46px;height:25px}
.dp-toggle input{opacity:0;width:0;height:0}
.dp-slider{position:absolute;cursor:pointer;inset:0;background:var(--wv-danger);border-radius:25px;transition:.3s}
.dp-slider::before{content:'';position:absolute;width:19px;height:19px;border-radius:50%;background:white;bottom:3px;right:3px;transition:.3s}
.dp-toggle input:checked+.dp-slider{background:var(--wv-success-fill)}
.dp-toggle input:checked+.dp-slider::before{transform:translateX(-21px)}

/* Tabs */
.dp-tabs{display:flex;border-bottom:1px solid var(--wv-border-subtle);padding:0 24px;margin-top:6px}
.dp-tab{background:none;border:none;padding:16px 20px 14px;font-family:'Almarai',sans-serif;font-size:var(--wv-fs-sm);font-weight:700;color:var(--wv-text-muted);cursor:pointer;position:relative;transition:color .2s}
.dp-tab::after{content:'';position:absolute;bottom:-1px;right:0;left:0;height:3px;background:var(--wv-accent);border-radius:3px 3px 0 0;transform:scaleX(0);transition:transform .2s}
.dp-tab.active{color:var(--wv-accent-ink)}
.dp-tab.active::after{transform:scaleX(1)}
.dp-tab-content{display:none;padding:24px}
.dp-tab-content.active{display:block}
.dp-tab-toolbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}
.dp-tab-title{font-size:var(--wv-fs-label);font-weight:700;color:var(--wv-primary)}

/* Form */
.dp-form{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.dp-fg{display:flex;flex-direction:column;gap:6px}
.dp-fg label{font-size:var(--wv-fs-meta);color:var(--wv-text-2)}
.dp-fg input,.dp-fg select,.dp-fg textarea{min-height:44px;border:1px solid var(--wv-border-input);border-radius:var(--wv-r-md);padding:12px 16px;font-family:'Almarai',sans-serif;font-size:max(16px,var(--wv-fs-body));color:var(--wv-primary);outline:none;transition:border-color .2s;background:var(--wv-surface);width:100%}
.dp-fg input:focus,.dp-fg select:focus,.dp-fg textarea:focus{border-color:var(--wv-primary)}
.dp-fg input::placeholder,.dp-fg textarea::placeholder{color:var(--wv-text-muted)}
.dp-fg.full{grid-column:1/-1}

/* Table */
table{width:100%;border-collapse:collapse;font-size:var(--wv-fs-meta)}
thead th{padding:10px 14px;text-align:right;color:var(--wv-text-muted);font-weight:700;font-size:var(--wv-fs-xs);border-bottom:1px solid var(--wv-border-subtle);white-space:nowrap}
tbody td{padding:12px 14px;color:var(--wv-text);border-bottom:1px solid var(--wv-border-subtle);vertical-align:middle}
tbody tr:last-child td{border-bottom:none}
tbody tr:hover{background:rgba(39,4,66,.015)}
.dp-cell{display:flex;align-items:center;gap:10px}
.dp-cell img{width:36px;height:36px;border-radius:8px;object-fit:cover}
.dp-badge{display:inline-flex;align-items:center;background:var(--wv-info-soft);color:var(--wv-info-ink);border-radius:20px;padding:3px 11px;font-size:var(--wv-fs-xs);font-weight:700}
.dp-badge-green{background:var(--wv-success-soft);color:var(--wv-success-ink)}
.dp-badge-red{background:var(--wv-danger-soft);color:var(--wv-danger-ink)}
.dp-badge-success{background:var(--wv-success);color:white;border-radius:20px;padding:4px 14px;font-size:var(--wv-fs-xs);font-weight:700;display:inline-flex;align-items:center}

/* Action Dropdown */
.dp-aw{position:relative;display:inline-block}
.dp-ab{background:none;border:1px solid var(--wv-border-subtle);border-radius:8px;width:32px;height:32px;cursor:pointer;color:var(--wv-text-muted);display:flex;align-items:center;justify-content:center;transition:all .2s}
.dp-ab:hover,.dp-ab.open{border-color:var(--wv-primary);color:var(--wv-primary);background:rgba(39,4,66,.04)}
.dp-dd{display:none;position:absolute;left:0;top:calc(100% + 6px);background:var(--wv-surface);border:1px solid var(--wv-border-subtle);border-radius:12px;box-shadow:0 8px 24px rgba(0,0,0,.12);min-width:155px;z-index:var(--wv-z-dropdown);overflow:hidden;animation:dropIn .15s ease}
.dp-dd.show{display:block}
@keyframes dropIn{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}
.dp-dd button{display:flex;align-items:center;gap:10px;width:100%;padding:10px 14px;background:none;border:none;font-family:'Almarai',sans-serif;font-size:var(--wv-fs-meta);color:var(--wv-text);cursor:pointer;text-align:right;transition:background .15s}
.dp-dd button:hover{background:var(--wv-surface-soft)}
.dp-del-btn{color:var(--wv-danger-ink)!important}
.dp-del-btn i{color:var(--wv-danger-ink)!important}
.dp-dd hr{border:none;border-top:1px solid var(--wv-border-subtle);margin:0}

/* Pagination */
.dp-pagination{display:flex;align-items:center;justify-content:center;gap:6px;margin-top:28px;font-size:var(--wv-fs-sm)}
.dp-pagination a,.dp-pagination span{display:inline-flex;align-items:center;justify-content:center;min-width:34px;height:34px;border-radius:8px;border:1px solid var(--wv-border-subtle);color:var(--wv-text-2);padding:0 8px;transition:all .2s;text-decoration:none;font-family:var(--wv-ff);font-variant-numeric:tabular-nums}
.dp-pagination a:hover{border-color:var(--wv-primary);color:var(--wv-primary)}
.dp-pg-active{background:var(--wv-primary)!important;color:white!important;border-color:var(--wv-primary)!important}
.dp-pg-dots{border:none!important;color:#aaa;pointer-events:none}

/* User header card */
.dp-user-header{display:flex;justify-content:space-between;align-items:center;padding:20px 24px 0}
.dp-user-name{display:flex;align-items:center;gap:12px}
.dp-user-name h2{font-size:var(--wv-fs-h4);font-weight:700;color:var(--wv-primary)}
.dp-user-avatar-lg{width:44px;height:44px;border-radius:50%;background:var(--wv-border);display:flex;align-items:center;justify-content:center;overflow:hidden;color:var(--wv-text-muted);font-size:var(--wv-fs-h3)}

/* Modal */
.modal-overlay{display:none;position:fixed;inset:0;background:var(--wv-scrim);z-index:var(--wv-z-modal);align-items:center;justify-content:center}
.modal-overlay.show{display:flex}
.modal-box{background:var(--wv-surface);border-radius:var(--wv-r-xl);padding:36px 32px;max-width:400px;width:90%;text-align:center;box-shadow:var(--wv-sh-lg);animation:modalIn .2s ease}
@keyframes modalIn{from{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}
.modal-icon{width:64px;height:64px;background:rgba(239,68,68,.1);border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 18px}
.modal-icon i{font-size:var(--wv-fs-h2);color:var(--wv-danger-ink)}
.modal-box h3{font-size:var(--wv-fs-h4);font-weight:700;color:var(--wv-primary);margin-bottom:10px}
.modal-box p{font-size:var(--wv-fs-sm);color:var(--wv-text-muted);margin-bottom:28px;line-height:1.6}
.modal-actions{display:flex;gap:12px;justify-content:center}
.btn-cancel-modal{flex:1}
.btn-confirm-delete{flex:1}

/* Sidebar active */
.sidebar-nav li.active>a{background:var(--wv-accent)!important;color:var(--wv-on-accent)!important;border-radius:10px}
.sidebar-nav li.active>a i{color:var(--wv-on-accent)!important}

/* Image gallery */
.img-gallery{display:flex;gap:10px;flex-wrap:wrap;padding:12px 0}
.img-gallery img{width:90px;height:70px;border-radius:10px;object-fit:cover;border:2px solid var(--wv-border-subtle)}

/* Map placeholder */
.dp-map{width:100%;height:200px;border-radius:12px;border:none;margin-top:8px}

@media(max-width:1100px){.dp-stats{grid-template-columns:repeat(2,1fr)}}
@media(max-width:768px){.dashboard-main{margin-right:0}.dp-stats{grid-template-columns:1fr}.dp-form{grid-template-columns:1fr}}

/* ==========================================
   Events module (issue #236) — owner + admin dashboards
   Authored RTL-first with physical properties; `python scripts/gen-ltr.py`
   mirrors every direction-sensitive declaration below into css/ltr.css.
   ========================================== */

/* Page head + filters */
.ev-card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex-wrap:wrap;padding:22px 24px 6px}
.ev-page-title{font-family:var(--wv-ff);font-size:var(--wv-fs-h4);font-weight:800;color:var(--wv-primary);margin:0 0 4px}
.ev-page-sub{font-size:var(--wv-fs-meta);color:var(--wv-text-muted);margin:0;line-height:1.7;max-width:640px}
.ev-filters{display:flex;gap:10px;align-items:center;flex-wrap:wrap;padding:14px 24px}
.ev-filters select,.ev-filters input[type=date]{min-height:44px;border:1px solid var(--wv-border-input);border-radius:var(--wv-r-md);padding:8px 12px;font-family:'Almarai',sans-serif;font-size:max(16px,var(--wv-fs-body));color:var(--wv-primary);outline:none;background:var(--wv-surface)}
.ev-search{position:relative;display:flex;align-items:center}
.ev-search i{position:absolute;right:12px;color:#B0B0B0;font-size:var(--wv-fs-meta);pointer-events:none}
.ev-search input{min-height:44px;border:1px solid var(--wv-border-input);border-radius:var(--wv-r-md);padding:8px 34px 8px 12px;font-family:'Almarai',sans-serif;font-size:max(16px,var(--wv-fs-body));color:var(--wv-primary);outline:none;min-width:220px}

/* Table */
.ev-table-wrap{overflow-x:auto;padding:0 24px 8px}
.ev-table{width:100%;border-collapse:collapse}
.ev-table th{text-align:right;font-size:var(--wv-fs-xs);font-weight:700;color:var(--wv-text-muted);padding:12px 10px;border-bottom:1px solid var(--wv-border-subtle);white-space:nowrap}
.ev-table td{font-size:var(--wv-fs-meta);color:var(--wv-text-2);padding:14px 10px;border-bottom:1px solid var(--wv-border-subtle);vertical-align:middle}
.ev-name-cell{font-weight:700;color:var(--wv-primary)}
.ev-muted{color:var(--wv-text-muted);font-size:var(--wv-fs-xs)}
.ev-cell-msg{text-align:center;padding:40px 10px;color:var(--wv-text-muted)}
.ev-cell-err{color:var(--wv-danger-ink)}
.ev-retry{margin-right:8px;border:1px solid var(--wv-border);background:var(--wv-surface);border-radius:8px;padding:6px 12px;font-family:'Almarai',sans-serif;font-size:var(--wv-fs-xs);color:var(--wv-primary);cursor:pointer}
.ev-empty{text-align:center;padding:56px 20px;color:var(--wv-text-muted)}
.ev-empty i{font-size:var(--wv-fs-display);color:#DADADA;display:block;margin-bottom:14px}
.ev-empty p{margin:0 0 16px;font-size:var(--wv-fs-label)}

/* Row action icon buttons */
.ev-row-actions{display:flex;gap:6px;flex-wrap:wrap}
.ev-act{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:8px;background:rgba(39,4,66,.07);color:var(--wv-primary);cursor:pointer;font-size:var(--wv-fs-meta);transition:background .2s,color .2s;text-decoration:none}
.ev-act:hover{background:var(--wv-primary);color:var(--wv-on-primary)}
.ev-act.danger{background:rgba(239,68,68,.1);color:var(--wv-danger-ink)}
.ev-act.danger:hover{background:var(--wv-danger);color:var(--wv-on-primary)}

/* Status pills — three separate dimensions, icon + text always
   (spec section 7: status is never colour alone). */
.status-pill{display:inline-flex;align-items:center;gap:6px;border-radius:var(--wv-r-pill);padding:4px 12px;font-size:var(--wv-fs-xs);font-weight:700;line-height:1.7;white-space:nowrap;margin-left:4px}
.status-pill i{font-size:var(--wv-fs-xs)}
.status-pill--draft{background:var(--wv-border-subtle);color:var(--wv-text-muted)}
.status-pill--underreview{background:var(--wv-warning-soft);color:var(--wv-warning-ink)}
.status-pill--changesrequested{background:var(--wv-info-soft);color:var(--wv-info-ink)}
.status-pill--published{background:var(--wv-success-soft);color:var(--wv-success-ink)}
.status-pill--rejected{background:var(--wv-danger-soft);color:var(--wv-danger-ink)}
.status-pill--archived{background:var(--wv-border);color:var(--wv-text-2)}
.status-pill--upcoming{background:var(--wv-primary-50);color:var(--wv-primary)}
.status-pill--ongoing{background:var(--wv-success-soft);color:var(--wv-success-ink)}
.status-pill--ended{background:var(--wv-border-subtle);color:var(--wv-text-muted)}
.status-pill--postponed{background:var(--wv-warning-soft);color:var(--wv-warning-ink)}
.status-pill--cancelled{background:var(--wv-danger-soft);color:var(--wv-danger-ink)}
.status-pill--verified{background:var(--wv-info-soft);color:var(--wv-info-ink)}
/* Hidden is not Archived — reusing --archived rendered them identically. */
.status-pill--hidden{background:var(--wv-surface-app);color:var(--wv-text-2)}
.ev-rev-tag{display:inline-flex;align-items:center;gap:5px;background:var(--wv-warning-soft);color:#B45309;border-radius:16px;padding:3px 10px;font-size:var(--wv-fs-xs);font-weight:700;margin-right:6px}

/* Revision banner */
.revision-banner{display:flex;align-items:center;gap:10px;background:#FFF8E6;border:1px solid #F3DFA8;color:var(--wv-warning-ink);border-radius:12px;padding:12px 16px;font-size:var(--wv-fs-meta);line-height:1.7;margin:0 0 16px}
.revision-banner i{font-size:var(--wv-fs-body);flex-shrink:0}

/* Buttons */
.ev-btn.is-busy{opacity:.6}

/* 7-step form */
.ev-form-shell{padding:0 24px 24px}
.event-stepper{display:flex;gap:8px;overflow-x:auto;padding:8px 0 18px;border-bottom:1px solid var(--wv-border-subtle);margin-bottom:22px}
.event-step{display:flex;align-items:center;gap:8px;background:none;border:none;padding:8px 10px;border-radius:10px;cursor:pointer;font-family:'Almarai',sans-serif;font-size:var(--wv-fs-xs);font-weight:700;color:var(--wv-text-muted);white-space:nowrap}
.event-step:hover{background:rgba(39,4,66,.05)}
.event-step-num{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:50%;background:var(--wv-border-subtle);color:var(--wv-text-muted);font-family:var(--wv-ff);font-variant-numeric:tabular-nums;font-size:var(--wv-fs-xs);font-weight:700;flex-shrink:0}
.event-step.active{color:var(--wv-primary)}
.event-step.active .event-step-num{background:var(--wv-accent);color:var(--wv-on-accent)}
.event-step.done .event-step-num{background:var(--wv-success-soft);color:var(--wv-success-ink)}
.event-step-label{display:inline-block}

.ev-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.ev-fg{display:flex;flex-direction:column;gap:6px;margin-bottom:16px}
.ev-fg>label{font-size:var(--wv-fs-meta);font-weight:700;color:var(--wv-primary)}
.ev-fg input[type=text],.ev-fg input[type=url],.ev-fg input[type=email],.ev-fg input[type=tel],.ev-fg input[type=number],.ev-fg input[type=date],.ev-fg input[type=time],.ev-fg input[type=datetime-local],.ev-fg select,.ev-fg textarea,.ev-fg input:not([type]){min-height:44px;border:1.5px solid var(--wv-border-input);border-radius:var(--wv-r-md);padding:10px 12px;font-family:'Almarai',sans-serif;font-size:max(16px,var(--wv-fs-body));color:var(--wv-primary);outline:none;background:var(--wv-surface);width:100%}
.ev-fg input:focus,.ev-fg select:focus,.ev-fg textarea:focus{border-color:var(--wv-primary);box-shadow:var(--wv-sh-focus)}
.ev-fg textarea{resize:vertical;line-height:1.7}
.ev-hint{font-size:var(--wv-fs-xs);color:var(--wv-text-muted);line-height:1.7}
.ev-fg.has-error input,.ev-fg.has-error select,.ev-fg.has-error textarea{border-color:var(--wv-danger)}
.ev-field-error{display:flex;align-items:center;gap:6px;font-size:var(--wv-fs-xs);color:var(--wv-danger-ink)}

.ev-radio-row{display:flex;gap:14px;flex-wrap:wrap;padding-top:4px}
.ev-radio,.ev-check,.ev-switch,.ev-day{display:inline-flex;align-items:center;gap:7px;font-size:var(--wv-fs-meta);color:var(--wv-text-2);cursor:pointer}
.ev-switch{margin-left:18px}
.ev-checks{display:flex;gap:16px;flex-wrap:wrap;padding-top:4px}
.ev-days{display:flex;gap:14px;flex-wrap:wrap;padding-top:4px}
.ev-or{text-align:center;color:var(--wv-text-muted);font-size:var(--wv-fs-xs);margin:6px 0}
.ev-tz-note,.ev-organizer-note,.ev-verify-note{display:flex;align-items:center;gap:8px;background:rgba(39,4,66,.04);border-radius:10px;padding:10px 14px;font-size:var(--wv-fs-meta);color:var(--wv-text-2);margin-bottom:16px}
.ev-feedback{background:#EFF6FF;border:1px solid #BFDBFE;color:var(--wv-info);border-radius:12px;padding:12px 16px;font-size:var(--wv-fs-meta);line-height:1.8;margin-bottom:16px}
.ev-errors{background:rgba(239,68,68,.06);border:1px solid rgba(239,68,68,.3);color:var(--wv-danger-ink);border-radius:12px;padding:14px 16px;font-size:var(--wv-fs-meta);line-height:1.8;margin-bottom:16px}
.ev-errors ul{margin:8px 0 0;padding-right:18px}
/* #248: each summary line is a jump control — the summary sits above the
   stepper and the field it names may be six steps away. Styled as a link, not
   a button, so the list still READS as a list. */
.ev-err-jump{background:none;border:0;padding:0;margin:0;font-family:'Almarai',sans-serif;font-size:var(--wv-fs-meta);line-height:1.8;color:var(--wv-danger-ink);text-align:inherit;text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.ev-err-jump:hover{color:#7F1D1D}

.ev-upload{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.ev-upload-btn{display:inline-flex;align-items:center;gap:8px;border:1.5px dashed #D6D6D6;background:var(--wv-surface-soft);border-radius:10px;padding:10px 18px;font-family:'Almarai',sans-serif;font-size:var(--wv-fs-meta);color:var(--wv-primary);cursor:pointer}
.ev-cover-preview{margin-top:10px}
.ev-cover-img{width:160px;height:110px;object-fit:cover;border-radius:10px;border:2px solid var(--wv-border-subtle)}

.ev-repeater-head{display:flex;justify-content:space-between;align-items:center;margin:8px 0 12px}
.ev-repeater-head h4{font-family:var(--wv-ff);font-size:var(--wv-fs-label);color:var(--wv-primary);margin:0}
.ev-add-btn{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--wv-border);background:var(--wv-surface);border-radius:9px;padding:7px 14px;font-family:'Almarai',sans-serif;font-size:var(--wv-fs-meta);color:var(--wv-primary);cursor:pointer}
.ev-rep-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:10px}
.ev-rep-row input,.ev-rep-row textarea{border:1.5px solid var(--wv-border);border-radius:9px;padding:8px 10px;font-family:'Almarai',sans-serif;font-size:var(--wv-fs-meta);color:var(--wv-primary);outline:none;flex:1;min-width:130px}
.ev-rep-row textarea{resize:vertical;line-height:1.6;min-height:34px}
.ev-rep-del{flex-shrink:0}

.ev-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap;border-top:1px solid var(--wv-border-subtle);padding-top:18px;margin-top:8px}
.ev-actions-spacer{flex:1}
.ev-confirm{text-align:center;padding:60px 24px}
.ev-confirm-icon{font-size:var(--wv-fs-display);color:var(--wv-success);margin-bottom:18px}
.ev-confirm-text{font-size:var(--wv-fs-label);color:var(--wv-primary);line-height:1.9;max-width:520px;margin:0 auto 24px}

/* Admin detail / audit / diff */
.ev-detail{padding:0 24px 24px}
.ev-detail-status{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px}
.ev-detail-actions{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:16px}
.ev-feature-toggle{display:inline-flex;background:rgba(248,123,27,.08);border-radius:10px;padding:10px 16px;font-weight:700;color:var(--wv-primary);margin-bottom:18px}
.ev-detail-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px;margin-bottom:22px}
.ev-kv{background:var(--wv-surface-soft);border-radius:10px;padding:12px 14px}
.ev-kv-k{display:block;font-size:var(--wv-fs-xs);color:var(--wv-text-muted);margin-bottom:4px}
.ev-kv-v{font-size:var(--wv-fs-meta);color:var(--wv-primary);font-weight:700;line-height:1.7}
.ev-detail-text h4,.ev-sec-title{font-family:var(--wv-ff);font-size:var(--wv-fs-label);color:var(--wv-primary);margin:18px 0 8px}
.ev-detail-text p{font-size:var(--wv-fs-meta);color:var(--wv-text-2);line-height:1.9;white-space:pre-line;margin:0}

/* Issue #242 — the linked-destination card on the admin review detail.
   Reuses event-details.html's .destination-card MARKUP (same class names,
   built by the same categoryBadgeHtml/destTitleHtml/cityLabelHtml/destImage
   helpers from js/api.js) — see admin-events.html's renderDestinationSection()
   for the full reasoning. This page loads dash-pages.css, not the public
   css/style.css, so the card's rules are duplicated here rather than shared;
   they are deliberately self-contained (no dependency on style.css's :root
   tokens such as --border-radius) so they render correctly regardless of
   load order or which stylesheet is present. */
.ev-dest-flag{display:flex;align-items:center;gap:8px;font-size:var(--wv-fs-meta);color:var(--wv-danger-ink);margin:0 0 12px}
.ev-dest-flag--ok{color:var(--wv-success)}
.ev-dest-card-wrap{max-width:300px}
.ev-dest-card-wrap .destination-card{position:relative;border-radius:16px;overflow:hidden;height:220px}
.ev-dest-card-wrap .card-img{width:100%;height:100%;object-fit:cover;display:block}
.ev-dest-card-wrap .card-overlay{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:space-between;padding:12px;background:linear-gradient(180deg,rgba(0,0,0,.05) 0%,rgba(0,0,0,.8) 100%)}
.ev-dest-card-wrap .card-top{display:flex;gap:6px;flex-wrap:wrap}
.ev-dest-card-wrap .card-bottom .card-title{font-family:var(--wv-ff);font-size:var(--wv-fs-label);color:var(--wv-on-primary);margin:0 0 4px}
.ev-dest-card-wrap .card-desc{font-size:var(--wv-fs-xs);color:rgba(255,255,255,.85);margin:0 0 10px}
.ev-dest-card-wrap .card-link{display:inline-block;background:var(--wv-surface);color:var(--wv-primary);font-size:var(--wv-fs-xs);font-weight:700;padding:6px 16px;border-radius:20px;text-decoration:none}
.ev-dest-badge{display:inline-flex;background:rgba(255,255,255,.22);color:var(--wv-on-primary);padding:5px 14px;border-radius:17px;font-size:var(--wv-fs-xs);font-weight:700}

.audit-timeline{display:flex;flex-direction:column;gap:2px}
.audit-item{display:flex;gap:12px;padding:10px 0;border-bottom:1px solid var(--wv-border-subtle)}
.audit-dot{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:50%;background:rgba(39,4,66,.07);color:var(--wv-primary);font-size:var(--wv-fs-xs);flex-shrink:0}
.audit-body{display:flex;flex-direction:column;gap:3px}
.audit-body strong{font-size:var(--wv-fs-meta);color:var(--wv-primary)}
.audit-meta{font-size:var(--wv-fs-xs);color:var(--wv-text-muted)}
.audit-comment{font-size:var(--wv-fs-meta);color:var(--wv-text-2);line-height:1.8;margin:4px 0 0;white-space:pre-line}

.ev-diff{width:100%;border-collapse:collapse;margin:10px 0 14px}
.ev-diff th{text-align:right;font-size:var(--wv-fs-xs);color:var(--wv-text-muted);padding:8px 10px;border-bottom:1px solid var(--wv-border-subtle)}
.ev-diff td{font-size:var(--wv-fs-meta);padding:8px 10px;border-bottom:1px solid var(--wv-border-subtle);color:var(--wv-text-2)}
.ev-diff-old{color:var(--wv-danger-ink);text-decoration:line-through}
.ev-diff-new{color:var(--wv-success);font-weight:700}

/* The confirm-action modal, shared. Every dashboard page that already had one
   carries its own copy in a page-local <style> block (the existing convention,
   e.g. requests.html); those blocks come AFTER this stylesheet in the document
   and keep winning, so nothing there changes. This copy exists because the
   school-request tab injects its modal from JS into pages that had no copy. */
.act-modal{display:none;position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:var(--wv-z-modal);align-items:center;justify-content:center}
.act-modal.show{display:flex}
.act-box{background:var(--wv-surface);border-radius:var(--wv-r-xl);padding:32px 28px;max-width:440px;width:90%;text-align:center;box-shadow:var(--wv-sh-lg);animation:modalIn .2s ease}
/* The entrance the page-local copies carried; it moves here with them
   (issue #236). Pages that keep their own .act-box block still win on
   document order, so nothing outside the events pages changes. */
@keyframes modalIn{from{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}
@media(prefers-reduced-motion:reduce){.act-box{animation:none}}
/* wvOpenDialog() moves focus to the dialog itself when it holds no focusable
   control; that programmatic focus must not draw a ring. */
.act-box[tabindex="-1"]:focus{outline:none}
.act-icon{width:60px;height:60px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 16px;font-size:var(--wv-fs-h3)}
.act-icon.accept{background:var(--wv-success-soft);color:var(--wv-success-ink)}
.act-icon.reject,.act-icon.del{background:var(--wv-danger-soft);color:var(--wv-danger-ink)}
.act-icon.change{background:var(--wv-info-soft);color:var(--wv-info-ink)}
.act-icon.neutral{background:rgba(39,4,66,.08);color:var(--wv-primary)}
.act-modal textarea,.act-modal input[type=datetime-local],.act-modal input[type=text],.act-modal input[type=number],.act-modal select{width:100%;min-height:44px;border:1.5px solid var(--wv-border-input);border-radius:var(--wv-r-md);padding:10px 12px;font-family:'Almarai',sans-serif;font-size:max(16px,var(--wv-fs-body));color:var(--wv-primary);outline:none;resize:vertical;margin-bottom:12px}
.act-row{display:flex;gap:10px;margin-top:6px}
.act-row button{flex:1}
.act-go.ok:not(:disabled):not([aria-disabled="true"]),
.act-go.ok:hover:not(:disabled):not([aria-disabled="true"]){background:var(--wv-success)}

/* Modal labels shared by the act-modal blocks of the events pages */
.act-title{font-size:var(--wv-fs-h4);font-weight:700;color:var(--wv-primary);margin-bottom:8px}
.act-sub{font-size:var(--wv-fs-meta);color:var(--wv-text-muted);margin-bottom:18px;line-height:1.7}
.act-label{display:block;font-size:var(--wv-fs-xs);font-weight:700;color:var(--wv-primary);margin-bottom:6px;text-align:right}
.act-feedback{font-size:var(--wv-fs-sm);color:var(--wv-text-2);line-height:1.9;white-space:pre-line;background:var(--wv-surface-soft);border-radius:10px;padding:14px;margin-bottom:16px}

/* School-visit request rows (inst-bookings / requests / visitor-requests) */
.ev-school-warning{display:flex;align-items:center;gap:8px;background:var(--wv-warning-soft);border:1px solid #F3DFA8;color:var(--wv-warning-ink);border-radius:10px;padding:9px 13px;font-size:var(--wv-fs-meta);margin-top:10px;line-height:1.7}
.ev-sv-card{background:var(--wv-surface);border:1px solid var(--wv-border-subtle);border-radius:14px;padding:18px 20px;margin-bottom:14px}
.ev-sv-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap;margin-bottom:10px}
.ev-sv-title{font-family:var(--wv-ff);font-size:var(--wv-fs-body);font-weight:700;color:var(--wv-primary);margin:0}
.ev-sv-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px;margin-bottom:12px}
.ev-sv-actions{display:flex;gap:8px;flex-wrap:wrap}
.ev-sv-empty{text-align:center;padding:52px 20px;color:var(--wv-text-muted)}
.ev-sv-empty i{font-size:var(--wv-fs-h1);color:#DADADA;display:block;margin-bottom:12px}

/* Keyboard focus, everywhere on these pages.
   dash-pages.css sets `outline:none` on the filter controls, the row action
   buttons, the form fields and the modal fields, and only `.ev-fg input:focus`
   added a border tint back — so all 107 focusables of the 7-step form, every
   stepper button, every repeater add/delete and every modal textarea had NO
   visible focus at all (حسن M3). frontend/css/ did carry `:focus-visible`
   before this block — measured at df0b748, exactly 2 rules, both in
   dashboard.css: `.dash-menu-btn, .dash-menu-close` (:680) and `.service-card`
   (:737) — but neither reached any control on these pages. (An earlier draft
   of this comment said there was none anywhere, and then cited :680 two lines
   later — حسن m1b, Standing Check #12.) This is :680's pattern, widened.
   `:focus-visible` (not `:focus`) so a mouse click does not draw a ring. */
.ev-act:focus-visible,.ev-btn:focus-visible,.ev-retry:focus-visible,
.event-step:focus-visible,.ev-add-btn:focus-visible,.ev-rep-del:focus-visible,
.ev-upload-btn:focus-visible,.dp-tab:focus-visible,.dp-btn-add:focus-visible,
.dp-btn-filter:focus-visible,.dp-pagination button:focus-visible,
.ev-filters select:focus-visible,.ev-filters input:focus-visible,
.ev-search input:focus-visible,.ev-fg input:focus-visible,
.ev-fg select:focus-visible,.ev-fg textarea:focus-visible,
.ev-rep-row input:focus-visible,.ev-rep-row textarea:focus-visible,
.act-modal textarea:focus-visible,
.act-modal select:focus-visible,.act-modal input:focus-visible,
.act-row button:focus-visible,.ev-radio input:focus-visible,
.ev-check input:focus-visible,.ev-switch input:focus-visible,
.ev-day input:focus-visible{outline:2px solid var(--secondary,var(--wv-accent));outline-offset:2px}
/* A field the API refused: the red border is not the only signal. */
.ev-fg [aria-invalid="true"],.act-modal [aria-invalid="true"]{border-color:var(--wv-danger)}

/* Phone: the table collapses into stacked cards (Layla A4) — each cell keeps
   its column name as a label so no meaning is lost. */
@media(max-width:768px){
    .ev-row{grid-template-columns:1fr}
    .ev-card-head{padding:18px 16px 4px}
    .ev-filters,.ev-table-wrap,.ev-form-shell,.ev-detail{padding-left:16px;padding-right:16px}
    .ev-search input{min-width:0;width:100%}
    .ev-filters>*{flex:1 1 100%}
    .ev-table thead{display:none}
    .ev-table,.ev-table tbody,.ev-table tr,.ev-table td{display:block;width:100%}
    .ev-table tr{background:var(--wv-surface);border:1px solid var(--wv-border-subtle);border-radius:12px;padding:12px;margin-bottom:12px}
    .ev-table td{border:none;padding:6px 0;display:flex;justify-content:space-between;gap:12px;align-items:center}
    .ev-table td::before{content:attr(data-label);font-size:var(--wv-fs-xs);color:var(--wv-text-muted);font-weight:700;flex-shrink:0}
    .ev-table td.ev-cell-msg,.ev-table td.ev-empty{display:block;text-align:center}
    .ev-table td.ev-cell-msg::before,.ev-table td.ev-empty::before{content:''}
    .event-step-label{display:none}
    .ev-detail-grid{grid-template-columns:1fr}
}

/* ==========================================
   Private visits (issue #469, PR-B) — the dashboards' tabs, the quote card,
   the owner's offer tab, the admin queue and the settings lists.
   RTL-first with physical properties; `python scripts/gen-ltr.py` mirrors them.
   ========================================== */
.status-pill--quoted{background:var(--wv-accent-soft);color:var(--wv-accent-ink)}
.status-pill--completed{background:var(--wv-primary-50);color:var(--wv-primary)}
.pv-h1{margin:0 0 18px;font-size:var(--wv-fs-h3)}
.pv-req-tags{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.pv-u{unicode-bidi:isolate}
.pv-cell{min-width:0}
.pv-gone .pv-gone-title{font-weight:700;color:var(--wv-primary);margin:0 0 4px}
.pv-gone .pv-gone-title:focus{outline:none}
.pv-o-errors a{color:inherit;text-decoration:underline}
.pv-fieldset.has-error{border-color:var(--wv-danger)}
.pv-fieldset .ev-field-error{margin-top:8px}
.pv-req-card.is-awaiting{border-inline-start:4px solid var(--wv-accent)}
.pv-await{display:inline-flex;align-items:center;gap:6px;background:var(--wv-accent-soft);color:var(--wv-accent-ink);border-radius:var(--wv-r-pill);padding:4px 12px;font-size:var(--wv-fs-xs);font-weight:700}
.pv-lock{display:inline-flex;align-items:center;gap:5px;background:var(--wv-primary-50);color:var(--wv-primary);border-radius:var(--wv-r-pill);padding:2px 10px;font-size:var(--wv-fs-xs);font-weight:700;margin-right:4px}
.pv-filter-bar{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-bottom:18px}
.pv-filter-bar select{min-height:44px;border:1px solid var(--wv-border-input);border-radius:var(--wv-r-md);padding:8px 12px;font-family:'Almarai',sans-serif;font-size:max(16px,var(--wv-fs-body));color:var(--wv-primary);background:var(--wv-surface);min-width:180px}
.pv-detail-head{margin-bottom:14px}
.pv-detail-title{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap;margin-bottom:16px}
.pv-detail-title h2:focus{outline:none}
.pv-actions:empty{display:none}
.pv-text{font-size:var(--wv-fs-meta);color:var(--wv-text-2);line-height:1.9;white-space:pre-line;margin:4px 0 0}
.pv-hint{display:flex;align-items:center;gap:8px;font-size:var(--wv-fs-xs);color:var(--wv-text-muted);margin:-12px 0 18px}
.pv-chips{display:flex;gap:8px;flex-wrap:wrap}
.pv-chip{display:inline-flex;align-items:center;gap:6px;background:var(--wv-primary-50);color:var(--wv-primary);border-radius:var(--wv-r-pill);padding:6px 14px;font-size:var(--wv-fs-xs);font-weight:700}
.pv-slot-list{margin:0;padding-right:20px;display:flex;flex-direction:column;gap:6px;font-size:var(--wv-fs-meta);color:var(--wv-text-2)}
.pv-slot-list li.is-confirmed{color:var(--wv-success-ink);font-weight:700}
.pv-banner{display:flex;align-items:flex-start;gap:10px;border-radius:var(--wv-r-md);padding:12px 16px;font-size:var(--wv-fs-meta);line-height:1.7;margin:0 0 16px;border:1px solid transparent}
.pv-banner i{font-size:var(--wv-fs-body);flex-shrink:0;margin-top:3px}
.pv-banner--info{background:var(--wv-info-soft);color:var(--wv-info-ink)}
.pv-banner--warning{background:var(--wv-warning-soft);color:var(--wv-warning-ink);border-color:var(--wv-warning)}
.pv-banner--success{background:var(--wv-success-soft);color:var(--wv-success-ink)}
.pv-banner--danger{background:var(--wv-danger-soft);color:var(--wv-danger-ink)}
.pv-banner--neutral{background:var(--wv-surface-soft);color:var(--wv-text-2);border-color:var(--wv-border-subtle)}
.pv-banner .pv-text{color:inherit}

/* The quote card — the requester's decision surface and the owner's preview. */
.pv-quote{background:var(--wv-surface);border:1px solid var(--wv-border-subtle);border-radius:var(--wv-r-lg);box-shadow:var(--wv-sh-sm);padding:18px 20px;margin:0 0 18px}
.pv-quote.is-open{border-top:4px solid var(--wv-accent)}
.pv-quote.is-expired{opacity:.7;background:var(--wv-surface-soft)}
.pv-quote-head{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.pv-quote-title{font-family:var(--wv-ff);font-size:var(--wv-fs-label);color:var(--wv-primary);margin:0}
.pv-quote-exp{display:inline-flex;background:var(--wv-warning-soft);color:var(--wv-warning-ink);border-radius:var(--wv-r-pill);padding:4px 12px;font-size:var(--wv-fs-xs);font-weight:700}
.pv-quote-amount{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.pv-quote-money{font-family:var(--wv-ff);font-size:var(--wv-fs-h2);font-weight:800;color:var(--wv-primary);font-variant-numeric:tabular-nums}
.pv-quote-vat{font-size:var(--wv-fs-xs);color:var(--wv-text-muted)}
.pv-quote-row{font-size:var(--wv-fs-meta);color:var(--wv-text-2);line-height:1.9;margin-bottom:6px}
.pv-quote-includes{white-space:pre-line}
.pv-quote-k{color:var(--wv-text-muted);font-weight:700;margin-left:4px}
.pv-quote-note{font-size:var(--wv-fs-xs);color:var(--wv-warning-ink);margin:0 0 8px}
.pv-quote-pay{display:flex;align-items:center;gap:8px;font-size:var(--wv-fs-xs);color:var(--wv-text-muted);margin:6px 0 12px}

/* Confirm dialogs */
.act-box.pv-act-box{max-height:calc(100vh - 32px);overflow-y:auto}
.act-box.pv-act-wide{max-width:560px;text-align:right}
.act-box.pv-act-wide .act-icon,.act-box.pv-act-wide .act-title,.act-box.pv-act-wide .act-sub{text-align:center}
.pv-act-err{font-size:var(--wv-fs-meta);color:var(--wv-danger-ink);margin:0 0 8px;text-align:right}
.pv-act-err:empty{display:none}
.pv-accept-sum{text-align:right;display:flex;flex-direction:column;gap:4px;white-space:normal}
.pv-policy-check{margin:4px 0 6px}
.pv-reply{border-top:1px solid var(--wv-border-subtle);padding-top:6px;margin-bottom:18px}

/* Forms: fieldsets, radio cards, windows, slots */
.pv-fieldset{border:1px solid var(--wv-border-subtle);border-radius:var(--wv-r-md);padding:12px 16px 14px;margin:0 0 16px}
.pv-fieldset legend{font-size:var(--wv-fs-meta);font-weight:700;color:var(--wv-primary);padding:0 6px}
.pv-radio-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px}
.pv-policy-card{position:relative;display:flex;flex-direction:column;gap:4px;min-height:56px;border:1.5px solid var(--wv-border-input);border-radius:var(--wv-r-md);padding:12px 40px 12px 14px;cursor:pointer;background:var(--wv-surface)}
.pv-policy-card input{position:absolute;right:14px;top:15px;margin:0}
.pv-policy-card:has(input:checked){border-color:var(--wv-accent);background:var(--wv-accent-soft)}
.pv-policy-name{font-weight:700;color:var(--wv-primary);font-size:var(--wv-fs-meta)}
.pv-policy-desc{font-size:var(--wv-fs-xs);color:var(--wv-text-2);line-height:1.7}
.pv-inline{display:inline-flex;align-items:center;gap:6px;font-size:var(--wv-fs-meta);color:var(--wv-text-2)}
.pv-window-row input[type=time],.pv-slot-row input{min-height:44px;flex:0 1 160px}
.pv-slot-n{font-size:var(--wv-fs-xs);font-weight:700;color:var(--wv-primary);min-width:110px}
.pv-o-enable{margin:0 0 16px;font-weight:700}
.pv-q-vat{justify-content:flex-end}
.pv-offer-pane{padding-top:18px}
.pv-modal-tabs{padding:0;margin:0 0 4px}
.pv-tab-hint{font-size:var(--wv-fs-xs);color:var(--wv-text-muted);margin:6px 0 12px}
.dp-tab[aria-disabled="true"]{opacity:.5;cursor:not-allowed}

/* Admin KPI strip: five cards */
.dp-stats.pv-kpis{grid-template-columns:repeat(5,1fr)}
.pv-kpi-target{display:block;font-size:var(--wv-fs-xs);color:var(--wv-text-muted);margin-top:4px}
.dp-pagination button{display:inline-flex;align-items:center;justify-content:center;min-width:44px;height:44px;border-radius:8px;border:1px solid var(--wv-border-subtle);background:var(--wv-surface);color:var(--wv-text-2);padding:0 8px;font-family:var(--wv-ff);font-variant-numeric:tabular-nums;cursor:pointer}

/* Settings: the two vocabulary lists */
.pv-set-h{font-family:var(--wv-ff);font-size:var(--wv-fs-label);color:var(--wv-primary);margin:22px 0 6px}
.pv-set-note{font-size:var(--wv-fs-xs);color:var(--wv-text-muted);line-height:1.8;margin:0 0 12px}
.pv-list-row{display:grid;grid-template-columns:140px 1fr 1fr 44px;gap:8px;margin-bottom:8px}
.pv-list-row input{min-height:44px;border:1.5px solid var(--wv-border-input);border-radius:var(--wv-r-md);padding:8px 10px;font-family:'Almarai',sans-serif;font-size:max(16px,var(--wv-fs-body));color:var(--wv-primary);background:var(--wv-surface);min-width:0}
.pv-list-del,.pv-list-add{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:44px;min-width:44px;border:1px solid var(--wv-border);border-radius:var(--wv-r-md);background:var(--wv-surface);color:var(--wv-primary);font-family:'Almarai',sans-serif;cursor:pointer}
.pv-list-del{color:var(--wv-danger-ink)}
.pv-list-add{padding:0 16px}

@media(max-width:1100px){.dp-stats.pv-kpis{grid-template-columns:repeat(3,1fr)}}
@media(max-width:768px){
    .dp-stats.pv-kpis{grid-template-columns:1fr}
    .pv-list-row{grid-template-columns:1fr 44px}
    .pv-list-row input{grid-column:1}
    .pv-list-row .pv-list-del{grid-column:2;grid-row:1}
    .pv-slot-n{min-width:0;flex:1 1 100%}
}

/* ==========================================
   Investment (issue #470, PR-B) — admin-investment.html, the investor tab on
   visitor-requests.html, and settings.html's investment cards. RTL-first;
   `python scripts/gen-ltr.py` regenerates ltr.css.
   ========================================== */
.inv-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.inv-head .pv-h1{margin:0}
.dp-stats.inv-kpis{grid-template-columns:repeat(3,1fr)}
.inv-stage-filters{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 14px}
.inv-stage-btn{display:inline-flex;align-items:center;gap:6px;min-height:44px;padding:0 14px;border:1px solid var(--wv-border-subtle);border-radius:var(--wv-r-pill);background:var(--wv-surface);color:var(--wv-text-2);font-family:'Almarai',sans-serif;font-size:var(--wv-fs-meta);cursor:pointer}
.inv-stage-btn[aria-pressed="true"]{background:var(--wv-primary);border-color:var(--wv-primary);color:#fff}
.inv-stage-n{font-variant-numeric:tabular-nums;font-weight:700}
.inv-link-btn{background:none;border:0;padding:0;min-height:44px;font-family:inherit;font-size:inherit;color:var(--wv-primary);text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.inv-vis{display:inline-flex;align-items:center;gap:6px;font-size:var(--wv-fs-xs);line-height:1.6}
.inv-vis--on{color:var(--wv-success-ink)}
.inv-vis--off{color:var(--wv-text-muted)}
.inv-picker-row{display:flex;gap:8px}
.inv-picker-row input{flex:1 1 auto;min-width:0}
.inv-picker-row .ev-btn{flex:0 0 auto;min-height:44px}
.inv-label{font-size:var(--wv-fs-meta);font-weight:700;color:var(--wv-primary)}
.inv-cover-prev img{display:block;width:240px;max-width:100%;height:auto;aspect-ratio:16/9;object-fit:cover;border-radius:var(--wv-r-md);border:1px solid var(--wv-border-subtle)}
.inv-cover-prev:empty{display:none}
.inv-demand-off{color:var(--wv-warning-ink)}
.inv-act-name{font-weight:700;color:var(--wv-primary);margin:0 0 10px;text-align:center}
.inv-lead-stage{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 16px}
.inv-consent{display:flex;align-items:flex-start;gap:8px;font-size:var(--wv-fs-meta);color:var(--wv-success-ink);background:var(--wv-success-soft);border-radius:var(--wv-r-md);padding:10px 14px;margin:0 0 16px}
.inv-notes{border-top:1px solid var(--wv-border-subtle);margin-top:18px;padding-top:4px}
.inv-notes .ev-sec-title i{color:var(--wv-text-muted)}
.inv-erased{font-style:italic;color:var(--wv-text-muted)}
.inv-stage-opts{display:flex;flex-direction:column;gap:8px}
.inv-stage-opt{min-height:44px}
.inv-profile{background:var(--wv-surface);border:1px solid var(--wv-border-subtle);border-radius:14px;padding:6px 20px 16px;margin-bottom:18px}
.inv-profile .ev-sec-title{margin-top:12px}
.inv-p-consent{min-height:44px;margin:0 0 12px}
.inv-closed-note{font-size:var(--wv-fs-xs);color:var(--wv-text-muted);margin:4px 0 10px}
.settings-card.inv-launch{border:1.5px solid var(--wv-warning);background:var(--wv-warning-soft)}
.inv-launch-state{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 12px;font-size:var(--wv-fs-meta)}
.inv-launch-err{color:var(--wv-danger-ink);font-size:var(--wv-fs-meta);margin:10px 0 0}
.inv-launch-err:empty{display:none}
.pv-list-row.inv-band-row{grid-template-columns:140px 1fr 1fr 110px 44px}
.inv-checks{display:flex;flex-direction:column;gap:6px;text-align:right;margin:0 0 10px}
.inv-checks label{min-height:44px}
.inv-why{font-size:var(--wv-fs-meta);color:var(--wv-warning-ink);margin:0 0 8px}
.inv-why[hidden]{display:none}
@media(max-width:1100px){.dp-stats.inv-kpis{grid-template-columns:repeat(2,1fr)}}
@media(max-width:768px){
    .dp-stats.inv-kpis{grid-template-columns:1fr}
    .pv-list-row.inv-band-row{grid-template-columns:1fr 44px}
    .inv-band-row input{grid-column:1}
    .inv-band-row .pv-list-del{grid-column:2;grid-row:1}
    .inv-form-bar{position:sticky;bottom:0;z-index:2;background:var(--wv-surface);padding:12px 0;margin:0;border-top:1px solid var(--wv-border-subtle)}
    .ev-row-actions .ev-btn{min-height:44px}
    /* settings.html's two disclaimer boxes sit in an inline two-column grid. */
    .inv-disc-grid{grid-template-columns:1fr !important}
    /* visitor-requests.html: four tabs do not fit 375px in one row — they wrap, every label whole. */
    #wv-tabs{flex-wrap:wrap;padding:0 8px}
    #wv-tabs .dp-tab{padding:12px 12px 10px}
}
