html[data-av3] .av3-card {
    min-width: 0;
    color: var(--av3-text);
    background: var(--av3-surface);
    border: 1px solid var(--av3-border);
    border-radius: var(--av3-radius-lg);
    box-shadow: var(--av3-shadow-sm);
}

html[data-av3] .av3-card__header,
html[data-av3] .av3-card__body,
html[data-av3] .av3-card__footer {
    padding: var(--av3-space-4);
}

html[data-av3] .av3-card__header {
    border-bottom: 1px solid var(--av3-border);
}

html[data-av3] .av3-card__footer {
    border-top: 1px solid var(--av3-border);
}

html[data-av3] .av3-grid {
    display: grid;
    min-width: 0;
    gap: var(--av3-space-3);
}

html[data-av3] .av3-grid--2 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
}

html[data-av3] .av3-grid--3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
}

html[data-av3] .av3-grid--4 {
    grid-template-columns: repeat(4, minmax(0, 1fr));
}

html[data-av3] :is(.av3-button,.v3-btn) {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 38px;
    padding: 7px 14px;
    gap: var(--av3-space-2);
    color: var(--av3-text);
    background: var(--av3-surface);
    border: 1px solid var(--av3-border);
    border-radius: var(--av3-radius-md);
    font-size: var(--v3-font-size-xs);
    font-weight: 700;
    transition:
        background-color var(--av3-fast) ease,
        border-color var(--av3-fast) ease,
        color var(--av3-fast) ease;
}

html[data-av3] :is(.av3-button,.v3-btn):hover {
    background: var(--av3-surface-hover);
    border-color: var(--av3-border-strong);
}

html[data-av3] :is(.av3-button--primary,.v3-btn--primary) {
    color: var(--av3-text-inverse);
    background: var(--av3-primary);
    border-color: var(--av3-primary);
}

html[data-av3] :is(.av3-button--primary,.v3-btn--primary):hover {
    background: var(--av3-primary-hover);
    border-color: var(--av3-primary-hover);
}

html[data-av3] .av3-button--danger {
    color: var(--av3-danger);
    background: var(--av3-danger-soft);
    border-color: color-mix(in srgb, var(--av3-danger) 35%, transparent);
}

html[data-av3] :is(.av3-field,.v3-field) {
    display: flex;
    flex-direction: column;
    min-width: 0;
    gap: 6px;
}

html[data-av3] .av3-label {
    color: var(--av3-text-secondary);
    font-size: var(--av3-size-11);
    font-weight: 700;
}

html[data-av3] :is(.av3-input,.v3-input),
html[data-av3] :is(.av3-select,.v3-select),
html[data-av3] .av3-textarea {
    width: 100%;
    min-height: 40px;
    padding: 8px 11px;
    color: var(--av3-text);
    background: var(--av3-bg-raised);
    border: 1px solid var(--av3-border);
    border-radius: var(--av3-radius-md);
    transition:
        border-color var(--av3-fast) ease,
        box-shadow var(--av3-fast) ease;
}

html[data-av3] .av3-textarea {
    min-height: 100px;
    resize: vertical;
}

html[data-av3] :is(.av3-input,.v3-input):focus,
html[data-av3] :is(.av3-select,.v3-select):focus,
html[data-av3] .av3-textarea:focus {
    border-color: var(--av3-primary);
    outline: 0;
    box-shadow: 0 0 0 3px var(--av3-primary-soft);
}

html[data-av3] .av3-table-wrap {
    max-width: 100%;
    overflow: auto;
    border: 1px solid var(--av3-border);
    border-radius: var(--av3-radius-lg);
}

html[data-av3] .av3-table {
    width: 100%;
    min-width: 720px;
    color: var(--av3-text);
    background: var(--av3-surface);
}

html[data-av3] .av3-table th,
html[data-av3] .av3-table td {
    padding: 11px 13px;
    text-align: right;
    vertical-align: middle;
    border-bottom: 1px solid var(--av3-border);
    white-space: nowrap;
}

