:root {
    --snk-navy-950: #0d2036;
    --snk-navy-900: #143052;
    --snk-navy-800: #1e3a5f;
    --snk-navy-700: #285178;
    --snk-blue-600: #2f6fa8;
    --snk-blue-100: #eaf3fb;
    --snk-teal-600: #24796f;
    --snk-green-600: #2d7a4f;
    --snk-red-600: #b64343;
    --snk-amber-600: #a56a0a;
    --snk-surface: #ffffff;
    --snk-bg: #f5f7fa;
    --snk-border: #dce3ea;
    --snk-muted: #66788a;
    --snk-text: #1f2d3d;
    --snk-shadow: 0 12px 30px rgba(20, 48, 82, 0.08);
    --snk-radius: 0.9rem;
}

html {
    min-height: 100%;
    background: var(--snk-bg);
}

body {
    min-height: 100vh;
    margin: 0;
    color: var(--snk-text);
    background: var(--snk-bg);
    font-family: "Noto Sans Thai", ui-sans-serif, system-ui, -apple-system, sans-serif;
    font-size: 0.95rem;
    line-height: 1.65;
}

a {
    color: var(--snk-blue-600);
    text-underline-offset: 0.18em;
}

a:hover {
    color: var(--snk-navy-800);
}

.snk-navbar {
    background: linear-gradient(135deg, var(--snk-navy-950), var(--snk-navy-800));
    box-shadow: 0 3px 16px rgba(13, 32, 54, 0.2);
}

.snk-navbar .navbar-brand {
    color: #fff;
    font-weight: 700;
    letter-spacing: 0.01em;
}

.snk-navbar .navbar-brand:hover,
.snk-navbar .navbar-brand:focus {
    color: #fff;
}

.snk-navbar .nav-link {
    color: rgba(255, 255, 255, 0.82);
    border-radius: 0.55rem;
    padding-left: 0.75rem;
    padding-right: 0.75rem;
}

.snk-navbar .nav-link:hover,
.snk-navbar .nav-link:focus,
.snk-navbar .nav-link.active {
    color: #fff;
    background: rgba(255, 255, 255, 0.11);
}

.snk-brand-mark {
    display: inline-grid;
    place-items: center;
    width: 2rem;
    height: 2rem;
    margin-right: 0.55rem;
    border: 1px solid rgba(255, 255, 255, 0.28);
    border-radius: 0.65rem;
    background: rgba(255, 255, 255, 0.12);
    font-size: 0.82rem;
    font-weight: 800;
}

.snk-page-shell {
    padding-top: 1.5rem;
    padding-bottom: 2.5rem;
}

.snk-page-title {
    margin-bottom: 0.25rem;
    color: var(--snk-navy-950);
    font-size: clamp(1.45rem, 2vw, 2rem);
    font-weight: 750;
    letter-spacing: -0.015em;
}

.snk-page-subtitle {
    margin-bottom: 0;
    color: var(--snk-muted);
}

.snk-card {
    border: 1px solid var(--snk-border);
    border-radius: var(--snk-radius);
    background: var(--snk-surface);
    box-shadow: var(--snk-shadow);
}

.snk-card .card-header {
    border-bottom: 1px solid var(--snk-border);
    border-top-left-radius: var(--snk-radius);
    border-top-right-radius: var(--snk-radius);
    background: #fff;
    color: var(--snk-navy-900);
    font-weight: 700;
}

.snk-section-title {
    margin: 0;
    color: var(--snk-navy-900);
    font-size: 1.03rem;
    font-weight: 700;
}

.snk-stat-card {
    position: relative;
    min-height: 9.2rem;
    overflow: hidden;
    border: 1px solid var(--snk-border);
    border-radius: var(--snk-radius);
    background: #fff;
    box-shadow: var(--snk-shadow);
}

.snk-stat-card::after {
    position: absolute;
    top: -2.4rem;
    right: -2.4rem;
    width: 7rem;
    height: 7rem;
    border-radius: 50%;
    background: var(--snk-blue-100);
    content: "";
}

.snk-stat-card .snk-stat-label {
    position: relative;
    z-index: 1;
    color: var(--snk-muted);
    font-size: 0.82rem;
    font-weight: 650;
    letter-spacing: 0.025em;
    text-transform: uppercase;
}

