/* =====================================================================
 * TimeOkay Design Tokens (enterprise)
 *  - Neutral gray scale + single deep corporate blue
 *  - Legacy names (--primary-color, --text-dark, --bg-light ...) are kept
 *    because templates/JS reference them. New code should prefer the
 *    semantic tokens below (--surface-*, --text-*, --border-*).
 * ===================================================================== */
:root {
    /* ---- Font ---- */
    --font-sans: 'Pretendard Variable', Pretendard, 'Noto Sans KR', -apple-system, BlinkMacSystemFont,
                 'Apple SD Gothic Neo', 'Malgun Gothic', 'Segoe UI', Roboto, sans-serif;
    --font-mono: 'JetBrains Mono', 'SFMono-Regular', Consolas, 'Liberation Mono', monospace;

    /* ---- Neutral gray scale ---- */
    --gray-0:   #ffffff;
    --gray-25:  #fcfcfd;
    --gray-50:  #f7f8fa;
    --gray-100: #f1f3f6;
    --gray-200: #e4e7ec;
    --gray-300: #d0d5dd;
    --gray-400: #98a2b3;
    --gray-500: #667085;
    --gray-600: #475467;
    --gray-700: #344054;
    --gray-800: #1d2939;
    --gray-900: #101828;

    /* ---- Brand: deep corporate blue (navy-leaning) ---- */
    --blue-50:  #eef3fc;
    --blue-100: #dbe5f8;
    --blue-200: #b9cdf1;
    --blue-500: #2d5fd0;
    --blue-600: #1a47b8;
    --blue-700: #143a99;
    --blue-800: #102f7d;
    --navy-900: #0b1f4d;

    --primary-color: #1a47b8;
    --primary-dark:  #143a99;
    --primary-darker:#102f7d;
    --primary-light: #2d5fd0;
    --primary-rgb:   26, 71, 184;
    --primary-soft:  #eef3fc;
    --primary-border:#b9cdf1;
    --secondary-color: #2d5fd0;   /* legacy: used for brand accent span */
    --accent-color:    #2d5fd0;
    --on-primary: #ffffff;

    /* ---- Semantic ---- */
    --success-color: #067647;
    --success-dark:  #05603a;
    --success-rgb:   6, 118, 71;
    --success-soft:  #ecfdf3;
    --success-border:#abefc6;

    --warning-color: #b54708;
    --warning-dark:  #93370d;
    --warning-rgb:   181, 71, 8;
    --warning-soft:  #fffaeb;
    --warning-border:#fedf89;

    --danger-color: #d92d20;
    --danger-dark:  #b42318;
    --danger-rgb:   217, 45, 32;
    --danger-soft:  #fef3f2;
    --danger-border:#fecdca;

    --info-color: #0b6bcb;
    --info-rgb:   11, 107, 203;
    --info-soft:  #eff8ff;
    --info-border:#b2ddff;

    /* ---- Surfaces / text / borders (semantic) ---- */
    --surface-page:    #f5f6f8;
    --surface-card:    #ffffff;
    --surface-subtle:  #f7f8fa;
    --surface-sunken:  #f1f3f6;
    --surface-hover:   #f4f6f9;
    --surface-inverse: #101828;

    --text-strong:    #101828;
    --text-primary:   #1d2939;
    --text-secondary: #475467;
    --text-tertiary:  #667085;
    --text-disabled:  #98a2b3;
    --text-inverse:   #ffffff;

    --border-subtle: #eaecf0;
    --border-default:#e4e7ec;
    --border-strong: #d0d5dd;

    /* ---- Legacy aliases (do not remove) ---- */
    --text-dark:  var(--text-primary);
    --text-gray:  var(--text-secondary);
    --text-light: var(--text-tertiary);
    --bg-light:   var(--surface-subtle);
    --bg-white:   var(--surface-card);
    --card-bg:    var(--surface-card);
    --border-color: var(--border-default);

    /* ---- Radius ---- */
    --radius-xs: 2px;
    --radius-sm: 4px;
    --radius-md: 6px;
    --radius-lg: 8px;
    --radius-xl: 12px;
    --radius-pill: 999px;

    /* ---- Elevation ---- */
    --shadow-xs: 0 1px 2px rgba(16, 24, 40, 0.05);
    --shadow-sm: 0 1px 3px rgba(16, 24, 40, 0.08), 0 1px 2px rgba(16, 24, 40, 0.04);
    --shadow-md: 0 4px 8px -2px rgba(16, 24, 40, 0.08), 0 2px 4px -2px rgba(16, 24, 40, 0.04);
    --shadow-lg: 0 12px 24px -4px rgba(16, 24, 40, 0.10), 0 4px 8px -4px rgba(16, 24, 40, 0.04);
    --focus-ring: 0 0 0 3px rgba(var(--primary-rgb), 0.20);
    --focus-ring-danger: 0 0 0 3px rgba(var(--danger-rgb), 0.18);

    /* ---- Spacing scale (4px base) ---- */
    --space-1: 4px;
    --space-2: 8px;
    --space-3: 12px;
    --space-4: 16px;
    --space-5: 20px;
    --space-6: 24px;
    --space-8: 32px;
    --space-10: 40px;
    --space-12: 48px;
    --space-16: 64px;

    /* ---- Typography scale ---- */
    --fs-xs: 0.75rem;    /* 12 */
    --fs-sm: 0.8125rem;  /* 13 */
    --fs-base: 0.875rem; /* 14 */
    --fs-md: 0.9375rem;  /* 15 */
    --fs-lg: 1.0625rem;  /* 17 */
    --fs-xl: 1.25rem;    /* 20 */
    --fs-2xl: 1.5rem;    /* 24 */
    --fs-3xl: 1.875rem;  /* 30 */
    --fs-4xl: 2.5rem;    /* 40 */

    /* ---- Controls ---- */
    --control-h: 38px;
    --control-h-sm: 32px;
    --control-h-lg: 44px;

    /* ---- Layout ---- */
    --sidebar-w: 248px;
    --sidebar-bg: #ffffff;
    --sidebar-active-bg: #eef3fc;

    /* ---- Bootstrap bridge ---- */
    --bs-body-font-family: var(--font-sans);
    --bs-body-color: var(--text-primary);
    --bs-body-bg: var(--surface-page);
    --bs-border-color: var(--border-default);
    --bs-primary: #1a47b8;
    --bs-primary-rgb: 26, 71, 184;
    --bs-link-color: #1a47b8;
    --bs-link-color-rgb: 26, 71, 184;
    --bs-link-hover-color: #143a99;
    --bs-border-radius: 6px;
    --bs-border-radius-sm: 4px;
    --bs-border-radius-lg: 8px;
    --bs-secondary-color: var(--text-secondary);
    --bs-emphasis-color: var(--text-strong);
}