html[data-av3] .av3-table th {
    color: var(--av3-text-secondary);
    background: var(--av3-bg-raised);
    font-size: var(--av3-size-11);
    font-weight: 700;
}

html[data-av3] .av3-table td {
    font-size: var(--v3-font-size-xs);
}

html[data-av3] .av3-table tbody tr:hover {
    background: var(--av3-surface-hover);
}

html[data-av3] .av3-badge {
    display: inline-flex;
    align-items: center;
    min-height: var(--v3-status-height);
    padding: 3px 8px;
    gap: 5px;
    color: var(--av3-text-secondary);
    background: var(--av3-surface-active);
    border: 1px solid var(--av3-border);
    border-radius: var(--av3-radius-pill);
    font-size: var(--av3-size-10);
    font-weight: 700;
}

html[data-av3] .av3-badge--success {
    color: var(--av3-success);
    background: var(--av3-success-soft);
}

html[data-av3] .av3-badge--warning {
    color: var(--av3-warning);
    background: var(--av3-warning-soft);
}

html[data-av3] .av3-badge--danger {
    color: var(--av3-danger);
    background: var(--av3-danger-soft);
}

html[data-av3] .av3-alert {
    padding: var(--av3-space-3);
    color: var(--av3-text-secondary);
    background: var(--av3-surface);
    border: 1px solid var(--av3-border);
    border-radius: var(--av3-radius-md);
}

html[data-av3] .av3-alert--warning {
    color: var(--av3-warning);
    background: var(--av3-warning-soft);
    border-color: color-mix(in srgb, var(--av3-warning) 32%, transparent);
}

html[data-av3] .av3-empty {
    display: grid;
    min-height: 160px;
    place-items: center;
    padding: var(--av3-space-5);
    color: var(--av3-text-muted);
    text-align: center;
}