.snk-stat-card .snk-stat-value {
    position: relative;
    z-index: 1;
    margin-top: 0.45rem;
    color: var(--snk-navy-950);
    font-size: clamp(1.75rem, 3vw, 2.55rem);
    font-weight: 800;
    line-height: 1.15;
}

.snk-stat-card .snk-stat-note {
    position: relative;
    z-index: 1;
    margin-top: 0.5rem;
    color: var(--snk-muted);
    font-size: 0.82rem;
}

.snk-hero {
    overflow: hidden;
    border-radius: 1.2rem;
    background: linear-gradient(135deg, var(--snk-navy-950) 0%, var(--snk-navy-700) 68%, #357caf 100%);
    color: #fff;
    box-shadow: 0 18px 42px rgba(13, 32, 54, 0.18);
}

.snk-hero h1,
.snk-hero h2,
.snk-hero p {
    color: inherit;
}

.snk-hero .snk-hero-kicker {
    color: rgba(255, 255, 255, 0.78);
    font-size: 0.82rem;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
}

.snk-hero .btn-light {
    color: var(--snk-navy-900);
    font-weight: 700;
}

.btn-snk-primary {
    --bs-btn-color: #fff;
    --bs-btn-bg: var(--snk-navy-800);
    --bs-btn-border-color: var(--snk-navy-800);
    --bs-btn-hover-color: #fff;
    --bs-btn-hover-bg: var(--snk-navy-950);
    --bs-btn-hover-border-color: var(--snk-navy-950);
    --bs-btn-focus-shadow-rgb: 30, 58, 95;
    --bs-btn-active-color: #fff;
    --bs-btn-active-bg: var(--snk-navy-950);
    --bs-btn-active-border-color: var(--snk-navy-950);
}

.btn-snk-outline {
    --bs-btn-color: var(--snk-navy-800);
    --bs-btn-border-color: #aebdcb;
    --bs-btn-hover-color: #fff;
    --bs-btn-hover-bg: var(--snk-navy-800);
    --bs-btn-hover-border-color: var(--snk-navy-800);
}

.form-label {
    margin-bottom: 0.38rem;
    color: #314458;
    font-weight: 650;
}

.form-control,
.form-select {
    min-height: 2.7rem;
    border-color: #ccd6df;
    border-radius: 0.62rem;
}

textarea.form-control {
    min-height: 6.5rem;
}

.form-control:focus,
.form-select:focus {
    border-color: #7da7cc;
    box-shadow: 0 0 0 0.2rem rgba(47, 111, 168, 0.14);
}

.form-control[readonly],
.form-control:disabled,
.form-select:disabled {
    background: #f3f6f8;
}

.snk-required::after {
    margin-left: 0.2rem;
    color: #b64343;
    content: "*";
}

.snk-help {
    color: var(--snk-muted);
    font-size: 0.8rem;
}

.snk-form-section {
    margin-bottom: 1.25rem;
    border: 1px solid var(--snk-border);
    border-radius: var(--snk-radius);
    background: #fff;
    box-shadow: 0 8px 24px rgba(20, 48, 82, 0.05);
}

.snk-form-section-header {
    padding: 1rem 1.15rem;
    border-bottom: 1px solid var(--snk-border);
    color: var(--snk-navy-900);
    font-weight: 750;
}

.snk-form-section-body {
    padding: 1.15rem;
}

.snk-table-wrap {
    border: 1px solid var(--snk-border);
    border-radius: var(--snk-radius);
    background: #fff;
    box-shadow: var(--snk-shadow);
}

.table.snk-table {
    margin-bottom: 0;
}

.table.snk-table > :not(caption) > * > * {
    padding: 0.8rem 0.75rem;
    border-bottom-color: #e6ebf0;
    vertical-align: middle;
}

.table.snk-table thead th {
    color: #405267;
    background: #f4f7fa;
    font-size: 0.82rem;
    font-weight: 750;
    white-space: nowrap;
}

.snk-badge-role,
.snk-badge-status {
    display: inline-flex;
    align-items: center;
    gap: 0.3rem;
    padding: 0.32rem 0.62rem;
    border-radius: 999px;
    font-size: 0.76rem;
    font-weight: 700;
}

.snk-badge-role {
    color: var(--snk-navy-800);
    background: var(--snk-blue-100);
}

.snk-badge-active {
    color: #155d38;
    background: #e7f6ed;
}

.snk-badge-inactive {
    color: #8b4d09;
    background: #fff2dd;
}

.snk-badge-danger {
    color: #8f2f2f;
    background: #fdeaea;
}

.snk-info-list {
    margin: 0;
}

.snk-info-list dt {
    color: var(--snk-muted);
    font-size: 0.79rem;
    font-weight: 650;
}

.snk-info-list dd {
    margin-bottom: 1rem;
    color: var(--snk-text);
    font-weight: 500;
    overflow-wrap: anywhere;
}

.snk-map-placeholder,
.snk-chart-placeholder {
    display: grid;
    min-height: 20rem;
    place-items: center;
    border: 1px dashed #aab9c8;
    border-radius: 0.85rem;
    background: linear-gradient(135deg, #f7fafc, #eef4f9);
    color: var(--snk-muted);
    text-align: center;
}

.snk-map-placeholder {
    min-height: 23rem;
}

.snk-chart-placeholder .snk-placeholder-inner,
.snk-map-placeholder .snk-placeholder-inner {
    max-width: 26rem;
    padding: 2rem;
}

.snk-captcha-box {
    display: inline-flex;
    min-height: 4.2rem;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    border: 1px solid #bdc9d4;
    border-radius: 0.7rem;
    background: #f8f9fa;
}

.snk-captcha-box img {
    display: block;
    max-width: 100%;
    height: auto;
}

.snk-auth-shell {
    max-width: 52rem;
    margin-right: auto;
    margin-left: auto;
}

.snk-login-shell {
    max-width: 31rem;
    margin-right: auto;
    margin-left: auto;
}

.snk-auth-card {
    border: 1px solid var(--snk-border);
    border-radius: 1rem;
    background: #fff;
    box-shadow: 0 18px 50px rgba(20, 48, 82, 0.12);
}

.snk-auth-heading {
    color: var(--snk-navy-950);
    font-weight: 800;
}

.snk-divider-label {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    color: var(--snk-muted);
    font-size: 0.82rem;
}

.snk-divider-label::before,
.snk-divider-label::after {
    flex: 1;
    border-top: 1px solid var(--snk-border);
    content: "";
}

.snk-note {
    border-left: 4px solid var(--snk-blue-600);
    border-radius: 0.5rem;
    background: #edf5fb;
    color: #365570;
    padding: 0.85rem 1rem;
}

.snk-note-warning {
    border-left-color: var(--snk-amber-600);
    background: #fff8e9;
    color: #79510a;
}

.snk-note-danger {
    border-left-color: var(--snk-red-600);
    background: #fff0f0;
    color: #8f3232;
}

.snk-footer {
    border-top: 1px solid var(--snk-border);
    background: #fff;
    color: var(--snk-muted);
}

.snk-sticky-actions {
    position: sticky;
    bottom: 0;
    z-index: 20;
    margin-right: -0.25rem;
    margin-left: -0.25rem;
    padding: 0.85rem 0.25rem;
    background: linear-gradient(to top, rgba(245, 247, 250, 1) 72%, rgba(245, 247, 250, 0));
}

.snk-empty-state {
    padding: 3rem 1.25rem;
    color: var(--snk-muted);
    text-align: center;
}

.snk-filter-bar {
    border: 1px solid var(--snk-border);
    border-radius: var(--snk-radius);
    background: #fff;
    padding: 1rem;
}

.snk-metric-mini {
    border-left: 3px solid var(--snk-blue-600);
    padding-left: 0.8rem;
}

.snk-metric-mini .label {
    color: var(--snk-muted);
    font-size: 0.78rem;
}

.snk-metric-mini .value {
    color: var(--snk-navy-900);
    font-size: 1.05rem;
    font-weight: 750;
}

.snk-preline {
    white-space: pre-line;
}

.snk-word-break {
    overflow-wrap: anywhere;
    word-break: break-word;
}

@media (max-width: 767.98px) {
    .snk-page-shell {
        padding-top: 1rem;
        padding-bottom: 1.75rem;
    }

    .snk-card,
    .snk-form-section,
    .snk-table-wrap,
    .snk-auth-card {
        border-radius: 0.75rem;
    }

    .snk-map-placeholder,
    .snk-chart-placeholder {
        min-height: 15rem;
    }

    .snk-table-wrap {
        overflow-x: auto;
    }
}

@media print {
    .snk-no-print,
    .navbar,
    .snk-footer {
        display: none !important;
    }

    body {
        background: #fff;
    }

    .snk-page-shell {
        padding: 0;
    }

    .snk-card,
    .snk-table-wrap,
    .snk-form-section {
        border-color: #bbb;
        box-shadow: none;
    }
}

/* =====================================================================
   PHASE 6 - FRONT-END INTEGRATION
   ===================================================================== */

.snk-leaflet-map {
    width: 100%;
    min-height: 390px;
    border: 1px solid #dce6ef;
    border-radius: 14px;
    overflow: hidden;
    background: #eef5fa;
}

#snk-health-form-map.snk-leaflet-map {
    min-height: 430px;
}

#snk-health-detail-map.snk-leaflet-map {
    min-height: 300px;
}

