:root{
  --bg:#f4f6fb; --panel:#fff; --ink:#1a2233; --muted:#6b7384;
  --brand:#1e6fdb; --brand-dark:#144a94; --ok:#1aab60; --warn:#d97706; --err:#dc2626;
  --border:#e4e8ef; --radius:10px;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0;background:var(--bg);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:14px;line-height:1.5}
h1{font-size:22px;margin:0 0 16px}
h2{font-size:17px;margin:24px 0 12px}
a{color:var(--brand);text-decoration:none}
a:hover{text-decoration:underline}
.muted{color:var(--muted)}
.small{font-size:12px}
code{background:#eef2f8;padding:2px 6px;border-radius:4px;font-size:12px}

.sidebar{position:fixed;inset:0 auto 0 0;width:240px;background:#0f1a2e;color:#e8edf7;padding:20px 16px;display:flex;flex-direction:column}
.sidebar .brand{font-weight:700;font-size:18px;margin-bottom:28px}
.sidebar .brand span{display:block;font-size:11px;color:#7f8da8;letter-spacing:1px;text-transform:uppercase}
.sidebar nav{display:flex;flex-direction:column;gap:4px;flex:1}
.sidebar nav a{color:#c1cbe0;padding:10px 12px;border-radius:8px}
.sidebar nav a:hover{background:#18253e;text-decoration:none}
.sidebar nav a.active{background:var(--brand);color:#fff}
.logout{display:flex;flex-direction:column;gap:8px;margin-top:16px;border-top:1px solid #1b2a47;padding-top:16px}
.logout .me{font-size:13px}
.logout .me small{display:block;color:#7f8da8;font-size:11px}
.logout button{background:transparent;border:1px solid #2a3b5e;color:#c1cbe0;padding:8px;border-radius:6px;cursor:pointer}
.logout button:hover{background:#18253e}

main.with-sidebar{margin-left:240px;padding:28px 36px;min-height:100vh}
main.full{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:20px}

/* Project sub-sidebar (объект дотор) */
.project-sidebar{position:fixed;left:240px;top:0;bottom:0;width:220px;background:#fff;border-right:1px solid var(--border);display:flex;flex-direction:column;transition:width .2s,transform .2s;z-index:5;overflow:hidden}
.project-sidebar.collapsed{width:54px}
.project-sidebar-head{display:flex;align-items:center;gap:8px;padding:14px 12px;border-bottom:1px solid var(--border)}
.back-link{font-size:18px;color:var(--muted);width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;border-radius:6px;text-decoration:none}
.back-link:hover{background:#f0f4fa;color:var(--ink);text-decoration:none}
.project-sidebar-title{flex:1;min-width:0;line-height:1.2}
.project-sidebar-title strong{display:block;font-size:13px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.project-sidebar-title small{display:block;color:var(--muted);font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.project-sidebar.collapsed .project-sidebar-title{display:none}
.ps-toggle{background:transparent;border:none;color:var(--muted);width:28px;height:28px;border-radius:6px;cursor:pointer;font-size:14px}
.ps-toggle:hover{background:#f0f4fa;color:var(--ink)}
.project-sidebar-nav{display:flex;flex-direction:column;padding:8px;overflow-y:auto}
.ps-item{display:flex;align-items:center;gap:10px;padding:9px 10px;color:var(--ink);border-radius:8px;text-decoration:none;font-size:13px;margin-bottom:2px}
.ps-item:hover{background:#f3f6fb;text-decoration:none}
.ps-item.active{background:var(--brand);color:#fff}
.ps-item.active .ps-label{color:#fff}
.ps-icon{font-size:16px;width:20px;text-align:center;flex-shrink:0}
.project-sidebar.collapsed .ps-label{display:none}
.project-sidebar.collapsed .ps-item{justify-content:center;padding:9px 0}

main.with-project-sidebar{margin-left:460px;padding:28px 36px;min-height:100vh;transition:margin-left .2s}
.project-sidebar.collapsed ~ main.with-project-sidebar{margin-left:294px}
@media (max-width:900px){
  main.with-project-sidebar{margin-left:240px}
  .project-sidebar{transform:translateX(-100%);width:240px;left:240px}
  .project-sidebar:not(.collapsed){transform:translateX(0);box-shadow:6px 0 24px rgba(0,0,0,.1)}
}

.auth-card{background:var(--panel);padding:32px;border-radius:12px;box-shadow:0 6px 30px rgba(20,30,60,.08);width:380px}
.auth-card h1{text-align:center}
.auth-card form{display:flex;flex-direction:column;gap:12px;margin-top:16px}

label{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--muted)}
input,select,textarea{padding:10px 12px;border:1px solid var(--border);border-radius:8px;font-size:14px;background:#fff;color:var(--ink);font-family:inherit}
input:focus,select:focus,textarea:focus{outline:2px solid var(--brand);border-color:var(--brand)}

button,.btn{display:inline-block;background:#fff;border:1px solid var(--border);color:var(--ink);padding:8px 14px;border-radius:8px;cursor:pointer;font-size:13px;text-decoration:none}
button:hover,.btn:hover{background:#f0f4fa;text-decoration:none}
.btn.primary,button[type=submit]{background:var(--brand);border-color:var(--brand);color:#fff}
.btn.primary:hover,button[type=submit]:hover{background:var(--brand-dark)}
.btn.small{padding:5px 10px;font-size:12px}

.page-header{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:16px}

.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;margin-bottom:24px}
.stats .card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:16px}
.stats .card.primary{border-color:var(--brand);background:linear-gradient(180deg,#eaf3ff,#fff)}
.stats .label{color:var(--muted);font-size:12px}
.stats strong{display:block;font-size:28px;margin-top:4px}

/* KPI grid */
.kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;margin-bottom:24px}
.kpi{display:flex;align-items:center;gap:14px;padding:18px;border-radius:14px;background:var(--panel);border:1px solid var(--border);position:relative;overflow:hidden;transition:transform .15s}
.kpi:hover{transform:translateY(-2px);box-shadow:0 8px 24px rgba(20,30,60,.08)}
.kpi::before{content:'';position:absolute;left:0;top:0;bottom:0;width:5px}
.kpi-icon{font-size:32px;line-height:1;width:54px;height:54px;display:flex;align-items:center;justify-content:center;border-radius:12px;background:#f3f6fb}
.kpi-body{flex:1;min-width:0}
.kpi-value{font-size:28px;font-weight:700;line-height:1.1}
.kpi-label{color:var(--ink);font-size:13px;font-weight:600;margin-top:2px}
.kpi-sub{color:var(--muted);font-size:11px;margin-top:2px}

.kpi.card-blue::before{background:#3B82F6}    .kpi.card-blue   .kpi-icon{background:#DBEAFE;color:#1E40AF}
.kpi.card-orange::before{background:#F59E0B}  .kpi.card-orange .kpi-icon{background:#FEF3C7;color:#92400E}
.kpi.card-green::before{background:#10B981}   .kpi.card-green  .kpi-icon{background:#DCFCE7;color:#166534}
.kpi.card-purple::before{background:#7C3AED}  .kpi.card-purple .kpi-icon{background:#EDE9FE;color:#5B21B6}
.kpi.card-teal::before{background:#14B8A6}    .kpi.card-teal   .kpi-icon{background:#CCFBF1;color:#0F766E}
.kpi.card-amber::before{background:#D97706}   .kpi.card-amber  .kpi-icon{background:#FEF3C7;color:#78350F}
.kpi.card-red::before{background:#DC2626}     .kpi.card-red    .kpi-icon{background:#FEE2E2;color:#991B1B}
.kpi.card-indigo::before{background:#4F46E5}  .kpi.card-indigo .kpi-icon{background:#E0E7FF;color:#3730A3}

/* Filter bar */
.filter-bar{display:flex;gap:24px;flex-wrap:wrap;align-items:flex-end;background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:12px 16px;margin-bottom:16px}
.filter-group{display:flex;flex-direction:column;gap:6px}
.filter-label{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px;font-weight:600}
.period-pills{display:flex;gap:4px;background:#f3f6fb;padding:3px;border-radius:8px}
.period-pills .pill{background:transparent;border:none;color:var(--muted);padding:6px 14px;border-radius:6px;cursor:pointer;font-size:12px;font-weight:600}
.period-pills .pill:hover{color:var(--ink)}
.period-pills .pill.active{background:var(--brand);color:#fff;box-shadow:0 1px 3px rgba(30,111,219,.3)}

/* Chart cards */
.charts-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:24px}
.chart-card{background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:16px 18px;display:flex;flex-direction:column}
.chart-card-head{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:12px;flex-wrap:wrap}
.chart-card h3{margin:0;font-size:14px;color:var(--ink);font-weight:600}
.chart-card-actions{display:flex;align-items:center;gap:6px}
.chart-types{display:flex;gap:2px;background:#f3f6fb;padding:2px;border-radius:6px}
.chart-types .chip{background:transparent;border:none;color:var(--muted);padding:4px 8px;border-radius:4px;cursor:pointer;font-size:13px;line-height:1}
.chart-types .chip:hover{color:var(--ink)}
.chart-types .chip.active{background:#fff;color:var(--brand);box-shadow:0 1px 2px rgba(0,0,0,.05)}
.icon-btn{background:transparent;border:none;width:26px;height:26px;border-radius:6px;cursor:pointer;font-size:12px;color:var(--muted);display:inline-flex;align-items:center;justify-content:center}
.icon-btn:hover{background:#f0f4fa;color:var(--ink)}
.chart-body{flex:1;transition:max-height .25s,opacity .15s}
.chart-canvas-wrap{height:280px;position:relative}
.chart-wide .chart-canvas-wrap{height:340px}
.chart-card.collapsed .chart-body{max-height:0;opacity:0;overflow:hidden}
.chart-wide{grid-column:1 / -1}
@media (max-width:900px){
  .charts-grid{grid-template-columns:1fr}
  .chart-canvas-wrap{height:240px}
}

/* Modal */
.modal{position:fixed;inset:0;z-index:100;display:flex;align-items:center;justify-content:center;padding:24px}
.modal[hidden]{display:none}
.modal-backdrop{position:absolute;inset:0;background:rgba(15,26,46,.6);backdrop-filter:blur(2px)}
.modal-panel{position:relative;background:var(--panel);border-radius:14px;width:min(95vw,1100px);max-height:90vh;display:flex;flex-direction:column;box-shadow:0 24px 60px rgba(0,0,0,.3)}
.modal-head{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid var(--border)}
.modal-head h3{margin:0;font-size:16px}
.modal-body{padding:20px;flex:1;min-height:0}
.modal-body canvas{width:100% !important;height:70vh !important}

/* Recent activity */
.recent h2{font-size:16px;margin:0 0 12px}
.recent-list{display:flex;flex-direction:column;gap:6px;background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:8px}
.recent-item{display:grid;grid-template-columns:auto 1fr auto auto;gap:12px;align-items:center;padding:10px 12px;border-radius:8px}
.recent-item:hover{background:#f8fafd}
.recent-body strong{font-size:13px}

table.data{width:100%;border-collapse:collapse;background:var(--panel);border-radius:var(--radius);overflow:hidden;box-shadow:0 1px 3px rgba(0,0,0,.04)}
table.data th,table.data td{text-align:left;padding:10px 14px;border-bottom:1px solid var(--border)}
table.data th{background:#f8fafd;font-size:12px;text-transform:uppercase;color:var(--muted);font-weight:600}
table.data tr:last-child td{border-bottom:none}
form.inline{display:inline}

.badge{display:inline-block;padding:3px 10px;border-radius:999px;font-size:11px;background:#eef2f8;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.5px}
.badge.ok,.badge.approved,.badge.completed{background:#dcfce7;color:#166534}
.badge.off,.badge.rejected{background:#fee2e2;color:#991b1b}
.badge.in_progress,.badge.submitted{background:#dbeafe;color:#1e40af}
.badge.planned,.badge.pending{background:#fef3c7;color:#92400e}
.badge.on_hold{background:#e5e7eb;color:#374151}
.badge.role-admin{background:#fde68a;color:#78350f}
.badge.role-client{background:#dbeafe;color:#1e3a8a}
.badge.role-contractor{background:#dcfce7;color:#065f46}
.badge.role-inspector{background:#f3e8ff;color:#5b21b6}

.flash{padding:12px 16px;border-radius:8px;margin-bottom:16px;font-size:13px}
.flash.success{background:#dcfce7;color:#166534}
.flash.error{background:#fee2e2;color:#991b1b}

.form-card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:24px;display:flex;flex-direction:column;gap:14px;max-width:560px}
.form-card .actions{display:flex;gap:8px;justify-content:flex-end}

.meta{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:16px 0 20px}
.meta>div{background:var(--panel);border:1px solid var(--border);padding:12px 14px;border-radius:var(--radius)}
.meta .label{display:block;color:var(--muted);font-size:12px}
.description{background:var(--panel);border-left:3px solid var(--brand);padding:12px 16px;margin:12px 0 20px}

.badge.sev-low{background:#e5e7eb;color:#374151}
.badge.sev-medium{background:#fef3c7;color:#92400e}
.badge.sev-high{background:#fed7aa;color:#9a3412}
.badge.sev-critical{background:#fecaca;color:#7f1d1d}
.badge.type-daily_log{background:#cffafe;color:#155e75}
.badge.type-issue{background:#fed7aa;color:#9a3412}
.badge.type-safety{background:#fde68a;color:#78350f}
.badge.type-document{background:#e0e7ff;color:#3730a3}
.badge.type-plan{background:#dbeafe;color:#1e40af}
.badge.type-task{background:#dcfce7;color:#166534}

.badge-count{background:#dc2626;color:#fff;border-radius:999px;padding:1px 8px;font-size:11px;font-weight:700}

.notif-list{display:flex;flex-direction:column;gap:8px}
.notif-item{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:12px 14px;display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center}
.notif-item.unread{border-left:3px solid var(--brand);background:#f9fbff}
.notif-meta{display:flex;flex-direction:column;gap:4px;align-items:flex-start;min-width:120px}
.notif-actions{display:flex;gap:6px}

.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);margin-bottom:16px}
.tabs .tab{padding:8px 16px;border:1px solid transparent;border-bottom:none;border-radius:8px 8px 0 0;color:var(--muted);font-size:13px}
.tabs .tab:hover{color:var(--ink);text-decoration:none}
.tabs .tab.active{background:var(--panel);border-color:var(--border);color:var(--brand);font-weight:600}

.progress-wrap{position:relative;background:#eef2f8;border-radius:6px;height:18px;width:140px;overflow:hidden}
.progress-bar{position:absolute;left:0;top:0;bottom:0;background:var(--brand);transition:width .3s}
.progress-wrap span{position:relative;display:block;text-align:center;font-size:11px;line-height:18px;font-weight:600;color:var(--ink);mix-blend-mode:multiply}

.gantt-wrap{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:8px;overflow-x:auto}
#calendar{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:12px}

fieldset.gps{border:1px dashed var(--border);border-radius:var(--radius);padding:14px;margin:0}
/* Status changer (inline select with badge styling) */
.status-changer{display:inline-flex}
.status-select{padding:6px 10px;border-radius:999px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;border:1px solid var(--border);cursor:pointer;background-position:right 6px center;background-repeat:no-repeat}
.status-select:hover{filter:brightness(0.95)}
.status-select.status-planned    {background-color:#fef3c7;color:#92400e;border-color:#fcd34d}
.status-select.status-in_progress{background-color:#dbeafe;color:#1e40af;border-color:#93c5fd}
.status-select.status-on_hold    {background-color:#e5e7eb;color:#374151;border-color:#9ca3af}
.status-select.status-completed  {background-color:#dcfce7;color:#166534;border-color:#86efac}

/* Icon-only action buttons (tooltip-той) */
.icon-actions{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.letter-no{font-size:12px;color:var(--muted);font-weight:600;background:#f3f6fb;padding:4px 8px;border-radius:6px;white-space:nowrap}
.icon-btn-square{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:6px;background:#fff;border:1px solid var(--border);color:var(--ink);text-decoration:none;font-size:14px;cursor:pointer;transition:all .12s}
.icon-btn-square:hover{background:var(--brand);color:#fff;border-color:var(--brand);text-decoration:none;transform:translateY(-1px)}
.icon-detail{position:relative;display:inline-block}
.icon-detail summary{list-style:none}
.icon-detail summary::-webkit-details-marker{display:none}
.icon-detail[open] .attach-form{display:flex}
.attach-form{display:none;position:absolute;top:34px;right:0;z-index:10;flex-direction:column;gap:6px;padding:10px;background:var(--panel);border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px rgba(20,30,60,.15);width:220px}
.attach-form input[type=text],.attach-form input[type=file]{font-size:11px;padding:4px 6px}

.thumb-row{display:flex;flex-wrap:wrap;gap:4px}
.thumb{display:inline-block;width:48px;height:48px;border-radius:6px;overflow:hidden;border:1px solid var(--border);background:#eef2f8}
.thumb img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .15s}
.thumb:hover img{transform:scale(1.1)}

.file-meter{margin-top:6px;font-size:12px}
.file-meter-bar{height:8px;background:#eef2f8;border-radius:999px;overflow:hidden;margin-bottom:4px}
.file-meter-bar span{display:block;height:100%;background:#10B981;transition:width .2s,background .2s;border-radius:999px}
.file-meter.warn .file-meter-bar span{background:#F59E0B}
.file-meter.over .file-meter-bar span{background:#DC2626;width:100% !important}
.file-meter-text{color:var(--muted)}
.file-meter.warn .file-meter-text{color:#92400E}
.file-meter.over .file-meter-text{color:#991B1B;font-weight:600}
button:disabled,.btn:disabled{opacity:.5;cursor:not-allowed}

.map-search{display:flex;gap:6px;margin-bottom:8px;flex-wrap:wrap}
.map-search input[type=text]{flex:1;min-width:200px}
#map-hint{margin:6px 0 4px;padding:8px 10px;background:#f3f6fb;border-radius:6px;font-size:12px}
fieldset.gps legend{padding:0 8px;font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px}
.row{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media (max-width:600px){.row{grid-template-columns:1fr}}