@media (max-width: 991.98px) {
    html[data-av3] .av3-grid--4 {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    html[data-av3] .av3-grid--3 {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@media (max-width: 575.98px) {
    html[data-av3] .av3-grid--2,
    html[data-av3] .av3-grid--3,
    html[data-av3] .av3-grid--4 {
        grid-template-columns: minmax(0, 1fr);
    }

    html[data-av3] .av3-card__header,
    html[data-av3] .av3-card__body,
    html[data-av3] .av3-card__footer {
        padding: var(--av3-space-3);
    }

    html[data-av3] :is(.av3-button,.v3-btn) {
        min-height: 42px;
    }
}

/* ==========================================================
 * V3_CORE_COMPONENT_AUTHORITY_R1_BEGIN
 *
 * Canonical reusable application components.
 * Page CSS must progressively migrate to these contracts.
 * ========================================================== */

/* ------------------------------
 * BUTTON
 * ------------------------------ */

.v3-btn {
    min-height: var(--v3-control-height-md);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--v3-space-2);
    padding-inline: var(--v3-space-4);
    border: var(--v3-border-width) solid transparent;
    border-radius: var(--v3-radius-md);
    font-family: var(--v3-font-family);
    font-size: var(--v3-font-size-md);
    font-weight: var(--v3-font-weight-semibold);
    line-height: 1;
    text-decoration: none;
    cursor: pointer;
    user-select: none;
    transition:
        background-color var(--v3-motion-fast),
        border-color var(--v3-motion-fast),
        color var(--v3-motion-fast),
        box-shadow var(--v3-motion-fast),
        opacity var(--v3-motion-fast);
}

.v3-btn:hover {
    text-decoration: none;
}

.v3-btn:focus-visible {
    outline: var(--v3-focus-ring-width) solid var(--v3-color-primary);
    outline-offset: var(--v3-focus-ring-offset);
}

.v3-btn:disabled,
.v3-btn[aria-disabled="true"],
.v3-btn.is-disabled {
    opacity: var(--v3-opacity-disabled);
    cursor: not-allowed;
    pointer-events: none;
}

.v3-btn--sm {
    min-height: var(--v3-control-height-sm);
    padding-inline: var(--v3-space-3);
    font-size: var(--v3-font-size-sm);
}

.v3-btn--lg {
    min-height: var(--v3-control-height-lg);
    padding-inline: var(--v3-space-5);
    font-size: var(--v3-font-size-lg);
}

.v3-btn--primary {
    background: var(--v3-color-primary);
    border-color: var(--v3-color-primary);
    color: var(--v3-color-text-inverse);
}

.v3-btn--primary:hover {
    background: var(--v3-color-primary-hover);
    border-color: var(--v3-color-primary-hover);
}

.v3-btn--secondary {
    background: var(--v3-color-surface-raised);
    border-color: var(--v3-color-border);
    color: var(--v3-color-text);
}

.v3-btn--secondary:hover {
    background: var(--v3-color-surface-hover);
    border-color: var(--v3-color-border-strong);
}

.v3-btn--neutral {
    background: transparent;
    border-color: var(--v3-color-border);
    color: var(--v3-color-text-secondary);
}

.v3-btn--neutral:hover {
    background: var(--v3-color-surface-hover);
    color: var(--v3-color-text);
}

.v3-btn--danger {
    background: var(--v3-color-danger);
    border-color: var(--v3-color-danger);
    color: var(--v3-color-text-inverse);
}

.v3-btn--icon {
    width: var(--v3-control-height-md);
    padding-inline: 0;
}

/* ------------------------------
 * FORM FIELD
 * ------------------------------ */

.v3-field {
    display: grid;
    gap: var(--v3-space-2);
}

.v3-label {
    color: var(--v3-color-text-secondary);
    font-size: var(--v3-font-size-sm);
    font-weight: var(--v3-font-weight-medium);
}

.v3-input,
.v3-select,
.v3-textarea {
    width: 100%;
    border: var(--v3-border-width) solid var(--v3-color-border);
    border-radius: var(--v3-radius-md);
    background: var(--v3-color-surface);
    color: var(--v3-color-text);
    font-family: var(--v3-font-family);
    font-size: var(--v3-font-size-md);
    transition:
        border-color var(--v3-motion-fast),
        box-shadow var(--v3-motion-fast),
        background-color var(--v3-motion-fast);
}

.v3-input,
.v3-select {
    min-height: var(--v3-control-height-md);
    padding-inline: var(--v3-space-3);
}

.v3-textarea {
    min-height: calc(var(--v3-control-height-md) * 2);
    padding: var(--v3-space-3);
    resize: vertical;
}

.v3-input::placeholder,
.v3-textarea::placeholder {
    color: var(--v3-color-text-muted);
}

.v3-input:focus,
.v3-select:focus,
.v3-textarea:focus {
    outline: none;
    border-color: var(--v3-color-primary);
    box-shadow: 0 0 0 var(--v3-focus-ring-spread) var(--v3-color-primary-soft);
}

.v3-input:disabled,
.v3-select:disabled,
.v3-textarea:disabled {
    opacity: var(--v3-opacity-control-disabled);
    cursor: not-allowed;
    background: var(--v3-color-surface-raised);
}

.v3-field-help {
    color: var(--v3-color-text-muted);
    font-size: var(--v3-font-size-xs);
}

.v3-field-error {
    color: var(--v3-color-danger);
    font-size: var(--v3-font-size-xs);
}

/* ------------------------------
 * SURFACE
 * ------------------------------ */

.v3-card,
.v3-panel {
    border: var(--v3-border-width) solid var(--v3-color-border);
    background: var(--v3-color-surface);
    color: var(--v3-color-text);
}

.v3-card {
    border-radius: var(--v3-radius-lg);
    box-shadow: var(--v3-shadow-sm);
}

.v3-panel {
    border-radius: var(--v3-radius-md);
}

.v3-card__header,
.v3-card__body,
.v3-card__footer,
.v3-panel__body {
    padding: var(--v3-space-4);
}

.v3-card__header,
.v3-card__footer {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--v3-space-3);
}

.v3-card__header {
    border-bottom: 1px solid var(--v3-color-border);
}

.v3-card__footer {
    border-top: 1px solid var(--v3-color-border);
}

/* ------------------------------
 * TOOLBAR
 * ------------------------------ */

.v3-toolbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: var(--v3-space-3);
}

