/* Portal chrome built on the Modernist tokens in styles.css. Take every color,
   font and spacing from those variables; don't edit styles.css itself. */

a { color: var(--color-accent-700); text-decoration: none; }
a:hover { color: var(--color-accent-800); }

body { min-height: 100vh; }

/* — header bar (every screen) — */
.app-header {
  display: flex; align-items: center; justify-content: space-between; gap: var(--space-6);
  padding: 0 var(--space-6); height: 60px;
  border-bottom: 2px solid var(--color-divider);
}
.app-header-left { display: flex; align-items: center; gap: 20px; min-width: 0; }
.app-header-right { display: flex; align-items: center; gap: 10px; }
.app-brand {
  display: flex; align-items: center; gap: 12px;
  font-family: var(--font-heading); font-weight: 800; font-size: 15px;
  letter-spacing: -0.01em; white-space: nowrap; color: var(--color-text);
}
.app-brand:hover { color: var(--color-text); }
.app-logo { display: block; height: 48px; width: auto; }
.app-header-rule { width: 2px; height: 22px; background: var(--color-divider); }
.app-kicker {
  font-size: 13px; font-weight: 500; letter-spacing: 0.04em; text-transform: uppercase;
  color: var(--color-neutral-700); white-space: nowrap;
}
.app-initials {
  width: 30px; height: 30px; display: flex; align-items: center; justify-content: center;
  background: var(--color-neutral-900); color: var(--color-neutral-100);
  font-family: var(--font-heading); font-weight: 700; font-size: 12px;
}
.app-user { font-size: 13px; font-weight: 500; white-space: nowrap; }
.app-signout, .app-switch { font-size: 13px; }

/* — sign-in screens, P1–P3 (_AuthLayout) — */
.auth { display: grid; grid-template-columns: minmax(0, 1fr) 46%; min-height: 100vh; }
.auth-brand {
  display: flex; flex-direction: column; justify-content: center; align-items: center;
  padding: 48px 56px; min-width: 0;
}
.auth-brand-block { display: flex; flex-direction: column; align-items: flex-start; max-width: 100%; }
.auth-logo { display: block; width: 280px; max-width: 100%; height: auto; }
.auth-rule { width: 64px; height: 4px; background: var(--color-accent); margin-top: 28px; }
.auth-tagline {
  font-size: 12px; font-weight: 600; letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--color-neutral-700); margin-top: 20px;
}
.auth-panel {
  display: flex; flex-direction: column; justify-content: center;
  padding: 48px 56px; min-width: 0;
  border-left: 2px solid var(--color-divider); background: var(--color-surface);
}
.auth-form { width: 100%; max-width: 400px; }
.auth-kicker {
  font-size: 11px; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--color-accent-700);
}
.auth-title {
  font-family: var(--font-heading); font-weight: 800; font-size: 30px;
  line-height: 1.1; letter-spacing: -0.02em; margin: 12px 0 0;
}
.auth-blurb { margin: 12px 0 0; font-size: 14px; line-height: 1.55; color: var(--color-neutral-800); }
.auth-fields { margin-top: 28px; display: flex; flex-direction: column; gap: 18px; }
.auth-rules {
  margin-top: 16px; padding-left: 14px; border-left: 2px solid var(--color-neutral-400);
  font-size: 12px; line-height: 1.6; color: var(--color-neutral-800);
}
.auth-notice {
  margin-top: 24px; padding: 16px 18px;
  border-left: 4px solid var(--color-accent); background: var(--color-accent-100);
}
.auth-notice-title { font-family: var(--font-heading); font-weight: 700; font-size: 15px; }
.auth-notice-body { font-size: 13px; line-height: 1.55; color: var(--color-neutral-900); }
.auth-notice-title + .auth-notice-body { margin-top: 6px; }
.auth-submit { margin-top: 28px; font-size: 15px; }
.auth-links {
  margin-top: 20px; display: flex; align-items: center; justify-content: space-between;
  gap: 16px; font-size: 13px;
}
.auth-links a { border-bottom: 1px solid var(--color-accent-300); }
.auth-links a:hover { border-bottom-color: var(--color-accent-700); }
.auth-foot {
  margin-top: 32px; padding-top: 20px; border-top: 2px solid var(--color-divider);
  font-size: 12px; line-height: 1.6; color: var(--color-neutral-700);
}
.field-validation-error { display: block; margin-top: 5px; font-size: 12px; color: var(--color-accent-700); }

