/* app.css – shared UI styles */

/* =========================
   Design Tokens
========================= */
:root{
  --bg-page-top: #eef4fb;
  --bg-page-bottom: #f8fafc;

  --bg: #ffffff;
  --bg-soft: #f9fbfd;
  --bg-soft-2: #f1f6fd;
  --bg-table-head: #f6f8fb;

  --text: #111827;
  --muted: #6b7280;

  --border: #d7dee8;
  --border-soft: #e8edf3;
  --border-strong: #c8d2de;

  --primary: #0f4c81;
  --primary-dark: #0b3559;
  --primary-soft: #eaf2fb;

  --danger: #dc2626;
  --danger-bg: #fef2f2;
  --danger-border: #fecaca;
  --danger-text: #b91c1c;

  --success: #166534;
  --success-bg: #f0fdf4;
  --success-border: #bbf7d0;

  --shadow-sm: 0 3px 10px rgba(15, 76, 129, 0.06);
  --shadow-md: 0 10px 30px rgba(15, 76, 129, 0.08);
  --shadow-lg: 0 20px 45px rgba(15, 76, 129, 0.10);

  --radius-sm: 10px;
  --radius-md: 14px;
  --radius-lg: 18px;
  --radius-xl: 24px;

  --content-max: 1200px;
  --content-medium: 980px;
  --content-narrow: 580px;
}

/* =========================
   Base
========================= */
*{ box-sizing:border-box; }

html, body{
  margin:0;
  padding:0;
}

body{
  font-family: system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  color: var(--text);
  background: linear-gradient(180deg, var(--bg-page-top) 0%, var(--bg-page-bottom) 100%);
  line-height: 1.5;
}

a{
  color: var(--primary);
  text-decoration: none;
}

a:hover{
  text-decoration: underline;
}

img{
  max-width: 100%;
  height: auto;
}

.login-header img,
.app-note img{
  width:76px;
  height:76px;
  object-fit: cover;
  border-radius:20%;
  flex-shrink:0;
  background:#fff;
  box-shadow: 0 6px 18px rgba(0,0,0,.08);
}

.app-note img{
  width:76px;
  height:76px;
  object-fit: cover;
  border-radius:20%;
  flex-shrink:0;
  background:#fff;
  box-shadow: 0 6px 18px rgba(0,0,0,.08);
}
.num{ font-variant-numeric: tabular-nums; }

.muted{
  color: var(--muted);
  font-size: .95rem;
}

.big{
  font-size: clamp(2rem, 4vw, 2.5rem);
  font-weight: 800;
  line-height: 1.08;
  letter-spacing: -0.02em;
}

.right{ text-align:right; }

/* =========================
   Layout
========================= */
.page{
  width: min(100% - 2rem, var(--content-max));
  margin: 1.5rem auto;
}

.page-wrap{
  flex: 1;
  display: flex;
  justify-content: center;
  align-items: flex-start;
  padding: 6vh 1.25rem 2rem 1.25rem;
}

.shell{
  width: 100%;
  max-width: var(--content-max);
}

.shell-narrow{
  width: 100%;
  max-width: var(--content-narrow);
  margin: 0 auto;
}

.content-wide{
  width: 100%;
  max-width: var(--content-max);
}

.content-medium{
  width: 100%;
  max-width: var(--content-medium);
}

.content-narrow{
  width: 100%;
  max-width: var(--content-narrow);
}

.row{
  display:flex;
  gap:1rem;
  flex-wrap:wrap;
  align-items:center;
}

.controls{
  display:flex;
  gap:.6rem;
  flex-wrap:wrap;
  align-items:center;
}

.grid2{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:.8rem;
}

/* =========================
   Cards / Boxes
========================= */
.box{
  border: 1px solid var(--border);
  border-radius: var(--radius-xl);
  padding: 1.25rem 1.5rem;
  margin-bottom: 1rem;
  background: var(--bg);
  box-shadow: var(--shadow-md);
}

.box-soft{
  background: var(--bg-soft);
  border: 1px solid var(--border-soft);
  border-radius: var(--radius-lg);
  padding: 1rem 1.1rem;
}

.panel{
  border:1px solid var(--border-soft);
  border-radius:var(--radius-md);
  padding:.9rem 1rem;
  background: var(--bg);
}

.panel h3{
  margin:0 0 .5rem 0;
  font-size:1.05rem;
}

#legendPanel{
  background: var(--bg-soft);
}

.legend-line{
  margin-top:.35rem;
}

.tile{
  border:1px solid var(--border-soft);
  border-radius: var(--radius-lg);
  background:#fff;
  padding:1rem 1.1rem;
  box-shadow: var(--shadow-sm);
}

