/* RVPN extensions use the existing Ant Design theme. */
.login-sponsor,.sponsor-card,.ant-menu-item:has(.anticon-crown){display:none!important}
.rvpn-only-awg .client-cards{display:none!important}
.rvpn-awg-mobile{display:flex;flex-direction:column;gap:10px;margin-top:16px}.rvpn-awg-mobile[hidden]{display:none!important}
.rvpn-awg-mobile-heading,.rvpn-awg-card-meta{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap}
.rvpn-awg-mobile-heading h3{font-size:16px;line-height:24px;margin:0}.rvpn-awg-card-meta{margin:8px 0}
.rvpn-awg-mobile .rvpn-awg-selection-actions{margin:0}.rvpn-awg-mobile .rvpn-awg-actions{margin-top:8px;gap:8px}
.rvpn-awg-mobile .rvpn-awg-actions .ant-btn{width:40px;height:40px}.rvpn-awg-mobile .client-traffic-cell{width:100%;min-width:0}
.rvpn-vps-origin{max-width:310px;white-space:normal}.rvpn-vps-country{color:var(--ant-color-text)}
.sider-footer,.drawer-footer,.sider-version,.sidebar-docs,.sidebar-donate,.ov-state-version,.ov-panel-version,.ov-update-tag{display:none!important}
.sider-brand::before,.sider-brand::after,.sider-brand .brand-block::before,.sider-brand .brand-block::after,.sider-brand .brand-text::before,.sider-brand .brand-text::after{content:none!important}
.sider-brand .brand-text{font-size:20px!important;line-height:1.2;letter-spacing:.5px;white-space:nowrap;display:block}
.sider-brand .brand-block{display:flex;justify-content:center;align-items:center;overflow:visible}.rvpn-awg-link{display:none!important}
.rvpn-icon{display:inline-flex;align-items:center;justify-content:center;flex:none}.rvpn-button{display:inline-flex;align-items:center;justify-content:center;gap:8px;white-space:nowrap;min-height:32px;cursor:pointer;text-decoration:none}.rvpn-button:disabled{cursor:wait;opacity:.5}
.rvpn-protocol{display:inline-flex;align-items:center;border-radius:4px;border:1px solid #167681;background:#e6fffb;color:#08727f;font-size:12px;line-height:20px;padding:0 6px;font-weight:500;white-space:nowrap;vertical-align:middle}.is-dark .rvpn-protocol{background:#112f36;color:#58d3df;border-color:#185b65}
.rvpn-protocol-filter{height:32px;padding:0 28px 0 10px;min-width:158px;font:inherit;font-size:14px;border:1px solid var(--ant-color-border);border-radius:6px;background:var(--ant-color-bg-container);color:var(--ant-color-text);outline:none;cursor:pointer}.rvpn-protocol-filter:focus-visible{border-color:var(--ant-color-primary);box-shadow:0 0 0 2px #1668dc33}
.rvpn-row-actions{display:flex;gap:8px;align-items:center;padding:9px 0}.rvpn-action{display:inline-flex;align-items:center;justify-content:center;width:26px;height:28px;border:none;background:transparent;color:var(--ant-color-text-secondary);border-radius:4px;padding:0;cursor:pointer}.rvpn-action:hover{color:var(--ant-color-primary);background:var(--ant-color-fill-tertiary)}.rvpn-action:disabled,.rvpn-action[aria-disabled=true]{opacity:.3;cursor:default}
.rvpn-client-name{display:flex;align-items:center;gap:9px;min-height:25px;flex-wrap:wrap}.rvpn-client-name strong{font-weight:600;font-size:14px}.rvpn-client-address,.rvpn-service{font-size:12px;color:var(--ant-color-text-secondary);line-height:20px}.rvpn-service{color:var(--ant-color-text-tertiary);margin-top:3px}
.rvpn-status{padding:3px 7px;border-radius:4px;color:var(--ant-color-text-secondary);background:var(--ant-color-fill-secondary);font-size:12px;white-space:nowrap}.rvpn-online{color:#49aa19;background:#162312}.rvpn-online::before{content:'● ';font-size:10px}
.rvpn-muted{color:var(--ant-color-text-secondary);font-size:13px;line-height:1.55}.rvpn-awg-actions{display:inline-flex;gap:4px;align-items:center}.rvpn-awg-actions .ant-btn{font-size:16px}.rvpn-awg-actions a[aria-disabled=true]{color:var(--ant-color-text-disabled);cursor:not-allowed;pointer-events:none}.rvpn-awg-row:hover>td{background:var(--ant-table-row-hover-bg,var(--ant-color-fill-quaternary))}
.rvpn-awg-group td{padding:10px 8px!important;background:var(--ant-color-fill-quaternary);border-bottom:1px solid var(--ant-color-border-secondary)}.rvpn-group-content{display:flex;align-items:center;gap:10px;color:var(--ant-color-text-secondary);font-size:12px;min-height:22px}.rvpn-awg-pager{margin-left:auto;display:inline-flex;align-items:center;gap:10px}
.rvpn-group-content{flex-wrap:wrap}.rvpn-awg-selection-actions{display:inline-flex;align-items:center;flex-wrap:wrap;gap:8px;margin-left:12px}.rvpn-awg-selection-actions .rvpn-button{min-height:24px;height:24px;padding:0 7px;font-size:12px}.rvpn-awg-row.ant-table-row-selected>td{background:var(--ant-table-row-selected-bg,var(--ant-color-primary-bg))}.rvpn-awg-row.ant-table-row-selected:hover>td{background:var(--ant-table-row-selected-hover-bg,var(--ant-color-primary-bg-hover))}
.rvpn-only-awg tbody>tr:not([data-rvpn-awg-row]):not([data-rvpn-awg-group]){display:none!important}.rvpn-only-awg thead th:first-child .ant-checkbox-wrapper{visibility:hidden}tbody[data-rvpn-has-awg=true]>.ant-table-placeholder{display:none!important}
.rvpn-switch{min-width:36px;height:20px;background:var(--ant-color-text-quaternary);border:0;cursor:pointer}.rvpn-switch.ant-switch-checked{background:var(--ant-color-primary)}.rvpn-switch .ant-switch-handle{width:16px;height:16px;top:2px}
.rvpn-exit-section .rvpn-switch{position:relative;display:inline-block;padding:0;border-radius:100px;line-height:20px;vertical-align:middle;transition:background .2s}.rvpn-exit-section .rvpn-switch .ant-switch-handle{position:absolute;left:2px;transition:left .2s}.rvpn-exit-section .rvpn-switch.ant-switch-checked .ant-switch-handle{left:calc(100% - 18px)}.rvpn-exit-section .rvpn-switch .ant-switch-handle::before{content:"";position:absolute;inset:0;border-radius:50%;background:#fff;box-shadow:0 2px 4px #00230b33}.rvpn-exit-section .rvpn-switch:disabled{opacity:.65;cursor:wait}.rvpn-exit-section .rvpn-switch:focus-visible{outline:2px solid var(--ant-color-primary);outline-offset:2px}
.rvpn-conf-file::file-selector-button{margin-right:8px;padding:4px 11px;border:1px solid var(--ant-color-border);border-radius:6px;background:var(--ant-color-bg-container);color:var(--ant-color-text);font:inherit;cursor:pointer}.rvpn-conf-file::file-selector-button:hover{border-color:var(--ant-color-primary);color:var(--ant-color-primary)}
.rvpn-dialog.rvpn-native-confirm{width:416px;max-width:calc(100vw - 32px);border:0;background:transparent;box-shadow:none;overflow:visible}.rvpn-native-confirm .ant-modal{width:100%;max-width:none;top:0;margin:0;padding:0;font-family:inherit;font-size:14px;line-height:22px;color:var(--ant-color-text)}.rvpn-native-confirm .ant-modal-container{padding:20px 24px;background:var(--ant-color-bg-elevated);border-radius:8px;box-shadow:var(--ant-box-shadow,0 6px 16px 0 #00000014,0 3px 6px -4px #0000001f,0 9px 28px 8px #0000000d)}.rvpn-native-confirm .ant-modal-body,.rvpn-native-confirm .ant-modal-confirm-body-wrapper{margin:0;padding:0}.rvpn-native-confirm .ant-modal-confirm-body{display:flex;align-items:flex-start}.rvpn-native-confirm .anticon-exclamation-circle{display:flex;flex:none;width:22px;height:22px;font-size:22px;line-height:0;margin:1px 12px 0 0;color:var(--ant-color-warning)}.rvpn-native-confirm .ant-modal-confirm-paragraph{display:flex;flex:1;min-width:0;flex-direction:column;gap:8px}.rvpn-native-confirm .ant-modal-confirm-title{display:block;font-size:16px;font-weight:600;line-height:24px;overflow-wrap:anywhere}.rvpn-native-confirm .ant-modal-confirm-content{font-size:14px;font-weight:400;line-height:22px;overflow-wrap:anywhere}.rvpn-native-confirm .ant-modal-confirm-btns{display:block;margin-top:12px;text-align:right}.rvpn-native-confirm .ant-modal-confirm-btns button+button{margin-left:8px}.rvpn-native-confirm .rvpn-form-error[hidden]{display:none}.rvpn-native-confirm::backdrop{background:var(--ant-color-bg-mask,#00000073)}
.rvpn-dialog{padding:0;width:min(480px,calc(100vw - 32px));max-height:calc(100vh - 40px);overflow:auto;border:1px solid var(--ant-color-border-secondary);border-radius:8px;background:var(--ant-color-bg-elevated);color:var(--ant-color-text);font-family:inherit;box-shadow:0 6px 24px #0005}.rvpn-dialog::backdrop{background:#0007}
.rvpn-dialog-header{display:flex;justify-content:space-between;align-items:center;padding:18px 24px 12px;gap:15px}.rvpn-dialog-header h2{font:inherit;font-size:16px;font-weight:600;line-height:1.5;margin:0;overflow-wrap:anywhere}.rvpn-dialog-close{display:flex;align-items:center;justify-content:center;border:0;background:none;color:var(--ant-color-text-secondary);padding:4px;cursor:pointer;border-radius:4px}.rvpn-dialog-close:hover{background:var(--ant-color-fill-secondary)}
.rvpn-form{padding:8px 24px 0}.rvpn-form label{display:block;font-size:14px;margin:16px 0 8px}.rvpn-input{display:block;width:100%;height:34px;border:1px solid var(--ant-color-border);border-radius:6px;background:var(--ant-color-bg-container);color:var(--ant-color-text);padding:4px 11px;font:inherit;font-size:14px;outline:none}.rvpn-input:focus{border-color:var(--ant-color-primary);box-shadow:0 0 0 2px #1668dc33}.rvpn-dialog-footer{display:flex;justify-content:flex-end;gap:8px;padding:16px 0 20px}.rvpn-form-error{color:#ff7875;min-height:18px;font-size:13px;margin:8px 0 0}
.rvpn-qr-content{padding:8px 24px 24px;text-align:center}.rvpn-qr-content img{display:block;max-width:100%;width:320px;margin:16px auto;background:#fff;border-radius:4px}
.rvpn-notice{position:fixed;top:24px;left:50%;transform:translateX(-50%);z-index:3000;padding:12px 18px;border:1px solid var(--ant-color-border-secondary);border-radius:8px;background:var(--ant-color-bg-elevated);color:var(--ant-color-text);box-shadow:0 6px 24px #0003;max-width:calc(100vw - 40px);font-size:14px}.rvpn-error{color:#ff7875}
@media(max-width:768px){.clients-page .card-toolbar{flex-wrap:wrap;gap:8px}.rvpn-protocol-filter{min-width:140px}.rvpn-dialog-header{padding:16px 18px 10px}.rvpn-form{padding:8px 18px 0}.rvpn-notice{top:14px}}
.rvpn-exit-section{margin:16px 0 24px;padding:16px;border:1px solid var(--ant-color-border-secondary);border-radius:8px;background:var(--ant-color-bg-container)}.rvpn-exit-title{display:flex;gap:12px;align-items:center;margin-bottom:12px;font-size:14px}.rvpn-exit-table-wrap{overflow:auto}.rvpn-exit-table{width:100%;border-collapse:collapse;font:inherit;font-size:14px}.rvpn-exit-table th{text-align:left;font-weight:600;background:var(--ant-color-fill-tertiary)}.rvpn-exit-table th,.rvpn-exit-table td{padding:12px 10px;border-bottom:1px solid var(--ant-color-border-secondary);vertical-align:middle}.rvpn-exit-table td>div{margin-top:5px}.rvpn-exit-table td>strong{font-weight:500}.rvpn-exit-protocol{margin-left:8px}.rvpn-exit-message{padding:10px 12px;margin-bottom:12px;border-radius:6px;background:var(--ant-color-fill-tertiary);font-size:14px}.rvpn-exit-empty{margin:0}.rvpn-conf-file{display:block;margin:8px 0 12px;max-width:100%;font:inherit;font-size:13px}.rvpn-conf-input{display:block;width:100%;height:180px;resize:vertical;border:1px solid var(--ant-color-border);border-radius:6px;background:var(--ant-color-bg-container);color:var(--ant-color-text);padding:8px 11px;font-family:monospace;font-size:12px}.rvpn-exit-dialog{width:min(560px,calc(100vw - 32px))}
/* Subscription visibility editor shares the panel's form controls. */
.inbound-host-remarks.rvpn-repeated-caption{display:none!important}
.host-remark-cell .rvpn-host-route-badge{margin:4px 0 0;align-self:flex-start;width:fit-content;font-size:12px;line-height:20px}
.host-remark-cell .rvpn-host-route-note{font-size:12px;line-height:18px;font-weight:400;margin-top:3px}
.rvpn-publication-dialog{width:min(960px,calc(100vw - 32px));max-height:90vh;}
.rvpn-publication-list{max-height:55vh;overflow:auto;padding-right:8px;}
.rvpn-publication-dialog [hidden]{display:none!important;}
.rvpn-publication-dialog .rvpn-input{box-sizing:border-box;min-width:0;}
.rvpn-publication-dialog .rvpn-form-error{color:inherit;}
.rvpn-publication-row{display:grid;grid-template-columns:220px minmax(0,1fr);gap:8px 16px;padding:18px 0;border-bottom:1px solid var(--ant-color-border,#434655);}
.rvpn-publication-choice{display:flex;gap:10px;align-items:center;}
.rvpn-publication-choice input{width:18px;height:18px;accent-color:#1677ff;}
.rvpn-publication-row p,.rvpn-publication-row .rvpn-row-actions{grid-column:2;margin:0;overflow-wrap:anywhere;}
@media(max-width:680px){.rvpn-publication-row{grid-template-columns:1fr;}.rvpn-publication-row p,.rvpn-publication-row .rvpn-row-actions{grid-column:1;}.rvpn-publication-row .rvpn-row-actions{flex-wrap:wrap;}}

/* Transcription palette. Keep native layouts and map colours by semantic role.
   Tokens are scoped to Ant's portals and component scopes as well as the page;
   important is intentional because Ant injects its default tokens after mount. */
:root {
  color-scheme: light;
  --rvpn-page: #faf5ee;
  --rvpn-panel: #fffdf9;
  --rvpn-raised: #fff9f2;
  --rvpn-ink: #25221f;
  --rvpn-muted: #716b64;
  --rvpn-placeholder: #746d65;
  --rvpn-disabled: #a1978d;
  --rvpn-line: #ece4da;
  --rvpn-control: #c9beb2;
  --rvpn-accent: #e89545;
  --rvpn-accent-hover: #efa65f;
  --rvpn-accent-active: #d98434;
  --rvpn-accent-text: #945014;
  --rvpn-selected: #fee9d4;
  --rvpn-selected-ink: #7f4318;
  --rvpn-success: #14766f;
  --rvpn-success-bg: #e4f2ee;
  --rvpn-success-border: #86b7ab;
  --rvpn-error: #a13b32;
  --rvpn-error-bg: #fbece7;
  --rvpn-error-border: #d9aaa0;
  --rvpn-warning: #865218;
  --rvpn-warning-bg: #fff0d9;
  --rvpn-warning-border: #d5b17e;
  --rvpn-toggle-off: #b7a899;
  --rvpn-toggle-on: #945014;
  --rvpn-button-ink: #25221f;
  --rvpn-shadow: 0 4px 20px #5b392c0d;
  --rvpn-popup-shadow: 0 8px 32px #5b392c1a;
}
body.dark {
  color-scheme: dark;
  --rvpn-page: #201c19;
  --rvpn-panel: #2a2521;
  --rvpn-raised: #342d27;
  --rvpn-ink: #f6eee5;
  --rvpn-muted: #c1b2a3;
  --rvpn-placeholder: #b5a495;
  --rvpn-disabled: #89796a;
  --rvpn-line: #44392f;
  --rvpn-control: #796655;
  --rvpn-accent-text: #f0af73;
  --rvpn-selected: #4a3221;
  --rvpn-selected-ink: #ffbd83;
  --rvpn-success: #80c6b7;
  --rvpn-success-bg: #233a34;
  --rvpn-success-border: #4d877b;
  --rvpn-error: #f0a298;
  --rvpn-error-bg: #4b2b28;
  --rvpn-error-border: #a4675e;
  --rvpn-warning: #e6ba7c;
  --rvpn-warning-bg: #463622;
  --rvpn-warning-border: #92734a;
  --rvpn-toggle-off: #796655;
  --rvpn-shadow: 0 4px 20px #0000001f;
  --rvpn-popup-shadow: 0 8px 32px #00000040;
}
html[data-theme='ultra-dark'] body.dark {
  --rvpn-page: #110f0d;
  --rvpn-panel: #1c1815;
  --rvpn-raised: #28211c;
  --rvpn-line: #372d25;
}
:root, body, .xui, [class*='css-var-'] {
  --ant-color-bg-base: var(--rvpn-page) !important;
  --ant-color-bg-layout: var(--rvpn-page) !important;
  --ant-color-bg-container: var(--rvpn-panel) !important;
  --ant-color-bg-elevated: var(--rvpn-panel) !important;
  --ant-color-bg-container-disabled: var(--rvpn-raised) !important;
  --ant-color-text: var(--rvpn-ink) !important;
  --ant-color-text-heading: var(--rvpn-ink) !important;
  --ant-color-text-secondary: var(--rvpn-muted) !important;
  --ant-color-text-tertiary: var(--rvpn-muted) !important;
  --ant-color-text-quaternary: var(--rvpn-muted) !important;
  --ant-color-text-description: var(--rvpn-muted) !important;
  --ant-color-text-placeholder: var(--rvpn-placeholder) !important;
  --ant-color-text-disabled: var(--rvpn-disabled) !important;
  --ant-color-border: var(--rvpn-control) !important;
  --ant-color-border-secondary: var(--rvpn-line) !important;
  --ant-color-split: var(--rvpn-line) !important;
  --ant-color-fill: var(--rvpn-selected) !important;
  --ant-color-fill-secondary: var(--rvpn-line) !important;
  --ant-color-fill-tertiary: var(--rvpn-raised) !important;
  --ant-color-fill-quaternary: var(--rvpn-raised) !important;
  --ant-color-primary: var(--rvpn-accent) !important;
  --ant-color-primary-hover: var(--rvpn-accent-hover) !important;
  --ant-color-primary-active: var(--rvpn-accent-active) !important;
  --ant-color-primary-bg: var(--rvpn-selected) !important;
  --ant-color-primary-bg-hover: var(--rvpn-selected) !important;
  --ant-color-primary-border: var(--rvpn-control) !important;
  --ant-color-primary-border-hover: var(--rvpn-accent-text) !important;
  --ant-color-primary-text: var(--rvpn-accent-text) !important;
  --ant-color-primary-text-hover: var(--rvpn-selected-ink) !important;
  --ant-color-primary-text-active: var(--rvpn-selected-ink) !important;
  --ant-color-link: var(--rvpn-accent-text) !important;
  --ant-color-link-hover: var(--rvpn-selected-ink) !important;
  --ant-color-link-active: var(--rvpn-selected-ink) !important;
  --ant-color-info: var(--rvpn-accent-text) !important;
  --ant-color-info-bg: var(--rvpn-selected) !important;
  --ant-color-info-border: var(--rvpn-control) !important;
  --ant-color-info-text: var(--rvpn-selected-ink) !important;
  --ant-color-success: var(--rvpn-success) !important;
  --ant-color-success-text: var(--rvpn-success) !important;
  --ant-color-success-bg: var(--rvpn-success-bg) !important;
  --ant-color-success-border: var(--rvpn-success-border) !important;
  --ant-color-error: var(--rvpn-error) !important;
  --ant-color-error-hover: var(--rvpn-error) !important;
  --ant-color-error-active: var(--rvpn-error) !important;
  --ant-color-error-text: var(--rvpn-error) !important;
  --ant-color-error-bg: var(--rvpn-error-bg) !important;
  --ant-color-error-border: var(--rvpn-error-border) !important;
  --ant-color-warning: var(--rvpn-warning) !important;
  --ant-color-warning-text: var(--rvpn-warning) !important;
  --ant-color-warning-bg: var(--rvpn-warning-bg) !important;
  --ant-color-warning-border: var(--rvpn-warning-border) !important;
  --ant-control-item-bg-hover: var(--rvpn-raised) !important;
  --ant-control-item-bg-active: var(--rvpn-selected) !important;
  --ant-control-item-bg-active-hover: var(--rvpn-selected) !important;
  --ant-control-outline: var(--rvpn-selected) !important;
  --ant-box-shadow: var(--rvpn-popup-shadow) !important;
  --ant-box-shadow-secondary: var(--rvpn-popup-shadow) !important;
  --ant-box-shadow-tertiary: var(--rvpn-shadow) !important;
  --ant-button-primary-color: var(--rvpn-button-ink) !important;
  --ant-button-primary-shadow: none !important;
  --ant-button-default-bg: var(--rvpn-panel) !important;
  --ant-button-default-color: var(--rvpn-ink) !important;
  --ant-button-default-border-color: var(--rvpn-control) !important;
  --ant-button-default-hover-bg: var(--rvpn-raised) !important;
  --ant-button-default-hover-color: var(--rvpn-accent-text) !important;
  --ant-button-default-hover-border-color: var(--rvpn-accent-text) !important;
  --ant-input-active-border-color: var(--rvpn-accent-text) !important;
  --ant-input-hover-border-color: var(--rvpn-accent-text) !important;
  --ant-input-active-shadow: 0 0 0 2px var(--rvpn-selected) !important;
  --ant-select-option-selected-bg: var(--rvpn-selected) !important;
  --ant-select-option-selected-color: var(--rvpn-selected-ink) !important;
  --ant-select-option-active-bg: var(--rvpn-raised) !important;
  --ant-menu-item-color: var(--rvpn-muted) !important;
  --ant-menu-item-bg: var(--rvpn-panel) !important;
  --ant-menu-item-selected-color: var(--rvpn-selected-ink) !important;
  --ant-menu-sub-menu-item-selected-color: var(--rvpn-selected-ink) !important;
  --ant-menu-item-selected-bg: var(--rvpn-selected) !important;
  --ant-menu-item-hover-bg: var(--rvpn-raised) !important;
  --ant-menu-item-hover-color: var(--rvpn-accent-text) !important;
  --ant-menu-dark-item-bg: var(--rvpn-panel) !important;
  --ant-menu-dark-sub-menu-item-bg: var(--rvpn-panel) !important;
  --ant-menu-dark-popup-bg: var(--rvpn-panel) !important;
  --ant-menu-dark-item-color: var(--rvpn-muted) !important;
  --ant-menu-dark-item-selected-bg: var(--rvpn-selected) !important;
  --ant-menu-dark-item-selected-color: var(--rvpn-selected-ink) !important;
  --ant-layout-body-bg: var(--rvpn-page) !important;
  --ant-layout-sider-bg: var(--rvpn-panel) !important;
  --ant-layout-header-bg: var(--rvpn-panel) !important;
  --ant-layout-light-sider-bg: var(--rvpn-panel) !important;
  --ant-table-header-bg: var(--rvpn-raised) !important;
  --ant-table-header-color: var(--rvpn-ink) !important;
  --ant-table-header-split-color: var(--rvpn-line) !important;
  --ant-table-border-color: var(--rvpn-line) !important;
  --ant-table-row-hover-bg: var(--rvpn-raised) !important;
  --ant-table-row-selected-bg: var(--rvpn-selected) !important;
  --ant-table-row-selected-hover-bg: var(--rvpn-selected) !important;
  --ant-table-header-sort-hover-bg: var(--rvpn-selected) !important;
  --ant-table-header-sort-active-bg: var(--rvpn-selected) !important;
  --ant-table-body-sort-bg: var(--rvpn-raised) !important;
  --ant-table-footer-bg: var(--rvpn-raised) !important;
}
body {
  background-color: var(--rvpn-page);
  color: var(--rvpn-ink);
  accent-color: var(--rvpn-accent-text);
}
::selection { background: var(--rvpn-selected); color: var(--rvpn-selected-ink); }
.index-page, .clients-page, .inbounds-page, .xray-page,
.settings-page, .nodes-page, .groups-page, .api-docs-page, .login-app {
  --bg-page: var(--rvpn-page) !important;
  --bg-card: var(--rvpn-panel) !important;
  --bg-card-solid: var(--rvpn-panel) !important;
  background: var(--rvpn-page) !important;
}
body .ant-layout-sider, body .ant-drawer-body, body .ant-drawer-header {
  background-color: var(--rvpn-panel) !important;
}
body .sider-nav .ant-menu-item-selected,
body .sider-utility .ant-menu-item-selected,
body .drawer-menu .ant-menu-item-selected {
  background-color: var(--rvpn-selected) !important;
  color: var(--rvpn-selected-ink) !important;
}
body .sider-nav .ant-menu-item:not(.ant-menu-item-selected):not(.ant-menu-item-disabled):hover,
body .sider-utility .ant-menu-item:not(.ant-menu-item-selected):not(.ant-menu-item-disabled):hover,
body .drawer-menu .ant-menu-item:not(.ant-menu-item-selected):not(.ant-menu-item-disabled):hover {
  background-color: var(--rvpn-raised) !important;
  color: var(--rvpn-accent-text) !important;
}
body .ant-btn-primary:not(.ant-btn-dangerous),
body .ant-btn-color-primary.ant-btn-variant-solid:not(.ant-btn-dangerous) {
  color: var(--rvpn-button-ink) !important;
  background: var(--rvpn-accent) !important;
  border-color: var(--rvpn-accent) !important;
}
body .ant-btn-primary:not(.ant-btn-dangerous):not(:disabled):hover {
  background: var(--rvpn-accent-hover) !important;
  border-color: var(--rvpn-accent-hover) !important;
}
body .ant-btn-primary:not(.ant-btn-dangerous):not(:disabled):active {
  background: var(--rvpn-accent-active) !important;
}
body .ant-btn-primary:disabled {
  color: var(--rvpn-disabled) !important;
  background: var(--rvpn-line) !important;
  border-color: var(--rvpn-line) !important;
}
body .ant-btn-link:not(.ant-btn-dangerous), .rvpn-update-table a, .rvpn-update-release > a {
  color: var(--rvpn-accent-text) !important;
}
body .ant-switch { background: var(--rvpn-toggle-off); }
body .ant-switch.ant-switch-checked,
body .ant-checkbox-checked .ant-checkbox-inner,
body .ant-radio-checked .ant-radio-inner {
  background-color: var(--rvpn-toggle-on) !important;
  border-color: var(--rvpn-toggle-on) !important;
}
.rvpn-input:focus, .rvpn-protocol-filter:focus-visible, .rvpn-conf-input:focus-visible {
  border-color: var(--rvpn-accent-text);
  box-shadow: 0 0 0 2px var(--rvpn-selected);
}
body :is(button, a, input, select, textarea, [tabindex]):focus-visible {
  outline: 2px solid var(--rvpn-accent-text);
  outline-offset: 2px;
}
/* Composite Ant inputs draw focus on their rounded outer control. */
body .ant-input-affix-wrapper > input.ant-input:focus-visible {
  outline: none !important;
  box-shadow: none !important;
}
body .ant-input-affix-wrapper:focus-within {
  border-color: var(--rvpn-accent-text) !important;
  box-shadow: 0 0 0 2px var(--rvpn-selected) !important;
}
.rvpn-publication-choice input, .rvpn-update-check input { accent-color: var(--rvpn-accent-text); }
.client-traffic-cell .ant-progress-track { background: var(--rvpn-accent) !important; }
body .ant-tag-blue, body .ant-tag-purple, body .ant-tag-geekblue, body .ant-tag-cyan {
  color: var(--rvpn-selected-ink) !important;
  background: var(--rvpn-selected) !important;
  border-color: var(--rvpn-control) !important;
}
body .rvpn-protocol, body .rvpn-online,
body .ant-tag-green, body .ant-tag-success {
  color: var(--rvpn-success) !important;
  background: var(--rvpn-success-bg) !important;
  border-color: var(--rvpn-success-border) !important;
}
.rvpn-form-error, .rvpn-error { color: var(--rvpn-error); }
.rvpn-dialog, .rvpn-notice { box-shadow: var(--rvpn-popup-shadow); }
.login-app {
  --color-text: var(--rvpn-ink) !important;
  --color-text-subtle: var(--rvpn-muted) !important;
  --color-accent: var(--rvpn-accent-text) !important;
  --color-border: var(--rvpn-line) !important;
  --shadow-card: var(--rvpn-popup-shadow) !important;
  --grid-color: transparent !important;
  --vignette: none !important;
}
/* Match the reference's flat cream login surface and orange wordmark. */
body .login-app::before, body .login-app::after,
body .login-content::before, body .login-content::after,
body .login-wrapper::before, body .login-wrapper::after,
body .login-card::before { background: none !important; }
body .login-app .brand-name {
  background: none !important;
  color: var(--rvpn-ink);
  -webkit-text-fill-color: var(--rvpn-ink);
}
body .login-app .brand-accent { background: var(--rvpn-accent) !important; }