.v3-toolbar__group {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: var(--v3-space-2);
}

/* ------------------------------
 * TABLE
 * ------------------------------ */

.v3-table-shell {
    width: 100%;
    overflow: hidden;
    border: var(--v3-border-width) solid var(--v3-color-border);
    border-radius: var(--v3-radius-lg);
    background: var(--v3-color-surface);
}

.v3-table-scroll {
    width: 100%;
    overflow-x: auto;
}

.v3-table {
    width: 100%;
    border-collapse: collapse;
    color: var(--v3-color-text);
    font-family: var(--v3-font-family);
    font-size: var(--v3-font-size-sm);
}

.v3-table th,
.v3-table td {
    padding: var(--v3-space-3) var(--v3-space-4);
    border-bottom: 1px solid var(--v3-color-border);
    text-align: start;
    vertical-align: middle;
}

.v3-table th {
    background: var(--v3-color-surface-raised);
    color: var(--v3-color-text-secondary);
    font-weight: var(--v3-font-weight-semibold);
    white-space: nowrap;
}

.v3-table tbody tr {
    transition: background-color var(--v3-motion-fast);
}

.v3-table tbody tr:hover {
    background: var(--v3-color-surface-hover);
}

.v3-table tbody tr:last-child td {
    border-bottom: 0;
}

.v3-table__actions {
    display: inline-flex;
    align-items: center;
    gap: var(--v3-space-1);
}

.v3-table-empty {
    padding: var(--v3-space-8);
    color: var(--v3-color-text-muted);
    text-align: center;
}

/* ------------------------------
 * STATUS / BADGE
 * ------------------------------ */

.v3-status {
    min-height: var(--v3-status-height);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--v3-space-1);
    padding-inline: var(--v3-space-2);
    border: var(--v3-border-width) solid var(--v3-color-border);
    border-radius: var(--v3-radius-pill);
    background: var(--v3-color-surface-raised);
    color: var(--v3-color-text-secondary);
    font-size: var(--v3-font-size-xs);
    font-weight: var(--v3-font-weight-medium);
    white-space: nowrap;
}

.v3-status--success {
    border-color: var(--v3-color-success);
    background: var(--v3-color-success-soft);
    color: var(--v3-color-success);
}

.v3-status--warning {
    border-color: var(--v3-color-warning);
    background: var(--v3-color-warning-soft);
    color: var(--v3-color-warning);
}

.v3-status--danger {
    border-color: var(--v3-color-danger);
    background: var(--v3-color-danger-soft);
    color: var(--v3-color-danger);
}

.v3-status--info {
    border-color: var(--v3-color-info);
    background: var(--v3-color-info-soft);
    color: var(--v3-color-info);
}

/* ------------------------------
 * ICON
 * ------------------------------ */

.v3-icon {
    width: var(--v3-icon-md);
    height: var(--v3-icon-md);
    display: inline-block;
    flex: 0 0 auto;
    stroke: currentColor;
    fill: none;
    stroke-width: var(--v3-icon-stroke-width);
    stroke-linecap: round;
    stroke-linejoin: round;
}

.v3-icon--sm {
    width: var(--v3-icon-sm);
    height: var(--v3-icon-sm);
}

.v3-icon--lg {
    width: var(--v3-icon-lg);
    height: var(--v3-icon-lg);
}

/* ------------------------------
 * OVERLAY
 * ------------------------------ */