.tile-link{
  display:block;
  color:inherit;
  text-decoration:none;
}

.tile-link:hover{
  text-decoration:none;
}

.tile h2{
  margin:.1rem 0 .25rem 0;
  font-size:1.25rem;
}

/* =========================
   Auth / Login
========================= */
.login-header{
  display:flex;
  align-items:center;
  gap:.7rem;
  margin-bottom:1rem;
  font-weight:700;
  color: var(--primary);
  font-size:1.05rem;
}

.login-header img{
  width:34px;
  height:34px;
  border-radius:10px;
  background:#fff;
  box-shadow: 0 4px 12px rgba(0,0,0,.08);
}

.intro{
  margin:.65rem 0 1.35rem 0;
  color: var(--muted);
  font-size:1.05rem;
}

.app-note{
  display:flex;
  gap:1rem;
  align-items:center;
  padding:1rem;
  margin:0 0 1.25rem 0;
  border-radius: var(--radius-lg);
  background: var(--bg-soft-2);
  border:1px solid var(--border);
}

.app-note h2{
  margin:0 0 .35rem 0;
  font-size:1.05rem;
  line-height:1.3;
}

.app-note p{
  margin:0;
  color: var(--muted);
  line-height:1.5;
}

.notice{
  margin: 0 0 1.2rem 0;
  padding: .95rem 1rem;
  border-radius: var(--radius-md);
  background: var(--bg-soft);
  border:1px solid var(--border-soft);
  color:#4b5563;
  line-height:1.5;
  font-size:.98rem;
}

.notice strong{
  color: var(--primary-dark);
}

.notice-tight{
  margin-top:1rem;
  margin-bottom:0;
}

.error-box{
  margin: 0 0 1rem 0;
  padding: .9rem 1rem;
  border-radius: var(--radius-md);
  background: var(--danger-bg);
  border:1px solid var(--danger-border);
  color: var(--danger-text);
  font-weight:600;
}

.success-box{
  margin: 0 0 1rem 0;
  padding: .9rem 1rem;
  border-radius: var(--radius-md);
  background: var(--success-bg);
  border:1px solid var(--success-border);
  color: var(--success);
  font-weight:600;
}

/* =========================
   Forms
========================= */
.field{
  margin-bottom: 1rem;
}

label{
  display:block;
  margin:0 0 .4rem 0;
  color:#4b5563;
  font-weight:600;
}

input,
select,
textarea{
  width:100%;
  padding:.85rem .95rem;
  border:1px solid var(--border-strong);
  border-radius: var(--radius-md);
  background:#fff;
  font:inherit;
  color: var(--text);
  transition:
    border-color .15s ease,
    box-shadow .15s ease,
    background .15s ease;
}

input:hover,
select:hover,
textarea:hover{
  border-color:#b7c4d4;
}

input:focus,
select:focus,
textarea:focus{
  outline:none;
  border-color: var(--primary);
  box-shadow: 0 0 0 4px rgba(15,76,129,.14);
}

input[type="checkbox"],
input[type="radio"]{
  width:auto;
  padding:0;
  box-shadow:none;
}

button:disabled,
.button:disabled{
  opacity:.45;
  cursor:not-allowed;
}

/* =========================
   Buttons
========================= */
button,
.button,
.btn,
.btn-secondary,
.btn-passkey{
  appearance:none;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:.45rem;
  min-height:46px;
  padding:.82rem 1.15rem;
  border-radius: var(--radius-md);
  border:1px solid transparent;
  background:#fff;
  color:#374151;
  cursor:pointer;
  font:inherit;
  font-weight:700;
  line-height:1;
  text-decoration:none;
  transition:
    transform .12s ease,
    background .15s ease,
    border-color .15s ease,
    color .15s ease,
    box-shadow .15s ease;
}

button:hover,
.button:hover,
.btn:hover,
.btn-secondary:hover,
.btn-passkey:hover{
  transform: translateY(-1px);
  text-decoration:none;
}

.button,
.btn-secondary,
.btn-passkey{
  background:#fff;
  border-color:#d1d5db;
  box-shadow: 0 2px 8px rgba(0,0,0,.04);
}

.button:hover,
.btn-secondary:hover,
.btn-passkey:hover{
  background:#f9fafb;
  border-color:#c5ccd6;
}

.primary,
.btn{
  background: var(--primary);
  color:#fff;
  border-color: var(--primary);
  box-shadow: 0 8px 18px rgba(15,76,129,.18);
}

.primary:hover,
.btn:hover{
  background: var(--primary-dark);
  border-color: var(--primary-dark);
}