/* — shared bits — */
.label-caps {
  font-size: 11px; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--color-neutral-700);
}
.stack-8 { display: flex; flex-direction: column; gap: 8px; }
.stack-10 { display: flex; flex-direction: column; gap: 10px; }
.hint { font-size: 12px; color: var(--color-neutral-700); }
.btn[aria-disabled="true"] { opacity: 0.45; pointer-events: none; }
.notice {
  margin: var(--space-4) var(--space-6) 0; padding: 16px 18px;
  border-left: 4px solid var(--color-accent); background: var(--color-accent-100);
  font-size: 13px; line-height: 1.55; color: var(--color-neutral-900);
}
.empty { border: 2px dashed var(--color-neutral-400); padding: 28px 24px; margin-top: 24px; max-width: 60ch; }
.empty-tight { padding: 24px; margin-top: 0; max-width: 52ch; }
.empty-title { font-family: var(--font-heading); font-weight: 700; font-size: 16px; }
.empty-body { font-size: 13px; line-height: 1.55; color: var(--color-neutral-800); margin-top: 8px; }

/* Segmented control as links or submit buttons (the design system's .seg uses radios). */
a.seg-opt, button.seg-opt {
  color: var(--color-text); background: transparent; border: 0; border-radius: 0; font: inherit; font-size: 13px;
}
.seg-opt.is-on { background: var(--color-accent); color: var(--color-bg); font-weight: 700; }
.seg-opt.is-on:hover { background: var(--color-accent-700); color: var(--color-bg); }
.seg-opt:has(input:checked) { font-weight: 700; }
button.seg-opt:disabled { cursor: not-allowed; opacity: 0.6; }

/* — dialogs: the designs use square, bordered dialogs with left-aligned actions — */
.dialog { border: 2px solid var(--color-divider); padding: 26px; gap: 0; }
.dialog-wide { width: min(540px, 100%); padding: 28px; }
.dialog-backdrop { z-index: 40; }
.dialog-backdrop-top { place-items: start center; padding: 64px 24px; overflow-y: auto; }
.dialog-title { font-weight: 800; letter-spacing: -0.01em; margin: 0; }
.dialog-wide .dialog-title { font-size: 24px; letter-spacing: -0.02em; }
.dialog-note { font-size: 13px; line-height: 1.55; color: var(--color-neutral-800); margin-top: 10px; max-width: 52ch; }
.dialog-fields { display: flex; flex-direction: column; gap: 18px; margin-top: 24px; }
.dialog-actions {
  justify-content: flex-start; align-items: center; gap: 10px;
  margin-top: 24px; padding-top: 18px; border-top: 2px solid var(--color-divider);
}
.check-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px 20px; }
.check { display: flex; align-items: center; gap: 10px; font-size: 14px; cursor: pointer; }
.check input { width: 16px; height: 16px; accent-color: var(--color-accent); }

/* — admin area (_AdminLayout) — */
.admin-nav {
  display: flex; align-items: center; gap: 4px; padding: 0 var(--space-6);
  border-bottom: 2px solid var(--color-divider);
}
.admin-nav-item {
  padding: 14px 16px; margin-bottom: -2px; font-size: 13px; font-weight: 500;
  color: var(--color-text); border-bottom: 3px solid transparent;
}
.admin-nav-item:hover { color: var(--color-text); border-bottom-color: var(--color-neutral-400); }
.admin-nav-item[aria-current="page"] { font-weight: 700; border-bottom-color: var(--color-accent); }

