/*
 * Travayoo shared controls.
 * Keep visual changes for buttons, inputs, selects and switches here so every page stays consistent.
 */
.trv-icon { display: inline-block; line-height: 1; }

.trv-btn {
    min-height: var(--trv-control-height-md);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--trv-space-2);
    padding: 0 var(--trv-space-4);
    border: 1px solid transparent;
    border-radius: var(--trv-radius-md);
    font: inherit;
    font-size: var(--trv-font-sm);
    font-weight: 750;
    line-height: 1;
    text-decoration: none;
    cursor: pointer;
    transition: transform .16s ease, box-shadow .16s ease, background-color .16s ease, border-color .16s ease;
}
.trv-btn:hover:not(:disabled):not([aria-disabled="true"]) { transform: translateY(-1px); }
.trv-btn:focus-visible { outline: 3px solid color-mix(in srgb, var(--trv-primary) 26%, transparent); outline-offset: 2px; }
.trv-btn:disabled, .trv-btn[aria-disabled="true"] { opacity: .58; cursor: not-allowed; pointer-events: none; }
.trv-btn--primary { color: #fff; background: var(--trv-primary); box-shadow: 0 6px 16px color-mix(in srgb, var(--trv-primary) 20%, transparent); }
.trv-btn--primary:hover { background: var(--trv-primary-hover); }
.trv-btn--secondary { color: var(--trv-control-text); background: var(--trv-control-bg); border-color: var(--trv-control-border); }
.trv-btn--secondary:hover { border-color: var(--trv-primary); color: var(--trv-primary); }
.trv-btn--ghost { color: var(--trv-primary); background: transparent; }
.trv-btn--danger { color: #fff; background: var(--trv-danger); }
.trv-btn--success { color: #fff; background: var(--trv-success); }
.trv-btn--warning { color: #fff; background: var(--trv-warning); }
.trv-btn--sm { min-height: var(--trv-control-height-sm); padding-inline: 11px; font-size: 12px; }
.trv-btn--lg { min-height: var(--trv-control-height-lg); padding-inline: 20px; font-size: var(--trv-font-md); }
.trv-btn--icon { width: var(--trv-control-height-md); padding: 0; }
.trv-btn--icon.trv-btn--sm { width: var(--trv-control-height-sm); }
.trv-btn--block { width: 100%; }
.trv-btn__spinner { display: none; }
.trv-btn.is-loading .trv-btn__spinner { display: inline-block; }
.trv-btn.is-loading .trv-btn__icon { display: none; }

.trv-field { display: grid; gap: 6px; min-width: 0; color: var(--trv-control-text); }
.trv-field__label { font-size: 12px; font-weight: 700; line-height: 1.2; }
.trv-field__required { margin-left: 3px; color: var(--trv-danger); }
.trv-field__control { position: relative; display: flex; min-width: 0; }
.trv-field__control.has-icon .trv-input { padding-left: 36px; }
.trv-field__icon { position: absolute; left: 12px; top: 50%; z-index: 1; color: var(--trv-muted-text); transform: translateY(-50%); pointer-events: none; }
.trv-input, .trv-select {
    width: 100%;
    min-height: var(--trv-control-height-md);
    border: 1px solid var(--trv-control-border);
    border-radius: var(--trv-radius-md);
    background: var(--trv-control-bg);
    color: var(--trv-control-text);
    padding: 8px 12px;
    font: inherit;
    font-size: var(--trv-font-sm);
    outline: none;
    transition: border-color .16s ease, box-shadow .16s ease;
}
.trv-input:focus, .trv-select:focus { border-color: var(--trv-primary); box-shadow: 0 0 0 3px color-mix(in srgb, var(--trv-primary) 13%, transparent); }
.trv-input:disabled, .trv-select:disabled { opacity: .65; cursor: not-allowed; background: color-mix(in srgb, var(--trv-control-bg) 80%, #dfe5ec); }
.trv-field__hint { color: var(--trv-muted-text); font-size: var(--trv-font-xs); }
.trv-select-wrap { position: relative; }
.trv-select { appearance: none; padding-right: 34px; }
.trv-select__arrow { position: absolute; right: 12px; top: 50%; color: var(--trv-muted-text); transform: translateY(-50%); pointer-events: none; }

.trv-switch { display: inline-flex; align-items: center; gap: 10px; cursor: pointer; user-select: none; }
.trv-switch__input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.trv-switch__track { width: 42px; height: 24px; flex: 0 0 42px; padding: 3px; border-radius: 999px; background: #b8c2cf; transition: background-color .18s ease; }
.trv-switch__thumb { display: block; width: 18px; height: 18px; border-radius: 50%; background: #fff; box-shadow: 0 1px 4px rgb(15 23 42 / 25%); transition: transform .18s ease; }
.trv-switch__input:checked + .trv-switch__track { background: var(--trv-primary); }
.trv-switch__input:checked + .trv-switch__track .trv-switch__thumb { transform: translateX(18px); }
.trv-switch__input:focus-visible + .trv-switch__track { outline: 3px solid color-mix(in srgb, var(--trv-primary) 24%, transparent); outline-offset: 2px; }
.trv-switch__content { display: grid; gap: 2px; }
.trv-switch__label { font-size: var(--trv-font-sm); font-weight: 700; }
.trv-switch__description { color: var(--trv-muted-text); font-size: var(--trv-font-xs); }

@media (max-width: 640px) {
    .trv-btn--mobile-block { width: 100%; }
}

/* Shared badge */
.trv-badge{display:inline-flex;align-items:center;gap:.35rem;border-radius:999px;padding:.25rem .55rem;font-weight:700;line-height:1;white-space:nowrap}
.trv-badge--sm{font-size:.68rem}.trv-badge--md{font-size:.76rem}.trv-badge--lg{font-size:.86rem}
.trv-badge--neutral{background:#eef2f7;color:#475569}.trv-badge--primary{background:color-mix(in srgb,var(--tenant-primary,#2563eb) 13%,white);color:var(--tenant-primary,#2563eb)}
.trv-badge--success{background:#dcfce7;color:#166534}.trv-badge--warning{background:#fef3c7;color:#92400e}.trv-badge--danger{background:#fee2e2;color:#991b1b}.trv-badge--info{background:#e0f2fe;color:#075985}
.trv-field__error{display:block;color:#b91c1c;font-size:.75rem;margin-top:.3rem}.trv-field.has-error .trv-field__control{border-color:#dc2626}
.trv-page-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:1rem}.trv-page-header__copy{display:flex;align-items:center;gap:.75rem}.trv-page-header__icon{display:grid;place-items:center;width:2.5rem;height:2.5rem;border-radius:.75rem;background:color-mix(in srgb,var(--tenant-primary,#2563eb) 12%,white);color:var(--tenant-primary,#2563eb)}.trv-page-header h1{margin:0;font-size:1.45rem}.trv-page-header p{margin:.2rem 0 0;color:#64748b}
.trv-summary-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.75rem}.trv-summary-tile{display:flex;align-items:center;gap:.75rem;padding:1rem;border:1px solid #e2e8f0;border-radius:.9rem;background:#fff}.trv-summary-tile__icon{font-size:1.15rem}.trv-summary-tile__label{display:block;color:#64748b;font-size:.78rem}.trv-summary-tile__value{display:block;font-size:1.25rem;margin-top:.15rem}
.trv-filter-panel{border:1px solid #e2e8f0;border-radius:1rem;background:#fff}.trv-filter-panel__header{display:flex;align-items:center;justify-content:space-between;padding:1rem;border-bottom:1px solid #e2e8f0}.trv-filter-panel__header h2{margin:0;font-size:1rem}.trv-filter-panel__header p{margin:.2rem 0 0;color:#64748b;font-size:.8rem}.trv-filter-panel__body{padding:1rem}.trv-filter-panel__toggle{border:0;background:transparent;cursor:pointer}
.trv-pagination{display:flex;align-items:center;justify-content:flex-end;gap:.35rem;margin-top:1rem}.trv-pagination__item{display:grid;place-items:center;min-width:2rem;height:2rem;padding:0 .5rem;border:1px solid #dbe3ec;border-radius:.55rem;text-decoration:none;color:#334155;background:#fff}.trv-pagination__item.is-active{background:var(--tenant-primary,#2563eb);border-color:var(--tenant-primary,#2563eb);color:#fff}
/* Shared modal control
   - Renders above fixed headers and menus.
   - Opens centered in the viewport.
   - Supports draggable dialogs through the shared JS control.
   - Uses internal scrolling for tall content.
   - Applies to every element using data-trv-modal / .trv-modal. */
.trv-modal{
    position:fixed;
    inset:0;
    z-index:10050;
    display:flex;
    align-items:center;
    justify-content:center;
    padding:20px;
    overflow:hidden;
    isolation:isolate
}
.trv-modal[hidden]{display:none!important}
.trv-modal__backdrop{
    position:fixed;
    inset:0;
    z-index:0;
    border:0;
    background:rgba(15,23,42,.58);
    backdrop-filter:blur(2px);
    cursor:default
}
.trv-modal__dialog{
    --trv-modal-x:0px;
    --trv-modal-y:0px;
    position:relative;
    z-index:1;
    width:min(640px,calc(100vw - 40px));
    max-height:calc(100vh - 40px);
    margin:0;
    overflow:auto;
    overscroll-behavior:contain;
    border-radius:1rem;
    background:#fff;
    box-shadow:0 24px 60px rgba(15,23,42,.30);
    transform:translate3d(var(--trv-modal-x),var(--trv-modal-y),0);
    will-change:transform
}
.trv-modal__dialog.is-dragging{
    user-select:none;
    cursor:grabbing;
    box-shadow:0 30px 72px rgba(15,23,42,.38)
}
.trv-modal__header,.trv-modal__footer{
    display:flex;
    align-items:center;
    justify-content:space-between;
    padding:1rem 1.25rem;
    background:#fff
}
.trv-modal__header{
    position:sticky;
    top:0;
    z-index:2;
    border-bottom:1px solid #e2e8f0;
    cursor:grab;
    touch-action:none
}
.trv-modal__header:active{cursor:grabbing}
.trv-modal__header button,
.trv-modal__header a,
.trv-modal__header input,
.trv-modal__header select,
.trv-modal__header textarea{
    cursor:pointer
}
.trv-modal__footer{
    position:sticky;
    bottom:0;
    z-index:2;
    border-top:1px solid #e2e8f0
}
.trv-modal__body{padding:1.25rem}
.trv-modal__close{
    border:0;
    background:transparent;
    cursor:pointer;
    font-size:1.1rem
}
html.trv-modal-open,
body.trv-modal-open{
    overflow:hidden!important
}
@media(max-width:640px){
    .trv-modal{
        align-items:flex-end;
        padding:8px
    }
    .trv-modal__dialog{
        width:100%;
        max-height:calc(100vh - 16px);
        border-radius:.9rem
    }
    .trv-modal__header{
        cursor:default;
        touch-action:auto
    }
}

.trv-loading-overlay{position:absolute;inset:0;z-index:20;display:flex;align-items:center;justify-content:center;gap:.6rem;background:rgba(255,255,255,.78);backdrop-filter:blur(2px)}.trv-loading-overlay[hidden]{display:none}
.trv-empty-state{text-align:center;padding:2rem 1rem;border:1px dashed #cbd5e1;border-radius:1rem;background:#fff}.trv-empty-state__icon{display:inline-grid;place-items:center;width:3rem;height:3rem;border-radius:50%;background:#f1f5f9;color:#64748b;font-size:1.2rem}.trv-empty-state h3{margin:.75rem 0 .25rem}.trv-empty-state p{margin:0 0 1rem;color:#64748b}

/* Shared inline help affordance for Travayoo controls. Tooltip rendering is handled by travayoo-tooltip.js. */
.trv-field__help,.trv-switch__help{display:inline-grid;place-items:center;width:18px;height:18px;margin-left:5px;padding:0;border:0;border-radius:50%;background:transparent;color:var(--trv-text-muted,#98a2b3);font-size:12px;vertical-align:middle;cursor:help}.trv-field__help:hover,.trv-switch__help:hover,.trv-field__help:focus-visible,.trv-switch__help:focus-visible{background:var(--trv-surface-muted,#f2f4f7);color:var(--trv-primary,#0f2a5f);outline:none}.trv-switch__label{display:inline-flex;align-items:center;gap:2px}