[data-theme="dark"] {
    --gray-50:  #1a1f27;
    --gray-100: #20262f;
    --gray-200: #2a313c;
    --gray-300: #364050;

    --primary-color: #4f7fe6;
    --primary-dark:  #3d6cd4;
    --primary-darker:#325bb6;
    --primary-light: #7aa0f0;
    --primary-rgb:   79, 127, 230;
    --primary-soft:  rgba(79, 127, 230, 0.14);
    --primary-border:rgba(79, 127, 230, 0.40);
    --secondary-color: #7aa0f0;
    --accent-color:    #7aa0f0;

    --success-color: #3ccb7f;
    --success-dark:  #2fb26c;
    --success-rgb:   60, 203, 127;
    --success-soft:  rgba(60, 203, 127, 0.12);
    --success-border:rgba(60, 203, 127, 0.35);

    --warning-color: #f5a524;
    --warning-dark:  #dc8f12;
    --warning-rgb:   245, 165, 36;
    --warning-soft:  rgba(245, 165, 36, 0.12);
    --warning-border:rgba(245, 165, 36, 0.35);

    --danger-color: #f0625a;
    --danger-dark:  #e04a41;
    --danger-rgb:   240, 98, 90;
    --danger-soft:  rgba(240, 98, 90, 0.12);
    --danger-border:rgba(240, 98, 90, 0.35);

    --info-color: #53a6f0;
    --info-rgb:   83, 166, 240;
    --info-soft:  rgba(83, 166, 240, 0.12);
    --info-border:rgba(83, 166, 240, 0.35);

    --surface-page:    #0f1217;
    --surface-card:    #171b22;
    --surface-subtle:  #1c212a;
    --surface-sunken:  #12161c;
    --surface-hover:   #1f2530;
    --surface-inverse: #f1f3f6;

    --text-strong:    #f5f7fa;
    --text-primary:   #e4e7ec;
    --text-secondary: #a9b2c1;
    --text-tertiary:  #8590a3;
    --text-disabled:  #5c6577;
    --text-inverse:   #101828;

    --border-subtle: #222833;
    --border-default:#2a313c;
    --border-strong: #3a4352;

    --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.30);
    --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.35);
    --shadow-md: 0 4px 10px -2px rgba(0, 0, 0, 0.45);
    --shadow-lg: 0 12px 28px -4px rgba(0, 0, 0, 0.55);

    --sidebar-bg: #13171d;
    --sidebar-active-bg: rgba(79, 127, 230, 0.14);

    --bs-primary: #4f7fe6;
    --bs-primary-rgb: 79, 127, 230;
    --bs-link-color: #7aa0f0;
    --bs-link-color-rgb: 122, 160, 240;
    --bs-link-hover-color: #9db9f4;
    color-scheme: dark;
}