/* — A1 overview: three linked panels — */
.overview { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); }
.overview-area {
  display: flex; flex-direction: column; justify-content: flex-start;
  padding: 40px 28px 36px; color: var(--color-text); transition: background 120ms linear;
}
.overview-area + .overview-area { border-left: 2px solid var(--color-divider); }
.overview-area:hover { background: var(--color-accent-100); color: var(--color-text); }
.overview-count {
  font-size: 11px; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--color-accent-700);
}
.overview-label {
  font-family: var(--font-heading); font-weight: 800; font-size: 40px;
  line-height: 1.02; letter-spacing: -0.03em; margin: 16px 0 0;
}
.overview-note { font-size: 14px; line-height: 1.5; color: var(--color-neutral-800); margin-top: 14px; max-width: 30ch; }
.overview-action {
  margin-top: 20px; font-size: 13px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--color-accent-700);
}

.filters {
  display: flex; align-items: flex-end; gap: 20px; flex-wrap: wrap;
  padding: 20px var(--space-6); border-bottom: 2px solid var(--color-divider);
}
.filters .field { width: 320px; max-width: 100%; }
.table-wrap { padding: 0 var(--space-6) 40px; overflow-x: auto; }
.table td.strong { font-weight: 600; }
.table td.muted { color: var(--color-neutral-800); }
.nowrap { white-space: nowrap; }
.pager {
  display: flex; align-items: center; justify-content: space-between; gap: 24px;
  margin-top: 20px; font-size: 12px; color: var(--color-neutral-700);
}
.pager-buttons { display: flex; gap: 8px; }
.pager .btn { font-size: 13px; }

.breadcrumb { padding: 20px var(--space-6) 0; font-size: 13px; }
.breadcrumb-sep { color: var(--color-neutral-600); padding: 0 8px; }
.breadcrumb-current { color: var(--color-neutral-800); }
.page-head-tight { padding-top: 16px; }
.title-row { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.role-row { display: flex; align-items: center; gap: 12px; margin-top: 16px; flex-wrap: wrap; }
.head-actions { display: flex; gap: 10px; flex-wrap: wrap; }

.two-col { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); align-items: start; }
.col { padding: 28px var(--space-6) 40px; min-width: 0; }
.col + .col { border-left: 2px solid var(--color-divider); }
.section-head { display: flex; align-items: baseline; gap: 16px; margin-bottom: 8px; }
.section-title {
  font-family: var(--font-heading); font-weight: 800; font-size: 13px;
  letter-spacing: 0.14em; text-transform: uppercase; margin: 0;
}
.section-rule { flex: 1; height: 2px; background: var(--color-divider); }
.section-count { font-size: 12px; font-weight: 500; color: var(--color-neutral-700); white-space: nowrap; }
.section-note { font-size: 13px; line-height: 1.5; color: var(--color-neutral-800); margin: 0 0 20px; max-width: 52ch; }
.list-row {
  display: flex; align-items: center; justify-content: space-between; gap: 20px;
  padding: 14px 0; border-bottom: 1px solid var(--color-neutral-300);
}
.list-row-baseline { align-items: baseline; }
.list-row .btn { font-size: 13px; flex-shrink: 0; }
.list-title { font-size: 15px; font-weight: 600; min-width: 0; }
a.list-title { display: inline-block; }
.list-actions { display: flex; align-items: center; gap: 12px; flex-shrink: 0; }
.edit-fields { display: flex; flex-direction: column; gap: 14px; flex: 1; min-width: 0; max-width: 640px; }
.id-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 14px; }
.section-head-loose { margin-bottom: 20px; }
.section-head-spaced { margin: 40px 0 20px; }
.list-row-compact { padding: 12px 0; }
.list-name { font-size: 14px; font-weight: 500; }

