/* New York dashboard/sidebar composition, adapted to the existing Flask controls. */
:root{--background:#f7f7f5;--foreground:#18181b;--card:#fff;--muted:#f4f4f5;--muted-foreground:#71717a;--primary:#18181b;--primary-foreground:#fff;--border:#e4e4e7;--ring:#a1a1aa;--destructive:#b91c1c;--sidebar-width:256px;--header-height:64px;--bg-page:var(--background);--bg-surface:var(--card);--text-primary:var(--foreground);--text-secondary:var(--muted-foreground);--text-muted:var(--muted-foreground);--color-primary:var(--primary);--color-primary-hover:#3f3f46;--border-color:var(--border);--radius:12px;--shadow:0 1px 2px #00000005}
body{background:var(--background);color:var(--foreground);font-size:14px;padding-top:0}
.navbar.topbar{left:calc(var(--sidebar-width) + 8px);right:8px;top:8px;height:var(--header-height);padding:0 24px;display:flex;gap:16px;justify-content:flex-start;background:var(--card)!important;border:1px solid var(--border);border-bottom:1px solid var(--border);border-radius:12px 12px 0 0;box-shadow:none;color:var(--foreground)}
.workspace-tools{margin-left:auto;display:flex;align-items:center;gap:16px}.workspace-tools #current-time{color:var(--muted-foreground);font-size:12px}.breadcrumb-brand,.breadcrumb-divider{color:var(--muted-foreground)}
.sidebar-wrapper{top:0;bottom:0;width:var(--sidebar-width);padding:24px 12px 12px;background:var(--background);border:0;display:flex;flex-direction:column;box-shadow:none}
.sidebar-header{display:flex;gap:10px;align-items:center;padding:0 8px 28px;border:0;margin:0}.workspace-mark,.admin-avatar{display:grid;place-items:center;flex-shrink:0;width:36px;height:36px;border-radius:9px;background:var(--primary);color:var(--primary-foreground)}
.workspace-identity{display:grid;gap:2px}.workspace-identity small{font-size:11px;color:var(--muted-foreground)}.workspace-identity strong{font-size:14px}.sidebar-section-label{padding:0 12px 8px;font-size:11px;color:var(--muted-foreground)}
.sidebar-nav .nav-link{display:flex;align-items:center;gap:12px;min-height:42px;padding:10px 12px;margin:3px 0;border-radius:7px;color:#52525b;border:0;font-size:13px;font-weight:500;white-space:nowrap}
.sidebar-nav .nav-link.active,.sidebar-nav .nav-link:hover{background:#e9e9e7;color:var(--foreground);box-shadow:none}.sidebar-nav .nav-link.active::before{display:none}.sidebar-nav .nav-link i{color:inherit!important}
.sidebar-footer{position:static;margin-top:auto;padding:16px 8px 0;display:flex;align-items:center;gap:10px;border-top:1px solid var(--border);color:var(--foreground)}.admin-avatar{background:#e4e4e7;color:#3f3f46}
.main-content{margin:8px 8px 8px calc(var(--sidebar-width) + 8px);padding:88px 24px 24px;min-height:calc(100vh - 16px);background:var(--card);border:1px solid var(--border);border-radius:12px;min-width:0}
.workspace-heading{display:flex;justify-content:space-between;align-items:center;margin:0 0 24px}.workspace-heading p{color:var(--muted-foreground);font-size:12px;margin:0 0 6px}.workspace-heading h1{font-size:26px;font-weight:650;letter-spacing:-.7px;margin-bottom:8px}.workspace-heading span{color:var(--muted-foreground);font-size:13px}.workspace-badge{border:1px solid var(--border);padding:5px 10px;border-radius:6px}
.card{background:var(--card);border:1px solid var(--border)!important;border-radius:12px;box-shadow:var(--shadow);overflow:hidden}.card:hover{transform:none;box-shadow:var(--shadow)}.card-body{padding:24px}.card-header,.card-header-gradient{padding:18px 24px;background:var(--card)!important;color:var(--foreground)!important;border-bottom:1px solid var(--border)}.card-header h5{font-size:15px;font-weight:600}.stat-card h6{font-size:12px;color:var(--muted-foreground)}.stat-card h2{color:var(--foreground)!important;font-size:32px;letter-spacing:-1px;font-variant-numeric:tabular-nums}
.unified-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-bottom:16px}.unified-metrics .card{background:linear-gradient(to top,#fafafa,var(--card))}.unified-metrics .card-body{display:grid;gap:12px}.unified-metrics span,.unified-metrics small{font-size:12px;color:var(--muted-foreground)}.unified-metrics strong{font-size:30px;line-height:1.3;font-variant-numeric:tabular-nums}.unified-metrics a{font-size:12px;color:var(--foreground);text-decoration:none}
.btn{border-radius:7px;font-size:13px;font-weight:500;min-height:36px;box-shadow:0 1px 2px #00000005;display:inline-flex;align-items:center;justify-content:center;gap:6px}.btn-primary,.btn-success{background:var(--primary);border-color:var(--primary);color:var(--primary-foreground)}.btn-primary:hover,.btn-success:hover{background:#3f3f46;border-color:#3f3f46}.btn-outline-secondary{color:var(--foreground);border-color:var(--border);background:var(--card)}.btn-outline-secondary:hover{background:var(--muted);color:var(--foreground);border-color:var(--border)}.btn-warning{background:#fffbeb;color:#92400e;border-color:#fde68a}.btn-danger{background:#fef2f2;color:var(--destructive);border-color:#fecaca}
.form-control,.form-select,.multiselect-toggle{border-radius:7px;border-color:var(--border);font-size:13px;min-height:36px}.form-control:focus,.form-select:focus{border-color:var(--ring);box-shadow:0 0 0 3px #a1a1aa33}.table{--bs-table-color:var(--foreground);--bs-table-border-color:var(--border);font-size:13px}.table thead th{background:var(--muted)!important;color:var(--muted-foreground)!important;font-weight:500;border-bottom:1px solid var(--border)}.table td,.table th{padding:12px 16px}.badge{border-radius:6px;font-weight:500}.progress{background:var(--muted);border-radius:5px}.progress-bar{background:#52525b}.nav-tabs{border-color:var(--border)}.nav-tabs .nav-link{color:var(--muted-foreground)}.nav-tabs .nav-link.active{color:var(--foreground);font-weight:600}.modal-content{border:1px solid var(--border);border-radius:12px}.modal-header{background:var(--card);color:var(--foreground)}
svg.workspace-icon{width:18px;height:18px;stroke:currentColor;stroke-width:1.8;fill:none;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}button:focus-visible,a:focus-visible,summary:focus-visible{outline:2px solid var(--ring);outline-offset:3px}
body.sidebar-collapsed{--sidebar-width:72px}body.sidebar-collapsed .sidebar-wrapper .workspace-identity,body.sidebar-collapsed .sidebar-section-label,body.sidebar-collapsed .sidebar-wrapper .nav-link span{display:none}body.sidebar-collapsed .sidebar-header{padding-left:6px}body.sidebar-collapsed .sidebar-wrapper .nav-link{justify-content:center;padding:10px}
#scan-tab{--bg:var(--background);--surface:var(--card);--surface-2:#f4f4f5;--surface-3:#e4e4e7;--line:var(--border);--line-soft:var(--border);--text:var(--foreground);--text-2:#52525b;--muted:#71717a;--brand:#18181b;--brand-soft:#f4f4f5;--good:#15803d;--good-soft:#f0fdf4;--warning:#a16207;--warning-soft:#fffbeb;--bad:#b91c1c;--bad-soft:#fef2f2;--info:#0369a1;color:var(--foreground)}
#scan-tab .scan-main{padding:20px 0 0;max-width:none}#scan-tab .surface{background:var(--card);border-color:var(--border);border-radius:12px}#scan-tab .scan-toolbar{display:flex;gap:12px;align-items:center;justify-content:flex-end}#scan-tab .button-ghost,#scan-tab .icon-button{background:#fff;color:#18181b;border-color:var(--border)}#scan-tab .connection-pill{font-size:12px}#scan-tab .connection-pill.is-online{color:#15803d}#scan-tab .connection-pill.is-offline{color:#b91c1c}#scan-tab .status-board{background:#fafafa}#scan-tab .phone-card,#scan-tab .task-card{background:#fff}#scan-tab .page-heading h1{font-size:26px}#scan-tab .section-heading h2{font-size:15px}#scan-tab .logs{background:#fafafa;color:#52525b}#scan-tab .log-entry{color:inherit}
@media(max-width:1100px){.unified-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.workspace-tools #current-time{display:none}}
@media(max-width:900px), (max-height:500px) and (pointer:coarse){body{padding-top:0}.navbar.topbar{left:0;right:0;top:0;border-radius:0;padding:0 16px;padding-top:env(safe-area-inset-top);height:calc(64px + env(safe-area-inset-top));gap:10px}.breadcrumb-brand,.breadcrumb-divider{display:none}.workspace-tools .btn span{display:none}.sidebar-wrapper{display:none;top:calc(64px + env(safe-area-inset-top));width:256px!important;z-index:1040;border-right:1px solid var(--border);box-shadow:12px 0 40px #0002}.sidebar-mobile-open .sidebar-wrapper{display:flex}.main-content{margin:0;padding:calc(88px + env(safe-area-inset-top)) 16px calc(88px + env(safe-area-inset-bottom));border:0;border-radius:0}.card-body{padding:18px}.workspace-heading h1{font-size:24px}.workspace-heading>span{display:none}.unified-metrics{gap:12px}.unified-metrics strong{font-size:26px}.mobile-bottom-nav{background:#fff;border-top:1px solid var(--border)}.mobile-bottom-nav .nav-link{font-size:11px;min-height:44px}.btn{min-height:44px}#scan-tab .scan-toolbar{flex-wrap:wrap;justify-content:flex-start}#scan-tab .scan-main{padding-top:20px}body.sidebar-collapsed .sidebar-wrapper .workspace-identity,body.sidebar-collapsed .sidebar-wrapper .nav-link span{display:initial}}
@media(prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}
#scan-tab .daily-strip{background:#f4f4f5}#scan-tab .text-button,#scan-tab .log-summary>span{color:#52525b}#scan-tab .scan-item{background:#fff}#scan-tab .status-pending,#scan-tab .scan-warning-text{color:#92400e}#scan-tab .status-online,#scan-tab .status-completed,#scan-tab .scan-inline-button.is-success{color:#15803d}#scan-tab .status-assigned,#scan-tab .status-dispatching,#scan-tab .scan-item-meta.is-active{color:#0369a1}#scan-tab .status-failed,#scan-tab .status-offline,#scan-tab .scan-inline-button.is-danger{color:#b91c1c}#scan-tab .scan-inline-button:hover{color:#18181b;background:#e4e4e7}.btn-info{background:#f4f4f5;border-color:#e4e4e7;color:#18181b}.dashboard-download-summary .card-body{text-align:left!important;align-items:flex-start}.dashboard-download-summary{margin-top:0!important}.dashboard-download-summary .stat-card{background:linear-gradient(to top,#fafafa,#fff)}
@media(max-width:900px), (max-height:500px) and (pointer:coarse){.mobile-bottom-nav{left:0!important;right:0!important;bottom:0!important;width:100%!important;border-radius:0!important;box-shadow:none!important;padding-bottom:env(safe-area-inset-bottom)!important}#scan-tab .scan-inline-button{min-height:44px}}

.btn-outline-primary{--bs-btn-color:#18181b;--bs-btn-border-color:#e4e4e7;--bs-btn-hover-bg:#f4f4f5;--bs-btn-hover-color:#18181b;--bs-btn-hover-border-color:#d4d4d8}.overview-legend{display:flex;gap:16px;flex-wrap:wrap;font-size:12px;color:#71717a}.overview-legend span::before{content:"";display:inline-block;width:8px;height:8px;margin-right:6px;border-radius:2px;background:var(--legend-color)}

/* Chart.js owns the backing dimensions; never stretch this canvas via global chart rules. */
.overview-chart-container{position:relative;height:260px;min-width:0}
#overview-chart{display:block;width:100%!important;height:100%!important;min-height:0!important;max-height:none!important}
.overview-legend{font-size:13px;font-weight:500;color:#3f3f46;gap:10px 20px;line-height:1.6}
.overview-legend [hidden]{display:none!important}
@media(max-width:900px), (max-height:500px) and (pointer:coarse){.overview-chart-container{height:240px}}

/* Unified mobile workspace: navigation, safe areas and touch controls. */
.sidebar-backdrop {display:none}
@media(max-width:900px), (max-height:500px) and (pointer:coarse) {
 .navbar.topbar {margin:0;padding-left:max(12px,env(safe-area-inset-left));padding-right:max(12px,env(safe-area-inset-right))}
 #workspace-title {min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px}
 .workspace-tools {flex-shrink:0}
 .navbar.topbar .btn {min-width:44px}
 .main-content {padding-left:max(12px,env(safe-area-inset-left));padding-right:max(12px,env(safe-area-inset-right))}
 .mobile-bottom-nav {height:calc(var(--mobile-nav-height) + env(safe-area-inset-bottom));padding-left:max(6px,env(safe-area-inset-left));padding-right:max(6px,env(safe-area-inset-right));backdrop-filter:none}
 .mobile-bottom-nav .nav-link {margin:0;border:0;background:transparent;color:#52525b;min-width:0;gap:4px}
 .mobile-bottom-nav .nav-link.active {color:#18181b;background:#f4f4f5;box-shadow:none}
 .sidebar-mobile-open {overflow:hidden}
 .sidebar-backdrop:not([hidden]) {display:block;position:fixed;inset:calc(64px + env(safe-area-inset-top)) 0 0;border:0;background:#18181b66;z-index:1039}
 .sidebar-wrapper {overflow-y:auto;overscroll-behavior:contain;padding-bottom:max(16px,env(safe-area-inset-bottom));max-width:calc(100vw - 48px)}
 .sidebar-wrapper .nav-link {min-height:44px}
 .form-control,.form-select,.multiselect-trigger,.multiselect-toggle {min-height:44px;font-size:16px}
 .btn-sm,.stats-sub-tabs .nav-link,.mobile-chart-expand,.log-level-filter .btn {min-height:44px}
 .modal-dialog {max-height:var(--app-viewport-height,100dvh);min-height:0;margin:10px auto;width:calc(100% - 20px)}
 .modal-content {max-height:calc(var(--app-viewport-height,100dvh) - 20px);min-height:0}
 .modal-body {min-height:0;overscroll-behavior:contain}
 .modal-header,.modal-footer {flex-shrink:0}
 .modal-header .btn-close {min-width:44px;min-height:44px;padding:0;margin:0}
 #scan-tab .connection-pill {width:auto;max-width:100%;min-height:44px;padding:8px 10px;white-space:normal}
 #scan-tab .scan-toolbar {gap:8px}
 #scan-tab .scan-task-actions {flex-wrap:wrap}
 #scan-tab .button,#scan-tab .icon-button,#scan-tab .text-button,#scan-tab .log-toolbar input,#scan-tab .log-toolbar select {min-height:44px}
 #scan-tab .log-toolbar input,#scan-tab .log-toolbar select {font-size:16px}
 #scan-tab .failed-list {grid-template-columns:1fr}
 #scan-tab .toast-region {bottom:calc(var(--mobile-nav-height) + env(safe-area-inset-bottom) + 12px);left:12px;right:12px;z-index:1050}
 #scan-tab .toast {min-width:0;max-width:100%}
}

@media(max-width:600px) {
 .dashboard-download-summary {display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-left:0;margin-right:0}
 .dashboard-download-summary > .col-12 {width:auto;padding:0;margin:0}
 .dashboard-download-summary > .col-12:last-child {grid-column:1 / -1}
 .dashboard-download-summary .card-body {padding:14px;min-width:0}
 .dashboard-download-summary .stat-card h2 {font-size:28px}
 .dashboard-download-summary h6 {font-size:12px;line-height:1.5}
 .dashboard-download-summary small {font-size:12px;overflow-wrap:anywhere}
 .unified-metrics .card-body {padding:14px}
}

@media(max-width:900px), (max-height:500px) and (pointer:coarse) {
 #scan-tab .connection-pill span:last-child {display:inline}
}

img.workspace-mark{object-fit:contain;background:transparent;border-radius:0}

/* Quiet log surface with readable level colors in the light workspace. */
#log-container {background:#fafafa!important;color:#3f3f46;border:1px solid var(--border);scrollbar-color:#d4d4d8 #fafafa}
#log-container .log-line {border-bottom-color:#e4e4e7}
#log-container .log-info {color:#3f3f46}
#log-container .log-debug,#log-container .log-empty {color:#71717a}
#log-container .log-warning {color:#92400e}
#log-container .log-error {color:#b91c1c}
#log-container::-webkit-scrollbar-track {background:#fafafa}
#log-container::-webkit-scrollbar-thumb {background:#d4d4d8}
#log-container::-webkit-scrollbar-thumb:hover {background:#a1a1aa}
#scan-tab .logs {border-color:var(--border);scrollbar-color:#d4d4d8 #fafafa}
#scan-tab .log-entry {border-bottom-color:#e4e4e7}
#scan-tab .log-info {color:#3f3f46}
#scan-tab .log-warning {color:#92400e}
#scan-tab .log-error {color:#b91c1c}
.cache115-status-card h5 {font-size:15px;font-weight:600}
#cache115-download-status {display:flex;align-items:center;flex-wrap:wrap;gap:8px 12px;min-width:0;overflow-wrap:anywhere}
#cache115-download-status small {margin-top:0!important}
#groups-tab .table { --bs-table-bg: #fff; }
#groups-table-body > tr,
#groups-table-body > tr:hover,
#groups-table-body > tr > td {
    background-color: #fff !important;
    box-shadow: none;
}
#basic-stats-panel .basic-summary-strip {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 1px;
    background: var(--border);
    border: 1px solid var(--border);
    border-radius: 10px;
    overflow: hidden;
}
.basic-summary-item { padding: 12px; background: var(--card); min-width: 0; }
.basic-summary-item > span, .basic-summary-item > small { display: block; color: var(--muted-foreground); font-size: 12px; }
.basic-summary-item > strong { display: block; margin-top: 4px; font-size: 18px; font-weight: 600; overflow-wrap: anywhere; }
.basic-summary-item > small { margin-top: 4px; font-size: 11px; }

.dashboard-control-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;align-items:stretch}
.dashboard-control-grid>.card{min-width:0;margin-bottom:0!important}
.dashboard-control-grid .btn-group-custom{flex-wrap:wrap}
@media(max-width:767px){.dashboard-control-grid{grid-template-columns:1fr}}

/* Both service cards share header, status and action row baselines. */
.dashboard-control-grid{row-gap:0}
.dashboard-control-grid>.card{display:grid;grid-template-rows:subgrid;grid-row:span 3;overflow:hidden}
.dashboard-control-grid>.card>.card-body{display:grid;grid-template-rows:subgrid;grid-row:span 2;padding:16px 20px 20px}
.dashboard-control-grid .card-header{padding:16px 20px}
.dashboard-control-grid .control-status-row{display:flex;align-items:center;flex-wrap:wrap;gap:8px;min-height:32px;margin-bottom:12px}
.dashboard-control-grid .control-status-row>span{margin:0!important}
.dashboard-control-grid .control-section{padding:12px 0;margin:0;border:0;align-self:start}
.dashboard-control-grid .control-section-label{margin-bottom:8px;line-height:20px}
.dashboard-control-grid .btn-group-custom{gap:8px;align-items:stretch}
.dashboard-control-grid .btn-group-custom .btn{min-height:40px;margin:0}
.program-update-toggle{display:inline-flex;align-items:center;gap:6px;margin:0 0 0 12px;min-height:32px;font-size:12px;color:var(--muted-foreground);cursor:pointer}
#program-update-cancel[hidden],#program-update-status[hidden]{display:none!important}
@media(max-width:900px){.program-update-toggle{min-height:44px}}
@media(max-width:767px){
 .dashboard-control-grid{row-gap:16px}
 .dashboard-control-grid>.card,.dashboard-control-grid>.card>.card-body{display:block;grid-row:auto}
 .dashboard-control-grid .btn-group-custom .btn{min-height:44px}
}

#overview-range{padding-right:2.5rem;flex-shrink:0}
.dashboard-secondary-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;align-items:stretch}
.dashboard-secondary-grid>.card{min-width:0;margin-bottom:0!important}
.dashboard-secondary-grid .card-header{padding:16px 20px}
.dashboard-secondary-grid .card-body{padding:16px 20px 20px}
.dashboard-secondary-grid .control-section{padding:0;border:0}
.dashboard-secondary-grid .btn-group-custom{flex-wrap:wrap;gap:8px}
.dashboard-secondary-grid .btn{min-height:40px}
@media(max-width:767px){.dashboard-secondary-grid{grid-template-columns:1fr}.dashboard-secondary-grid .btn{min-height:44px}}

#stats-tab .btn-group { flex-wrap: wrap; }
#stats-tab .statistics-toolbar { flex-wrap: wrap; }
#stats-tab canvas { max-height: 340px; }
#stats-tab .statistics-rank-table { min-width: 850px; }
#stats-tab .small { overflow-wrap: anywhere; }

#stats-tab .card-body:has(> canvas) { height: 320px; }
.statistics-resource-chart { position: relative; height: 320px; min-width: 0; }
.statistics-resource-chart > canvas { display: block; width: 100% !important; height: 100% !important; min-height: 0 !important; max-height: none !important; }
@media (max-width: 900px) { .statistics-resource-chart { height: 260px; } }
.mobile-chart-viewer .card-body > .row:has(> .statistics-resource-chart) { height: 100%; }
.mobile-chart-viewer .statistics-resource-chart { flex: 0 0 50%; max-width: 50%; height: 100%; }
#stats-tab button { white-space: nowrap; }
#stats-tab button[onclick="refreshStatisticsNow()"] { flex-shrink: 0; }

@media (max-width: 575px) {
    #basic-stats-panel .basic-summary-item { padding: 10px 6px; }
    #basic-stats-panel .basic-summary-item > span { font-size: 11px; }
}