.danger{
  border-color: var(--danger) !important;
  color: var(--danger-text) !important;
}

.danger:hover{
  background:#fee2e2;
}

/* =========================
   Small UI Elements
========================= */
.pill{
  display:inline-block;
  padding:.18rem .6rem;
  border:1px solid var(--border);
  border-radius:999px;
  background: var(--bg-soft);
}

.pill-disabled{
  opacity:.55;
  cursor:not-allowed;
}

.kbd{
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
  border:1px solid var(--border);
  border-bottom:2px solid var(--border);
  border-radius:6px;
  padding:0 .35rem;
  background: var(--bg-soft);
}

/* =========================
   Tables
========================= */
.table-wrap{
  overflow:auto;
  border-radius: var(--radius-md);
}

table{
  width:100%;
  border-collapse:collapse;
  margin-top:.5rem;
  background:#fff;
}

th, td{
  border-bottom:1px solid var(--border-soft);
  padding:.6rem .5rem;
  text-align:left;
  vertical-align:top;
}

th{
  background: var(--bg-table-head);
  position: sticky;
  top: 0;
  z-index: 1;
}

tr.current{
  outline: 2px solid var(--primary);
  border-radius: 10px;
}

/* =========================
   Timer / Panels
========================= */
.current-grid{
  display:grid;
  grid-template-columns: 1fr;
  gap:1rem;
}

.right-panels{
  display:grid;
  grid-template-columns: 1fr 340px;
  gap:1rem;
  align-items:start;
}

/* =========================
   Header / Navigation
========================= */
.site-header{
  width: min(100% - 2rem, var(--content-max));
  margin: 1rem auto 0 auto;
}

.site-header .box{
  margin-bottom: 0;
}

.header-stack{
  display:flex;
  flex-direction:column;
  gap:.75rem;
}

.header-top,
.header-bottom,
.role-band-inner{
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:1rem;
  flex-wrap:wrap;
}

.header-left,
.header-right,
.main-nav,
.account-nav{
  display:flex;
  align-items:center;
  gap:.6rem;
  flex-wrap:wrap;
}

.context-form{
  display:inline-flex;
  gap:.5rem;
  align-items:center;
  flex-wrap:wrap;
}

.context-pill{
  display:inline-flex;
  align-items:center;
  gap:.5rem;
  padding:.5rem .75rem;
  border-radius:12px;
  white-space:nowrap;
  border:1px solid var(--border);
  background: var(--bg-soft);
}

.context-pill-label{
  font-size:.92rem;
  font-weight:700;
  color:#374151;
}

.context-pill-warning{
  border-color:#f59e0b;
  background:#fff7ed;
}

.context-pill-warning .context-pill-label,
.context-pill-warning .context-pill-value{
  color:#b45309;
}

.context-pill-value{
  color: var(--muted);
  font-size:.95rem;
}

.context-select{
  width:auto;
  min-width:220px;
  max-width:320px;
  padding:.6rem .75rem;
}

.role-band{
  width: min(100% - 2rem, var(--content-max));
  margin: .6rem auto 0 auto;
}

.role-band .box{
  margin-bottom: 0;
}

.role-band-admin{
  border:1px solid rgba(59,130,246,0.45);
  background:rgba(59,130,246,0.06);
}

.role-band-land{
  border:1px solid rgba(249,115,22,0.5);
  background:rgba(249,115,22,0.06);
}

.role-band-note{
  font-size:.78rem;
  white-space:nowrap;
}

.role-band-note.admin-note{
  color:#2563eb;
}

.role-band-note.land-note{
  color:#ea580c;
}

/* =========================
   Footer
========================= */
.footer{
  padding: 0 1.25rem 2rem 1.25rem;
  color: var(--muted);
  font-size:.95rem;
}

.footer-inner{
  max-width: var(--content-medium);
  margin:0 auto;
  display:flex;
  justify-content:space-between;
  gap:1rem;
  flex-wrap:wrap;
  border-top:1px solid var(--border);
  padding-top:1rem;
}

.footer a{
  color: inherit;
  text-decoration:none;
}

.footer a:hover{
  text-decoration:underline;
}

.footer-links{
  display:flex;
  gap:1rem;
  flex-wrap:wrap;
}

.footer-app-link{
  display:inline-flex;
  align-items:center;
  gap:.4rem;
}

.footer-app-link img{
  width:18px;
  height:18px;
  border-radius:4px;
  background:#fff;
  box-shadow: 0 2px 6px rgba(0,0,0,.08);
}