/* — A9 Power BI facts and Test connection — */
.facts { margin: 0; }
.fact {
  display: grid; grid-template-columns: 180px minmax(0, 1fr); gap: 20px;
  padding: 14px 0; border-bottom: 1px solid var(--color-neutral-300);
}
.fact dt {
  font-size: 12px; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase;
  color: var(--color-neutral-700);
}
.fact dd { margin: 0; font-size: 14px; font-weight: 500; word-break: break-all; }
.test-row { display: flex; align-items: center; gap: 16px; margin-top: 20px; flex-wrap: wrap; }
.test-result { display: flex; align-items: baseline; gap: 8px; font-size: 13px; min-width: 0; }
.test-message { font-weight: 500; color: var(--color-neutral-800); }
.test-message-failed { font-weight: 400; color: var(--color-accent-700); }
.test-note { margin: 10px 0 0; max-width: 56ch; line-height: 1.5; }
.list-meta { font-size: 12px; color: var(--color-neutral-700); margin-top: 4px; }
.list-aside { font-size: 12px; color: var(--color-neutral-700); white-space: nowrap; flex-shrink: 0; }
.add-row { display: flex; align-items: flex-end; gap: 10px; margin-top: 24px; }
.add-row .field { flex: 1; }

/* — page heading block — */
.page-head {
  display: flex; align-items: flex-end; justify-content: space-between; gap: var(--space-8);
  flex-wrap: wrap; padding: var(--space-8) var(--space-6) 20px;
  border-bottom: 2px solid var(--color-divider);
}
.page-title {
  font-family: var(--font-heading); font-weight: 800; font-size: 34px;
  line-height: 1.05; letter-spacing: -0.02em; margin: 0;
}
.page-sub { font-size: 13px; color: var(--color-neutral-800); margin-top: 10px; }

.page-section { padding: var(--space-6); border-bottom: 2px solid var(--color-divider); }

/* — R1 report library — */
.library-search { width: 280px; max-width: 100%; margin: 0; }
.library-group { padding-bottom: var(--space-8); }
.report-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 16px; }
.report-card {
  display: flex; flex-direction: column; min-height: 150px; padding: 18px;
  border: 2px solid var(--color-neutral-500); background: var(--color-neutral-100); color: var(--color-text);
  transition: background 120ms linear, border-color 120ms linear;
}
.report-card:hover { border-color: var(--color-accent); background: var(--color-accent-100); color: var(--color-text); }
.report-card-name {
  font-family: var(--font-heading); font-weight: 700; font-size: 17px;
  line-height: 1.2; letter-spacing: -0.01em; text-wrap: pretty;
}
.report-card-description { font-size: 13px; line-height: 1.45; color: var(--color-neutral-800); margin-top: 8px; text-wrap: pretty; }
.report-card-foot {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  margin-top: auto; padding-top: 16px;
}
.report-card-refreshed { font-size: 11px; color: var(--color-neutral-700); }
.report-card-open {
  font-size: 12px; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase;
  color: var(--color-accent-700);
}