.v3-backdrop {
    position: fixed;
    inset: 0;
    background: var(--v3-color-overlay);
}

.v3-dialog {
    width: min(100% - (var(--v3-space-4) * 2), var(--v3-dialog-max-width));
    border: var(--v3-border-width) solid var(--v3-color-border);
    border-radius: var(--v3-radius-xl);
    background: var(--v3-color-surface);
    color: var(--v3-color-text);
    box-shadow: var(--v3-shadow-lg);
}

/* V3_CORE_COMPONENT_AUTHORITY_R1_END */

/* ==========================================================
   V3 SHARED PROGRESS COMPONENT
   Authority: reusable visual progress contract
   Runtime width remains owned by:
   .av3-progress-owned + data-av3-progress-value
   ========================================================== */

.v3-progress {
    width: 100%;
    height: 6px;
    overflow: hidden;
    border-radius: var(--v3-radius-pill);
    background: var(--v3-color-surface-active);
}

.v3-progress__bar {
    display: block;
    height: 100%;
    border-radius: inherit;
    transition: width .2s ease;
}

.v3-progress__bar--info {
    background: var(--v3-color-info);
}

.v3-progress__bar--danger {
    background: var(--v3-color-danger);
}

/* ==========================================================
 * V3_FORM_STATE_EXTENSION_R2_BEGIN
 * Shared contracts promoted during WireGuard Servers migration.
 * ========================================================== */

.v3-input--error,
.v3-select--error,
.v3-textarea--error {
    border-color: var(--v3-color-danger);
}

.v3-input--error:focus,
.v3-select--error:focus,
.v3-textarea--error:focus {
    border-color: var(--v3-color-danger);
    box-shadow:
        0 0 0
        var(--v3-focus-ring-spread)
        var(--v3-color-danger-soft);
}

.v3-check {
    min-height: var(--v3-control-height-md);
    display: inline-flex;
    align-items: center;
    gap: var(--v3-space-2);
    color: var(--v3-color-text-secondary);
    font-size: var(--v3-font-size-sm);
}

.v3-checkbox {
    width: 17px;
    height: 17px;
    margin: 0;
    accent-color: var(--v3-color-primary);
    cursor: pointer;
}

.v3-checkbox:disabled {
    opacity: var(--v3-opacity-control-disabled);
    cursor: not-allowed;
}

.v3-check__label {
    margin: 0;
    color: var(--v3-color-text-secondary);
    font-size: var(--v3-font-size-sm);
    cursor: pointer;
}

/* V3_FORM_STATE_EXTENSION_R2_END */

/* ==========================================================
 * V3_ALERT_COMPONENT_R3_BEGIN
 * Shared semantic alert contract.
 * ========================================================== */

.v3-alert {
    padding: var(--v3-space-3) var(--v3-space-4);
    border: var(--v3-border-width) solid var(--v3-color-border);
    border-radius: var(--v3-radius-md);
    background: var(--v3-color-surface-raised);
    color: var(--v3-color-text-secondary);
    font-size: var(--v3-font-size-sm);
    line-height: 1.75;
}

.v3-alert--neutral {
    border-color: var(--v3-color-border);
    background: var(--v3-color-surface-raised);
    color: var(--v3-color-text-secondary);
}

.v3-alert--success {
    border-color: var(--v3-color-success);
    background: var(--v3-color-success-soft);
    color: var(--v3-color-success);
}

.v3-alert--warning {
    border-color: var(--v3-color-warning);
    background: var(--v3-color-warning-soft);
    color: var(--v3-color-warning);
}

.v3-alert--danger {
    border-color: var(--v3-color-danger);
    background: var(--v3-color-danger-soft);
    color: var(--v3-color-danger);
}

.v3-alert--info {
    border-color: var(--v3-color-info);
    background: var(--v3-color-info-soft);
    color: var(--v3-color-info);
}

/* V3_ALERT_COMPONENT_R3_END */