.snk-chart-live {
    position: relative;
    min-height: 320px;
    width: 100%;
}

.snk-chart-live canvas {
    width: 100% !important;
    height: 320px !important;
}

.dataTables_wrapper .dt-buttons,
.dt-container .dt-buttons {
    display: flex;
    flex-wrap: wrap;
    gap: .4rem;
}

.dataTables_wrapper .dataTables_filter input,
.dt-container .dt-search input,
.dataTables_wrapper .dataTables_length select,
.dt-container .dt-length select {
    border-color: #cddbe7;
    border-radius: .55rem;
}

.dataTables_wrapper .dataTables_paginate .paginate_button,
.dt-container .dt-paging .dt-paging-button {
    border-radius: .45rem !important;
}

.snk-table .btn-sm {
    white-space: nowrap;
}

.snk-runtime-invalid-feedback {
    display: block;
}

.snk-captcha-box img {
    display: block;
    max-width: 100%;
    height: auto;
}

.leaflet-popup-content {
    min-width: 170px;
    line-height: 1.45;
}

.marker-cluster-small,
.marker-cluster-medium,
.marker-cluster-large {
    background-color: rgba(47, 128, 193, .22);
}

.marker-cluster-small div,
.marker-cluster-medium div,
.marker-cluster-large div {
    background-color: rgba(36, 95, 144, .86);
    color: #fff;
}