/* — R2 report viewer: fills the window below the 62px header — */
.viewer {
  display: grid; grid-template-columns: 268px minmax(0, 1fr);
  height: calc(100vh - 62px); height: calc(100dvh - 62px);
}
.viewer.rail-hidden { grid-template-columns: minmax(0, 1fr); }
.viewer.rail-hidden .viewer-rail { display: none; }
.viewer-rail {
  display: flex; flex-direction: column; overflow-y: auto;
  border-right: 2px solid var(--color-divider);
}
.viewer-rail-head { padding: 20px 20px 14px; border-bottom: 2px solid var(--color-divider); }
.viewer-rail-count { font-size: 12px; color: var(--color-neutral-700); margin-top: 6px; }
.viewer-rail-group { padding: 16px 0 8px; border-bottom: 2px solid var(--color-divider); }
.viewer-rail-group-name {
  padding: 0 20px 10px; font-size: 11px; font-weight: 700; letter-spacing: 0.1em;
  text-transform: uppercase; color: var(--color-accent-700);
}
.viewer-rail-item {
  display: block; padding: 12px 20px 12px 18px; border-left: 4px solid transparent;
  color: var(--color-text); transition: background 120ms linear;
}
.viewer-rail-item:hover { background: var(--color-neutral-200); color: var(--color-text); }
.viewer-rail-item[aria-current="page"] { border-left-color: var(--color-accent); background: var(--color-accent-100); }
.viewer-rail-name { display: block; font-size: 14px; font-weight: 600; line-height: 1.3; text-wrap: pretty; }
.viewer-rail-refreshed { display: block; font-size: 11px; color: var(--color-neutral-700); margin-top: 5px; }
.viewer-rail-note { margin-top: auto; padding: 16px 20px; font-size: 11px; line-height: 1.5; color: var(--color-neutral-600); }
.viewer-main { display: grid; grid-template-rows: auto minmax(0, 1fr); min-width: 0; overflow: hidden; }
.viewer-head {
  display: flex; align-items: flex-start; justify-content: space-between; gap: var(--space-8);
  padding: 20px var(--space-6); border-bottom: 2px solid var(--color-divider);
}
.viewer-title-block { min-width: 0; }
.viewer-title {
  font-family: var(--font-heading); font-weight: 800; font-size: 26px;
  line-height: 1.1; letter-spacing: -0.02em; margin: 0;
}
.viewer-description { margin: 8px 0 0; font-size: 13px; line-height: 1.5; color: var(--color-neutral-800); max-width: 76ch; text-wrap: pretty; }
.viewer-head-side { display: flex; align-items: center; gap: 20px; flex-shrink: 0; }
.viewer-meta-label {
  font-size: 10px; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--color-neutral-700);
}
.viewer-meta-value { font-size: 13px; font-weight: 600; margin-top: 4px; white-space: nowrap; }
.viewer-rail-toggle, .viewer-fullscreen { font-size: 13px; }
.viewer-fullscreen[hidden] { display: none; }
.viewer-body { min-height: 0; padding: 20px var(--space-6) var(--space-6); display: flex; }
.viewer-frame {
  position: relative; flex: 1; min-height: 0;
  border: 2px solid var(--color-divider); background: var(--color-neutral-200);
}
.viewer-embed, .viewer-embed iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
.viewer-status {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
  padding: var(--space-6); text-align: center; font-size: 14px; line-height: 1.55;
  color: var(--color-neutral-800); background: var(--color-neutral-200);
}
.viewer-status[hidden] { display: none; }
.page-note {
  padding: var(--space-6); font-size: 12px; line-height: 1.6;
  color: var(--color-neutral-700); max-width: 60ch;
}

@media (max-width: 800px) {
  .two-col, .overview { grid-template-columns: 1fr; }
  .overview-area + .overview-area { border-left: 0; border-top: 2px solid var(--color-divider); }
  .col + .col { border-left: 0; border-top: 2px solid var(--color-divider); }
  .auth { grid-template-columns: 1fr; }
  .auth-brand { padding: 32px var(--space-4) 24px; }
  .auth-logo { width: 140px; }
  .auth-panel { justify-content: flex-start; padding: 32px var(--space-4); border-left: 0; border-top: 2px solid var(--color-divider); }
  /* On narrow screens the report needs the whole width; "All reports" in the header leads back to the list. */
  .viewer { grid-template-columns: minmax(0, 1fr); }
  .viewer .viewer-rail { display: none; }
  .viewer-head { flex-direction: column; gap: 14px; }
  .viewer-rail-toggle { display: none; }
}

@media (max-width: 640px) {
  .app-header { padding: 0 var(--space-4); }
  .app-kicker, .app-user, .app-brand-name { display: none; }
  .page-head, .page-section, .page-note, .admin-nav, .filters, .table-wrap, .breadcrumb, .col, .viewer-head, .viewer-body {
    padding-left: var(--space-4); padding-right: var(--space-4);
  }
  .notice { margin-left: var(--space-4); margin-right: var(--space-4); }
  .check-grid, .id-grid, .fact { grid-template-columns: 1fr; }
  .fact { gap: 4px; }
}
