:root{
  --bg:#eef1f7; --panel:#ffffff; --ink:#161c2d; --muted:#6b7384;
  --primary:#2f6bff; --primary-d:#1e4fd1; --primary-soft:#e9f0ff;
  --border:#e4e8f0; --border-strong:#d2d8e4;
  --green:#1fa463; --orange:#f59e0b; --red:#e5484d; --yellow:#f4d03f; --grey:#d9dde6;
  --shadow-sm:0 1px 2px rgba(16,24,40,.06),0 1px 3px rgba(16,24,40,.05);
  --shadow:0 4px 14px rgba(16,24,40,.08);
  --shadow-lg:0 18px 50px rgba(16,24,40,.22);
  --radius:14px; --radius-sm:10px;
  --font:"Inter","Segoe UI",Roboto,-apple-system,BlinkMacSystemFont,Arial,sans-serif;
}
*{box-sizing:border-box}
html,body{height:100%}
body{margin:0;font-family:var(--font);background:var(--bg);color:var(--ink);
  font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased;
  display:flex;flex-direction:column;min-height:100vh}
h1{font-size:24px;margin:0;font-weight:800;letter-spacing:-.02em}
h2{font-size:17px;margin:0 0 10px;font-weight:700;letter-spacing:-.01em}
h3{font-size:14px;margin:14px 0 8px;font-weight:700}
a{color:var(--primary);text-decoration:none}
.muted{color:var(--muted)} .small{font-size:12px} .hidden{display:none !important}
.mt{margin-top:12px}

/* ---------- top bar / nav ---------- */
.topbar{display:flex;align-items:center;gap:18px;background:#fff;padding:0 20px;height:60px;
  box-shadow:var(--shadow-sm);position:sticky;top:0;z-index:50;border-bottom:1px solid var(--border)}