/* ===== Reset & Base ===== */
* { margin: 0; padding: 0; box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; }

body {
    font-family: var(--font-sans);
    font-size: var(--fs-base);
    line-height: 1.55;
    letter-spacing: -0.005em;
    color: var(--text-dark);
    background: var(--surface-page);
    min-height: 100vh;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    text-rendering: optimizeLegibility;
    word-break: keep-all;
    overflow-wrap: anywhere;
}

h1, h2, h3, h4, h5, h6 {
    color: var(--text-strong);
    letter-spacing: -0.015em;
    font-weight: 700;
}

a { color: var(--primary-color); }
a:hover { color: var(--primary-dark); }

::selection { background: rgba(var(--primary-rgb), 0.18); }

:focus-visible { outline: 2px solid var(--primary-color); outline-offset: 2px; }

input, select, textarea, button { font-family: inherit; }

input::placeholder, textarea::placeholder { color: var(--text-disabled); }

/* Native form controls inherit theme */
[data-theme="dark"] input,
[data-theme="dark"] select,
[data-theme="dark"] textarea { color-scheme: dark; }

/* Scrollbar (subtle) */
* { scrollbar-width: thin; scrollbar-color: var(--border-strong) transparent; }
*::-webkit-scrollbar { width: 10px; height: 10px; }
*::-webkit-scrollbar-thumb { background: var(--border-strong); border-radius: 10px; border: 3px solid transparent; background-clip: content-box; }
*::-webkit-scrollbar-track { background: transparent; }

/* ===== Bootstrap component bridge ===== */
.btn {
    --bs-btn-font-weight: 600;
    --bs-btn-font-size: var(--fs-base);
    --bs-btn-border-radius: var(--radius-md);
    --bs-btn-padding-y: 0.5rem;
    --bs-btn-padding-x: 1rem;
    --bs-btn-focus-box-shadow: var(--focus-ring);
    letter-spacing: -0.005em;
}
.btn-primary {
    --bs-btn-bg: var(--primary-color);
    --bs-btn-border-color: var(--primary-color);
    --bs-btn-hover-bg: var(--primary-dark);
    --bs-btn-hover-border-color: var(--primary-dark);
    --bs-btn-active-bg: var(--primary-darker);
    --bs-btn-active-border-color: var(--primary-darker);
    --bs-btn-disabled-bg: var(--primary-color);
    --bs-btn-disabled-border-color: var(--primary-color);
}
.btn-outline-primary {
    --bs-btn-color: var(--primary-color);
    --bs-btn-border-color: var(--primary-border);
    --bs-btn-hover-bg: var(--primary-soft);
    --bs-btn-hover-color: var(--primary-dark);
    --bs-btn-hover-border-color: var(--primary-color);
    --bs-btn-active-bg: var(--primary-soft);
    --bs-btn-active-color: var(--primary-dark);
}
.btn-light {
    --bs-btn-bg: var(--surface-card);
    --bs-btn-border-color: var(--border-default);
    --bs-btn-color: var(--text-secondary);
    --bs-btn-hover-bg: var(--surface-hover);
    --bs-btn-hover-border-color: var(--border-strong);
}
.btn-danger {
    --bs-btn-bg: var(--danger-color);
    --bs-btn-border-color: var(--danger-color);
    --bs-btn-hover-bg: var(--danger-dark);
    --bs-btn-hover-border-color: var(--danger-dark);
}
.bg-primary { background-color: var(--primary-color) !important; }
.text-primary { color: var(--primary-color) !important; }
.text-muted { color: var(--text-tertiary) !important; }
.badge { font-weight: 600; border-radius: var(--radius-sm); }