.swal2-container {
    z-index: 20000;
}

@media (max-width: 767.98px) {
    .snk-leaflet-map,
    #snk-health-form-map.snk-leaflet-map {
        min-height: 330px;
    }

    .snk-chart-live,
    .snk-chart-live canvas {
        min-height: 280px;
        height: 280px !important;
    }

    .dt-container .dt-search,
    .dt-container .dt-length,
    .dataTables_wrapper .dataTables_filter,
    .dataTables_wrapper .dataTables_length {
        text-align: left !important;
        margin-top: .5rem;
    }
}

@media print {
    .dt-buttons,
    .dt-search,
    .dt-length,
    .dt-paging,
    .dt-info,
    .leaflet-control-container {
        display: none !important;
    }
}

/* ---------- ปุ่มใน popup ของหมุดบนแผนที่ (ใช้ร่วมทุกแผนที่) ---------- */
.snk-pop-actions{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin-top:8px}
.snk-pop-actions a{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;font-weight:600;text-decoration:none;padding:5px 10px;border-radius:8px;border:1px solid var(--sh-border,#d8ece9);background:#fff;color:var(--sh-fg,#0f1a18);line-height:1.2}
.snk-pop-actions a:hover{background:var(--sh-muted,#e9f6f4)}
.snk-pop-actions a svg{width:13px;height:13px;flex:none;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.snk-pop-track{background:var(--sh-primary,#17b3a6) !important;border-color:var(--sh-primary,#17b3a6) !important;color:var(--sh-primary-fg,#fff) !important}
.snk-pop-track:hover{background:var(--sh-primary-hover,#0fa093) !important;border-color:var(--sh-primary-hover,#0fa093) !important}