/* =========================
   Form layouts / sections
========================= */
.form-grid-2{
  display:grid;
  grid-template-columns:repeat(2, minmax(0,1fr));
  gap:.8rem;
}

.form-grid-3{
  display:grid;
  grid-template-columns:repeat(3, minmax(0,1fr));
  gap:.8rem;
}

.form-grid-4{
  display:grid;
  grid-template-columns:repeat(4, minmax(0,1fr));
  gap:.8rem;
}

.form-row{
  display:flex;
  gap:.8rem;
  flex-wrap:wrap;
  align-items:flex-end;
}

.form-actions{
  display:flex;
  gap:.6rem;
  flex-wrap:wrap;
  margin-top:1rem;
}

.form-section{
  margin-top:1rem;
}

.form-section-title{
  margin:0 0 .5rem 0;
  font-size:1rem;
  font-weight:800;
  color: var(--text);
}

.field-compact label{
  margin-bottom:.3rem;
  font-size:.92rem;
  color: var(--muted);
  font-weight:600;
}

.divider{
  border:none;
  border-top:1px solid var(--border-soft);
  margin:1rem 0;
}

.message-success{
  margin-top:.7rem;
  padding:.8rem .95rem;
  border-radius: var(--radius-md);
  background: var(--success-bg);
  border:1px solid var(--success-border);
  color: var(--success);
  font-weight:700;
}

.message-error{
  margin-top:.7rem;
  padding:.8rem .95rem;
  border-radius: var(--radius-md);
  background: var(--danger-bg);
  border:1px solid var(--danger-border);
  color: var(--danger-text);
  font-weight:700;
}

/* =========================
   Generic dashboard helpers
========================= */
.kpi-row{
  display:flex;
  gap:.6rem;
  flex-wrap:wrap;
  margin-top:1rem;
}

.dashboard-stack{
  display:flex;
  flex-direction:column;
  gap:1rem;
}

.dashboard-topbar{
  display:flex;
  justify-content:space-between;
  align-items:flex-start;
  gap:1rem;
  flex-wrap:wrap;
}

.dashboard-top-actions{
  display:flex;
  gap:.6rem;
  flex-wrap:wrap;
}

.dashboard-grid{
  display:grid;
  grid-template-columns:repeat(2, minmax(0,1fr));
  gap:1rem;
}

.card-grid-2{
  display:grid;
  grid-template-columns:repeat(2, minmax(0,1fr));
  gap:1rem;
}

.dashboard-actions{
  margin-top:.8rem;
}

.tile-warning{
  background:#fffbeb;
  border-color:#fde68a;
}

/* =========================
   Filters / forms in dashboards
========================= */
.filter-row{
  display:flex;
  gap:.75rem;
  flex-wrap:wrap;
  align-items:flex-end;
  margin-top:1rem;
}

.filter-inline{
  display:flex;
  gap:.75rem;
  flex-wrap:wrap;
  align-items:flex-end;
}

/* =========================
   Dashboard Layout
========================= */
.dash-grid{
  display:grid;
  grid-template-columns:repeat(2, minmax(0,1fr));
  gap:1rem;
}

.dash-card{
  border:1px solid var(--border-soft);
  border-radius:20px;
  padding:1.15rem 1.2rem;
  background:#fff;
  box-shadow: var(--shadow-sm);
}

.dash-card h3{
  margin:0 0 .35rem 0;
  font-size:1.1rem;
}

.dash-card p{
  margin:0;
}

.dash-actions{
  display:flex;
  gap:.65rem;
  flex-wrap:wrap;
  margin-top:.85rem;
}

.dash-subactions{
  display:flex;
  gap:.5rem;
  flex-wrap:wrap;
  margin-top:.65rem;
}

.dash-subactions .pill{
  font-size:.92rem;
}

.dash-hero{
  margin-bottom:1rem;
}

.dash-hero .big{
  margin-bottom:.6rem;
}

.dash-wide{
  margin-top:1rem;
}

.dash-highlight{
  background:#fffbeb;
  border-color:#fde68a;
}

/* =========================
   List / report cards
========================= */
.list-card{
  border:1px solid var(--border-soft);
  border-radius:18px;
  padding:1rem 1.1rem;
  background:#fff;
  box-shadow: var(--shadow-sm);
}

.list-card + .list-card{
  margin-top:.9rem;
}

.list-card-top{
  display:flex;
  justify-content:space-between;
  align-items:flex-start;
  gap:1rem;
  flex-wrap:wrap;
}

.list-card-title{
  margin:0;
  font-size:1.2rem;
  font-weight:800;
}

.list-card-meta{
  color:var(--muted);
  margin-top:.25rem;
}