.form-control, .form-select {
    border-color: var(--border-strong);
    border-radius: var(--radius-md);
    font-size: var(--fs-base);
    color: var(--text-primary);
    background-color: var(--surface-card);
    min-height: var(--control-h);
}
.form-control:focus, .form-select:focus {
    border-color: var(--primary-color);
    box-shadow: var(--focus-ring);
    background-color: var(--surface-card);
    color: var(--text-primary);
}
.form-check-input:checked { background-color: var(--primary-color); border-color: var(--primary-color); }
.form-check-input:focus { box-shadow: var(--focus-ring); border-color: var(--primary-color); }

.modal-content {
    background: var(--surface-card);
    color: var(--text-primary);
    border: 1px solid var(--border-default);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-lg);
}
.modal-header, .modal-footer { border-color: var(--border-default); }
.modal-title { font-size: var(--fs-lg); font-weight: 700; color: var(--text-strong); }
.modal-backdrop.show { opacity: 0.45; }
[data-theme="dark"] .btn-close { filter: invert(1) grayscale(100%) brightness(200%); }

.dropdown-menu {
    background: var(--surface-card);
    border: 1px solid var(--border-default);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-md);
    font-size: var(--fs-base);
}
.dropdown-item { color: var(--text-primary); }
.dropdown-item:hover, .dropdown-item:focus { background: var(--surface-hover); color: var(--text-strong); }

.table { --bs-table-color: var(--text-primary); --bs-table-bg: transparent; --bs-table-border-color: var(--border-default); font-size: var(--fs-base); }

/* ===== Shared enterprise primitives (opt-in) ===== */
.tk-btn {
    display: inline-flex; align-items: center; justify-content: center; gap: 0.4rem;
    height: var(--control-h); padding: 0 1rem;
    border-radius: var(--radius-md); border: 1px solid transparent;
    font-size: var(--fs-base); font-weight: 600; line-height: 1;
    cursor: pointer; text-decoration: none; white-space: nowrap;
    transition: background-color .15s, border-color .15s, color .15s;
}
.tk-btn-primary { background: var(--primary-color); color: var(--on-primary); }
.tk-btn-primary:hover { background: var(--primary-dark); color: var(--on-primary); }
.tk-btn-secondary { background: var(--surface-card); color: var(--text-primary); border-color: var(--border-strong); }
.tk-btn-secondary:hover { background: var(--surface-hover); color: var(--text-strong); }
.tk-btn-ghost { background: transparent; color: var(--text-secondary); }
.tk-btn-ghost:hover { background: var(--surface-hover); color: var(--text-strong); }
.tk-btn-danger { background: var(--danger-color); color: #fff; }
.tk-btn-danger:hover { background: var(--danger-dark); color: #fff; }

.tk-card {
    background: var(--surface-card);
    border: 1px solid var(--border-default);
    border-radius: var(--radius-lg);
}

.tk-badge {
    display: inline-flex; align-items: center; gap: 4px;
    height: 20px; padding: 0 8px;
    border-radius: var(--radius-sm);
    font-size: var(--fs-xs); font-weight: 600;
    background: var(--surface-sunken); color: var(--text-secondary);
}

/* Brand mark (navy PNG) on dark surfaces */
[data-theme="dark"] .sidebar-brand img,
[data-theme="dark"] .navbar-brand img,
[data-theme="dark"] .booking-brand img,
.footer .footer-brand img { filter: brightness(0) invert(1); opacity: .92; }

/* Business footer fragment */
.biz-footer {
    text-align: center;
    padding: 1.5rem 1rem;
    font-size: var(--fs-xs);
    color: var(--text-tertiary);
    line-height: 1.8;
    border-top: 1px solid var(--border-default);
    margin-top: auto;
    background: transparent;
}
.biz-footer p { margin: 0; }
.biz-footer a { color: var(--text-secondary); text-decoration: none; }
.biz-footer a:hover { color: var(--primary-color); text-decoration: underline; }

@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after { transition: none !important; animation: none !important; }
}