.brand{display:flex;align-items:center;gap:11px;font-weight:800;color:var(--ink);letter-spacing:-.02em;white-space:nowrap}
.logo{background:linear-gradient(135deg,#3b7bff,#1e4fd1);color:#fff;width:34px;height:34px;
  border-radius:10px;display:grid;place-items:center;font-size:13px;font-weight:800;box-shadow:0 4px 10px rgba(47,107,255,.35)}
.brand-text{font-size:15px}
.mainnav{display:flex;align-items:center;gap:2px;flex:1}
.mainnav>a,.dropbtn{padding:9px 13px;border-radius:9px;color:#3a4254;font-weight:600;font-size:13.5px;
  background:none;border:none;cursor:pointer;font-family:inherit;white-space:nowrap}
.mainnav>a:hover,.dropbtn:hover{background:#f1f4fa;color:var(--ink)}
.mainnav a.active{background:var(--primary-soft);color:var(--primary-d)}
.caret{font-size:10px;opacity:.7}
.dropdown{position:relative}
.dropdown-content{display:none;position:absolute;top:calc(100% + 6px);left:0;background:#fff;min-width:210px;
  box-shadow:var(--shadow-lg);border:1px solid var(--border);border-radius:12px;padding:6px;z-index:60}
.dropdown:hover .dropdown-content,.dropdown.open .dropdown-content{display:block}
.dropdown-content a{display:block;padding:9px 11px;border-radius:7px;color:#3a4254;font-weight:500}
.dropdown-content a:hover{background:#f1f4fa;color:var(--ink)}
.nav-user{margin-left:auto;display:flex;align-items:center;gap:12px}
.uname{color:var(--muted);font-size:13px;white-space:nowrap}
.uname em{color:var(--primary-d);font-style:normal;font-weight:700}
.btn-logout{padding:7px 14px;border:1px solid var(--border-strong);border-radius:9px;color:#3a4254;font-weight:600}
.btn-logout:hover{background:#f1f4fa}
.hamburger{display:none;flex-direction:column;gap:4px;background:none;border:none;cursor:pointer;padding:8px;margin-left:auto}
.hamburger span{width:22px;height:2.5px;background:var(--ink);border-radius:2px;transition:.2s}

.content{padding:22px;max-width:1440px;margin:0 auto;width:100%;flex:1}
.content-auth{padding:0;max-width:none}
.page-head{display:flex;justify-content:space-between;align-items:flex-end;margin-bottom:18px;gap:12px;flex-wrap:wrap}
.page-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}

/* ---------- footer ---------- */
.appfoot{background:#0f1b34;color:#c7d2e8;text-align:center;padding:13px 16px;font-size:12.5px;
  display:flex;gap:8px;justify-content:center;align-items:center;flex-wrap:wrap;letter-spacing:.02em}
.appfoot .muted{color:#8b97b4}
.foot-sep{color:#48557a}

/* ---------- cards ---------- */
.card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:18px;box-shadow:var(--shadow-sm);margin-bottom:18px}

/* ---------- buttons / inputs ---------- */
.btn{padding:9px 15px;border-radius:10px;border:1px solid transparent;cursor:pointer;font-weight:600;
  font-size:13px;background:#eef2f8;color:var(--ink);font-family:inherit;transition:.15s;white-space:nowrap}
.btn:hover{filter:brightness(.97)}
.btn:active{transform:translateY(1px)}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn-primary{background:linear-gradient(135deg,#3b7bff,var(--primary-d));color:#fff;box-shadow:0 4px 12px rgba(47,107,255,.3)}
.btn-outline{background:#fff;border-color:var(--border-strong);color:var(--ink)}
.btn-ghost{background:transparent;color:var(--muted)}
.btn-ghost:hover{background:#f1f4fa}
.btn-danger{background:linear-gradient(135deg,#f5675e,#d83a3f);color:#fff}
.btn-block{width:100%}
.btn-lg{padding:12px 18px;font-size:15px}
.import-status{display:inline-flex;align-items:center;gap:7px;color:var(--muted);font-size:12px;white-space:nowrap}
.import-status::before{content:"";width:12px;height:12px;border:2px solid var(--border-strong);
  border-top-color:var(--primary);border-radius:50%;animation:import-spin .8s linear infinite}
.import-status.done{color:var(--green)}
.import-status.done::before{content:"✓";width:auto;height:auto;border:0;animation:none;font-weight:800}
.import-status.failed{color:var(--red)}
.import-status.failed::before{content:"!";width:auto;height:auto;border:0;animation:none;font-weight:800}
@keyframes import-spin{to{transform:rotate(360deg)}}
input,select,textarea{font:inherit;font-size:14px;padding:9px 11px;border:1px solid var(--border-strong);
  border-radius:10px;background:#fff;color:var(--ink);width:100%;transition:.15s}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
select[multiple]{padding:4px}
label{display:block;font-weight:600;font-size:12px;margin:8px 0 5px;color:#46506a}
.row{display:flex;gap:8px;align-items:center}
.grow{flex:1}
.chk,.chk-inline{display:flex;align-items:center;gap:6px;font-weight:500}
.chk input,.chk-inline input{width:auto}

/* ---------- fancy login ---------- */
.login-stage{position:relative;min-height:calc(100vh - 48px);display:grid;place-items:center;
  padding:32px 18px;overflow:hidden;
  background:radial-gradient(1200px 600px at 10% -10%,#1f3aa0,transparent),
             radial-gradient(1000px 700px at 110% 110%,#2f6bff,transparent),
             linear-gradient(135deg,#0b1f5e,#13266e 55%,#1b3aa0)}
.login-bg{position:absolute;inset:0;overflow:hidden}
.blob{position:absolute;border-radius:50%;filter:blur(40px);opacity:.5;animation:float 14s ease-in-out infinite}
.blob.b1{width:340px;height:340px;background:#4f8cff;top:-80px;left:-60px}
.blob.b2{width:300px;height:300px;background:#7b5bff;bottom:-90px;right:-40px;animation-delay:-4s}
.blob.b3{width:240px;height:240px;background:#26d0ce;top:40%;left:55%;animation-delay:-8s}
@keyframes float{0%,100%{transform:translateY(0) translateX(0)}50%{transform:translateY(-26px) translateX(18px)}}
.login-grid{position:relative;z-index:1;display:grid;grid-template-columns:1.1fr .9fr;gap:42px;
  align-items:center;max-width:940px;width:100%}
.login-hero{color:#eaf0ff}
.login-logo-lg{width:62px;height:62px;border-radius:16px;display:grid;place-items:center;font-weight:800;
  font-size:20px;color:#fff;background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.25);backdrop-filter:blur(6px)}
.login-hero h1{font-size:34px;margin:18px 0 10px;color:#fff;line-height:1.1}
.login-hero p{font-size:15px;color:#c2cdf0;max-width:440px;margin:0 0 22px}
.hero-points{list-style:none;padding:0;margin:0;display:grid;gap:13px;font-size:13px;color:#dbe3fb}
.hero-points li{display:flex;align-items:flex-start;gap:10px;line-height:1.4}
.hero-points b{color:#fff;font-size:13.5px}
.login-point-icon{display:grid;place-items:center;flex:0 0 27px;height:27px;border:1px solid rgba(255,255,255,.3);
  border-radius:8px;color:#c9d7ff;font-size:10px;font-weight:800;letter-spacing:.04em}
.login-meta{display:flex;gap:8px;flex-wrap:wrap;margin-top:25px;color:#aebce4;font-size:11px;text-transform:uppercase;letter-spacing:.08em}
.login-meta span+span{border-left:1px solid rgba(255,255,255,.3);padding-left:8px}
.login-card{background:rgba(255,255,255,.97);padding:34px 30px;border-radius:20px;
  box-shadow:var(--shadow-lg);backdrop-filter:blur(8px);border:1px solid rgba(255,255,255,.6)}
.login-card h2{font-size:22px;margin:14px 0 2px}
.login-logo{background:linear-gradient(135deg,#3b7bff,#1e4fd1);color:#fff;width:52px;height:52px;border-radius:14px;
  display:grid;place-items:center;font-weight:800;font-size:17px;box-shadow:0 8px 18px rgba(47,107,255,.4)}
.login-card label{margin-top:14px}
.login-card .btn{margin-top:18px}
.hint{margin-top:14px;font-size:12px;text-align:center}

/* ---------- project select ---------- */
.select-wrap{display:grid;place-items:start center;padding-top:36px}
.select-card{width:480px;max-width:95vw}
.divider{display:flex;align-items:center;text-align:center;color:var(--muted);margin:18px 0}
.divider::before,.divider::after{content:"";flex:1;border-bottom:1px solid var(--border)}
.divider span{padding:0 12px}

/* ---------- dashboard widgets ---------- */
.widget-picker{background:#fff;border:1px solid var(--border);border-radius:12px;padding:12px;margin-bottom:14px;
  display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.widget-picker span{cursor:pointer;background:var(--primary-soft);color:var(--primary-d);padding:7px 12px;
  border-radius:20px;font-size:12px;font-weight:600}
.widget-picker span:hover{background:#d6e4ff}
.grid-stack{background:transparent}
.widget{background:#fff;border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow-sm);height:100%;
  display:flex;flex-direction:column;overflow:hidden}
.widget-head{display:flex;justify-content:space-between;align-items:center;padding:10px 13px;
  border-bottom:1px solid var(--border);cursor:move;background:#fafbfe}
.widget-head h3{margin:0;font-size:13px;font-weight:700}
.widget-close{border:none;background:none;cursor:pointer;color:var(--muted);font-size:18px;line-height:1}
.widget-close:hover{color:var(--red)}
.widget-body{flex:1;padding:10px;position:relative;min-height:0}
.widget-body canvas{max-height:100%}
.widget-empty{height:100%;display:flex;align-items:center;justify-content:center;text-align:center;
  padding:14px;color:var(--muted);font-size:12.5px;line-height:1.5}

/* ---------- dashboard date-range bar (single row) ---------- */
.dash-daterange{display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  background:#fff;border:1px solid var(--border);border-radius:12px;
  padding:12px 16px;margin-bottom:14px;box-shadow:var(--shadow-sm)}
.dash-daterange label{display:inline-flex;align-items:center;gap:7px;margin:0;
  font-size:12px;font-weight:700;color:#46506a;text-transform:uppercase;
  letter-spacing:.03em;white-space:nowrap}
.dash-daterange input[type=date]{width:auto;min-width:150px}
.dash-daterange .btn{align-self:center}
#dash-range-label{margin-left:auto;font-weight:600}

/* ---------- reports page ---------- */
.report-filters{background:#fff;border:1px solid var(--border);border-radius:14px;
  padding:18px;margin-bottom:16px;box-shadow:var(--shadow-sm)}
.rf-grid{display:flex;flex-wrap:wrap;align-items:center;gap:12px 16px}
.rf-grid label{display:inline-flex;align-items:center;gap:7px;margin:0;
  font-size:12px;font-weight:700;color:#46506a;text-transform:uppercase;
  letter-spacing:.03em;white-space:nowrap}
.rf-grid label select,.rf-grid label input{width:auto;min-width:140px}
.rf-actions{display:flex;gap:8px;justify-content:flex-end;align-items:center;
  margin-top:16px;padding-top:14px;border-top:1px solid var(--border)}
.rpt-summary{margin:0 2px 12px;font-weight:600;color:var(--muted);font-size:13px}
.rpt-table-wrap{overflow:auto;max-height:600px;border:1px solid var(--border);border-radius:12px}
#rpt-table{width:100%;border-collapse:collapse;font-size:13px}
#rpt-table th,#rpt-table td{padding:10px 12px;border-bottom:1px solid var(--border);
  text-align:left;vertical-align:top}
#rpt-table th{position:sticky;top:0;background:#f7f9fc;z-index:1;font-size:11px;
  text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-weight:700}
#rpt-table tbody tr:hover{filter:brightness(.975)}
.print-only{display:none}

/* ---------- task grid ---------- */
.grid-section{margin-top:6px}
.grid-toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.filters{display:flex;gap:8px;flex-wrap:wrap}
.filters input,.filters select{width:auto;min-width:130px}
.goto{display:flex;gap:6px;align-items:center}
.goto input{min-width:150px}
.grid-actions{display:flex;gap:8px;flex-wrap:wrap}
.legend{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.lg{padding:4px 11px;border-radius:20px;font-size:12px;font-weight:600;border:1px solid rgba(0,0,0,.06)}
.table-scroll{overflow:auto;max-height:540px;border:1px solid var(--border);border-radius:12px}
.task-table{width:100%;border-collapse:collapse;font-size:13px}
.task-table th,.task-table td{padding:10px 12px;border-bottom:1px solid var(--border);text-align:left;vertical-align:top}
.task-table th{position:sticky;top:0;background:#f7f9fc;z-index:1;font-size:11px;text-transform:uppercase;
  letter-spacing:.04em;color:var(--muted);font-weight:700}
.task-table tbody tr:hover{filter:brightness(.975)}
.task-table tr.sel{outline:2px solid var(--primary);outline-offset:-2px}
.deleted-row{opacity:.55;text-decoration:line-through}
.task-table tr.child-row td{border-left:3px solid #2d6cdf;background:#f0f4ff}
.task-table tr.child-row:hover td{filter:brightness(.97)}
.master-toggle{background:none;border:none;cursor:pointer;font-size:16px;font-weight:700;
  color:#2d6cdf;padding:0 4px;line-height:1;vertical-align:middle;border-radius:4px;
  transition:background .15s}
.master-toggle:hover{background:#e0eaff}
.state-pill{padding:3px 9px;border-radius:20px;font-size:11px;font-weight:700;display:inline-block}

/* ---------- modal ---------- */
.modal-overlay{position:fixed;inset:0;background:rgba(15,23,42,.55);display:flex;align-items:flex-start;
  justify-content:center;padding:30px 16px;z-index:100;overflow:auto;backdrop-filter:blur(2px)}
.modal{background:#fff;border-radius:18px;width:820px;max-width:96vw;box-shadow:var(--shadow-lg)}
.modal-sm{width:440px}
.modal-head{display:flex;justify-content:space-between;align-items:center;padding:18px 22px;border-bottom:1px solid var(--border)}
.modal-close{border:none;background:none;font-size:26px;cursor:pointer;color:var(--muted);line-height:1}
.modal-body{padding:20px 22px;max-height:72vh;overflow:auto}
.modal-foot{display:flex;justify-content:flex-end;gap:8px;align-items:center;padding:16px 22px;border-top:1px solid var(--border)}
.err-msg{color:var(--red);margin-right:auto;font-weight:600;font-size:13px}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px 18px}
.fg.span2{grid-column:1 / -1}
.fg label{margin-top:0}
.subtasks,.files-area{border-top:1px solid var(--border);margin-top:16px;padding-top:10px}
.subtasks ul,.files-area ul{list-style:none;padding:0;margin:0 0 10px}
.subtasks li,.files-area li{display:flex;justify-content:space-between;align-items:center;padding:8px 10px;
  border:1px solid var(--border);border-radius:9px;margin-bottom:6px;gap:8px}

/* ---------- calendar ---------- */
.cal-toolbar{display:flex;align-items:center;gap:14px;margin-bottom:14px;flex-wrap:wrap}
.cal-toolbar h2{flex:1;text-align:center;min-width:160px}
.seg{display:inline-flex;border:1px solid var(--border-strong);border-radius:10px;overflow:hidden}
.seg-btn{border:none;background:#fff;padding:8px 14px;cursor:pointer;font-weight:600;font-size:13px;color:#3a4254;font-family:inherit}
.seg-btn.active{background:var(--primary);color:#fff}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:5px}
#calendar{overflow-x:auto}
.cal-dow{text-align:center;font-weight:700;color:var(--muted);font-size:12px;padding:4px}
.cal-cell{min-height:96px;border:1px solid var(--border);border-radius:9px;padding:5px;background:#fff}
.cal-cell.out{background:#f7f9fc;opacity:.65}
.cal-cell.today{outline:2px solid var(--primary)}
.cal-date{font-size:12px;font-weight:700;color:var(--muted)}
.cal-ev{font-size:11px;padding:3px 6px;border-radius:6px;margin-top:3px;color:#1a1a1a;cursor:pointer;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:600}

/* ---------- masters ---------- */
.masters-layout{display:grid;grid-template-columns:230px 1fr;gap:18px}
.masters-tabs{display:flex;flex-direction:column;gap:5px}
.masters-tabs button{text-align:left;padding:11px 13px;border:1px solid var(--border);background:#fff;
  border-radius:10px;cursor:pointer;font-weight:600;font-family:inherit;color:#3a4254}
.masters-tabs button:hover{background:#f1f4fa}
.masters-tabs button.active{background:var(--primary);color:#fff;border-color:var(--primary)}

/* ---------- info + stat cards ---------- */
.info-layout{display:grid;grid-template-columns:1.4fr 1fr;gap:18px}
.file-list{list-style:none;padding:0;margin:0 0 10px}
.file-list li{display:flex;justify-content:space-between;padding:9px 11px;border:1px solid var(--border);border-radius:9px;margin-bottom:6px}
.cards-row{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:18px}
.stat-card{background:#fff;border:1px solid var(--border);border-radius:14px;padding:18px;text-align:center;box-shadow:var(--shadow-sm)}
.stat-num{display:block;font-size:32px;font-weight:800;color:var(--primary-d);letter-spacing:-.02em}
.dash-row{margin-bottom:18px}

/* multi-project summary grid */
.proj-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:16px}
.proj-card{background:#fff;border:1px solid var(--border);border-radius:14px;padding:14px;
  box-shadow:var(--shadow-sm);display:flex;flex-direction:column;gap:10px}
.proj-card.complete{border:2px solid var(--green);box-shadow:0 0 0 3px rgba(31,164,99,.14)}
.proj-card-head{display:flex;justify-content:space-between;align-items:center;gap:8px}
.proj-card-head h3{margin:0;font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.badge{padding:3px 10px;border-radius:20px;font-size:11px;font-weight:700;white-space:nowrap}
.badge.done{background:#e6f6ec;color:#10713a}
.badge.active{background:var(--primary-soft);color:var(--primary-d)}
/* fixed height stops the Chart.js infinite-resize / expanding bug */
.chart-box{position:relative;height:190px;width:100%}
.proj-empty{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  color:var(--muted);font-size:12px}
.proj-stats{display:flex;flex-wrap:wrap;gap:6px;font-size:11.5px}
.proj-stats .st{padding:3px 9px;border-radius:20px;font-weight:600;border:1px solid rgba(0,0,0,.05)}
.input-prefix{display:flex;align-items:center;border:1px solid var(--border-strong);border-radius:10px;overflow:hidden;background:#fff}
.input-prefix span{padding:9px 11px;background:#f1f4fa;color:var(--muted);font-weight:700;border-right:1px solid var(--border)}
.input-prefix input{border:none;border-radius:0}
.input-prefix input:focus{box-shadow:none}

/* ---------- flash + toast ---------- */
.flash{padding:11px 14px;border-radius:10px;margin-bottom:12px;font-weight:600}
.flash.error{background:#fdecec;color:#b42318;border:1px solid #f6cfcf}
.flash.success{background:#e6f6ec;color:#10713a;border:1px solid #c3ebcf}
#toast{position:fixed;bottom:28px;left:50%;transform:translateX(-50%);background:#10182b;color:#fff;
  padding:12px 20px;border-radius:11px;box-shadow:var(--shadow-lg);z-index:200;opacity:0;transition:.25s;
  pointer-events:none;max-width:92vw;text-align:center;font-weight:500}
#toast.show{opacity:1}

/* ---------- responsive ---------- */
@media(max-width:980px){
  .hamburger{display:flex}
  .mainnav{display:none;position:absolute;top:60px;left:0;right:0;background:#fff;flex-direction:column;
    align-items:stretch;padding:10px;gap:4px;box-shadow:var(--shadow);border-bottom:1px solid var(--border);max-height:calc(100vh - 60px);overflow:auto}
  .mainnav.open{display:flex}
  .mainnav>a,.dropbtn{width:100%;text-align:left}
  .dropdown{width:100%}
  .dropdown-content{position:static;box-shadow:none;border:none;border-left:2px solid var(--border);
    border-radius:0;margin:2px 0 2px 10px;padding:2px 0;display:none}
  .dropdown.open .dropdown-content{display:block}
  .nav-user{margin-left:0;border-top:1px solid var(--border);padding-top:10px;margin-top:6px;justify-content:space-between}
  .masters-layout,.info-layout{grid-template-columns:1fr}
  .masters-tabs{flex-direction:row;flex-wrap:wrap}
  .login-grid{grid-template-columns:1fr;gap:24px;max-width:520px}
  .login-hero{padding:8px 4px 0}
  .login-hero h1{font-size:30px}
}
@media(max-width:680px){
  .content{padding:16px}
  h1{font-size:20px}
  .cards-row{grid-template-columns:1fr 1fr}
  .form-grid{grid-template-columns:1fr}
  .grid-toolbar{align-items:stretch}
  .filters input,.filters select{flex:1;min-width:0}
  .grid-actions .btn{flex:1}
  .grid-actions{width:100%}
  .grid-actions .print-range{width:100%;display:flex;flex-wrap:wrap;gap:8px}
  .grid-actions .print-range label{flex:1;min-width:130px}
  .grid-actions .print-range input{width:100%}
  .page-head{align-items:flex-start}
  .page-actions{width:100%}
  .page-actions > .seg,.page-actions > select,.page-actions > .btn{flex:1;min-width:0}
  .cal-toolbar{gap:8px}
  .cal-toolbar h2{order:-1;flex:1 1 100%;min-width:0;text-align:left}
  .cal-toolbar .filters{width:100%}
  .cal-grid{min-width:560px}
  .modal-body{max-height:78vh}
  .modal-foot{flex-wrap:wrap;padding:13px 16px}
  .modal-foot .err-msg{flex:1 1 100%;margin:0}
  .modal-foot .btn{flex:1}
  .login-card{padding:26px 20px}
  .login-hero h1{font-size:28px}
  .login-hero p{font-size:14px;margin-bottom:16px}
  .login-meta{margin-top:18px}
  .oauth-btn{min-width:100%}
  .dash-daterange input[type=date]{flex:1;min-width:0}
  .rf-grid label{flex:1 1 100%}
  .rf-grid label select,.rf-grid label input{flex:1;min-width:0}
}
@media(max-width:420px){
  .cards-row{grid-template-columns:1fr}
  .content{padding:12px}
  .card{padding:14px}
  .login-stage{padding:20px 12px}
  .login-card{padding:22px 16px}
  .proj-grid{grid-template-columns:minmax(0,1fr)}
  .login-meta{font-size:10px}
}

/* ===================================================================
   Print  (A4 with a header repeated on every page)
   =================================================================== */
@media print{
  @page{size:A4;margin:26mm 12mm 16mm}
  html,body{background:#fff;color:#000;font-size:11px}
  .topbar,.appfoot,.no-print,#toast,.flash,.hamburger{display:none !important}
  .content{padding:0;margin:0;max-width:none}
  .print-only{display:block}

  /* running header drawn into the top page margin on every printed page */
  .print-header{position:fixed;top:-20mm;left:0;right:0;height:18mm;
    border-bottom:1.5px solid #222;padding-bottom:5px}
  .print-header h2{font-size:15px;margin:0;font-weight:800;letter-spacing:-.01em}
  .print-header #print-meta{font-size:9px;color:#444;margin:3px 0 0}

  .print-table{width:100%;border-collapse:collapse;font-size:9.5px}
  /* repeat the column headings on each page */
  .print-table thead{display:table-header-group}
  .print-table th{background:#e9eef7 !important;-webkit-print-color-adjust:exact;
    print-color-adjust:exact;border:1px solid #9aa3b2;padding:5px 6px;text-align:left;
    font-size:8.5px;text-transform:uppercase;letter-spacing:.03em}
  .print-table td{border:1px solid #c9cfdb;padding:4px 6px;vertical-align:top}
  .print-table tr{page-break-inside:avoid}
  .print-master td{background:#dce8ff !important;-webkit-print-color-adjust:exact;
    print-color-adjust:exact;font-weight:700}
  .print-child td{background:#f5f8fd !important;-webkit-print-color-adjust:exact;
    print-color-adjust:exact}
}

/* OAuth / corporate sign-in */
.oauth-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:6px}
.oauth-btn{flex:1;min-width:145px;display:inline-flex;align-items:center;justify-content:center;gap:8px;text-align:center}
.oauth-icon{display:grid;place-items:center;width:19px;height:19px;border:1.5px solid #7d8798;border-radius:5px;
  color:#687386;font-size:10px;font-weight:800;line-height:1;filter:grayscale(1)}
.oauth-google{border-radius:50%}.oauth-azure{border-radius:4px}.oauth-zoho{border-radius:50%;font-size:9px}
.oauth-card .state-pill{font-size:11px;margin-left:6px}

/* AJAX grid controls: search + pager */
.grid-controls{display:flex;align-items:center;justify-content:space-between;gap:12px;
  flex-wrap:wrap;margin-bottom:10px}
.grid-search .g-q{padding:8px 11px;border:1px solid #b0bcd4;border-radius:7px;font-size:14px;min-width:220px}
.grid-pager{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.grid-pager .g-per{padding:5px 7px;border:1px solid #b0bcd4;border-radius:6px}
.grid-pager .btn{padding:5px 10px;font-weight:700}
.grid-pager .btn:disabled{opacity:.4;cursor:default}
.grid-pager .g-info{min-width:96px;text-align:center}
@media(max-width:640px){
  .grid-controls{flex-direction:column;align-items:stretch}
  .grid-search .g-q{width:100%}
  .grid-pager{justify-content:center}
}