.kv-row{
  display:flex;
  gap:.5rem;
  flex-wrap:wrap;
  margin-top:.6rem;
}

/* =========================
   Stats grid / stat cards
========================= */
.stats-grid{
  display:grid;
  grid-template-columns:repeat(4, minmax(0,1fr));
  gap:.75rem;
  margin-top:.85rem;
}

.compact-stats-grid{
  display:grid;
  grid-template-columns:repeat(3, minmax(0,1fr));
  gap:.75rem;
  margin-top:.85rem;
}

.stat-card{
  border:1px solid var(--border-soft);
  border-radius:14px;
  padding:.8rem .95rem;
  background:var(--bg-soft);
}

.stat-label{
  color:var(--muted);
  font-size:.92rem;
}

.stat-value{
  font-size:1.45rem;
  font-weight:900;
  line-height:1.15;
  margin-top:.2rem;
}

/* =========================
   Notes / expandable info
========================= */
.note-toggle{
  display:inline-flex;
  gap:.4rem;
  align-items:center;
  padding:.18rem .6rem;
  border:1px solid var(--border);
  border-radius:999px;
  background:var(--bg-soft);
  color:#444;
  font-size:.9rem;
  cursor:pointer;
  font:inherit;
}

.note-box{
  margin-top:.7rem;
  border-left:4px solid #e5e7eb;
  background:var(--bg-soft);
  border-radius:8px;
}

.note-box-inner{
  padding:.65rem .8rem;
  color:#374151;
  font-size:.95rem;
  line-height:1.45;
  white-space:pre-wrap;
}

/* =========================
   KPI cards
========================= */
.kpi-grid{
  display:grid;
  grid-template-columns:repeat(auto-fit, minmax(120px, 1fr));
  gap:.75rem;
  margin-top:1rem;
}

.kpi-card{
  border:1px solid var(--border-soft);
  border-radius:16px;
  background:var(--bg-soft);
  padding:.8rem .95rem;
}

.kpi-label{
  color:var(--muted);
  font-size:.92rem;
}

.kpi-value{
  font-weight:900;
  font-size:1.5rem;
  line-height:1.1;
  margin-top:.2rem;
}

/* =========================
   Responsive
========================= */
@media (max-width: 1100px){
  .stats-grid{
    grid-template-columns:repeat(2, minmax(0,1fr));
  }
}

@media (max-width: 900px){
  .right-panels,
  .grid2,
  .dashboard-grid,
  .card-grid-2,
  .dash-grid{
    grid-template-columns:1fr;
  }

  .form-grid-4{
    grid-template-columns:repeat(2, minmax(0,1fr));
  }

  .form-grid-3{
    grid-template-columns:repeat(2, minmax(0,1fr));
  }

  .compact-stats-grid{
    grid-template-columns:1fr;
  }

  .kpi-grid{
    grid-template-columns:repeat(2, minmax(0,1fr));
  }
}

@media (max-width: 700px){
  .stats-grid{
    grid-template-columns:1fr;
  }
}

@media (max-width: 640px){
  body{
    font-size:16px;
  }

  .page{
    width: min(100% - 1rem, var(--content-max));
    margin: 1rem auto;
  }

  .page-wrap{
    padding-top:1.5rem;
    padding-left:.9rem;
    padding-right:.9rem;
  }

  .box{
    padding:1.15rem;
    border-radius:20px;
  }

  .app-note{
    flex-direction:column;
    align-items:flex-start;
  }

  .site-header,
  .role-band{
    width: min(100% - 1rem, var(--content-max));
  }

  .header-top,
  .header-bottom,
  .role-band-inner,
  .context-form,
  .row,
  .controls,
  .footer-inner,
  .footer-links{
    flex-direction:column;
    align-items:stretch;
  }

  .header-right{
    width:100%;
  }

  .context-select{
    width:100%;
    max-width:none;
  }

  .role-band-note{
    white-space:normal;
  }

  .form-grid-2,
  .form-grid-3,
  .form-grid-4{
    grid-template-columns:1fr;
  }

  .kpi-grid{
    grid-template-columns:1fr;
  }

  .content-medium,
  .content-narrow{
    max-width:none;
  }

  button,
  .button,
  .btn,
  .btn-secondary,
  .btn-passkey{
    width:100%;
  }
}

.login-header img{
  width:34px !important;
  height:34px !important;
  object-fit:cover;
  border-radius:20%;
}

.app-note a{
  display:block;
  width:76px;
  height:76px;
  flex:0 0 76px;
}

.app-note a img{
  display:block;
  width:100% !important;
  height:100% !important;
  object-fit:cover;
  border-radius:20%;
}