/*
 * Default theme = the 6Q Design System.
 *
 * Ported from Ivan's Claude Design project "6Q Design System" (tokens/*.css,
 * components/core, components/forms, components/sixq, ui_kits/my6q_admin,
 * ui_kits/poll_questionnaire). That system is a faithful record of the
 * legacy my.6q.io look (CoreUI 2 / Bootstrap 4.1.2 as themed by 6Q): hot
 * yellow #FADC09 for primary actions, teal #099dba card headers, a dark
 * #344650 sidebar, Open Sans at 14px, slate body text on a light grey field.
 *
 * Selected via `Rails.application.config.x.theme` (config/application.rb,
 * THEME env var) and loaded by app/views/layouts/application.html.erb. A
 * future theme is a new file in this directory targeting the same
 * selectors and custom properties with different values.
 *
 * Layout of this file:
 *   1. Tokens (verbatim from the design system's tokens/ directory)
 *   2. Base elements (body, type, links, tables, forms, buttons)
 *   3. Components (.ds-* classes, one block per design-system component)
 *   4. App shell (header, sidebar, footer, main)
 *   5. Screen-specific rules (login, poll questionnaire, reports)
 */

@import url("https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300;0,400;0,600;0,700;1,300;1,400;1,700&display=swap");

/* ==========================================================================
   1. Tokens
   ========================================================================== */

:root {
  /* ---- tokens/typography.css ---- */
  --font-sans: "Open Sans", sans-serif;
  --font-mono: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
  --font-icon: "Ionicons";
  --font-size-base: 0.875rem;
  --font-size-sm: 0.765625rem;
  --font-size-lg: 1.09375rem;
  --font-size-h1: 2.1875rem;
  --font-size-h2: 1.75rem;
  --font-size-h3: 1.53125rem;
  --font-size-h4: 1.3125rem;
  --font-size-h5: 1.09375rem;
  --font-size-h6: 0.875rem;
  --font-size-display-3: 4.5rem;
  --font-size-small: 80%;
  --font-weight-light: 300;
  --font-weight-normal: 400;
  --font-weight-bold: 700;
  --line-height-base: 1.5;
  --line-height-heading: 1.2;
  --headings-margin-bottom: 0.5rem;

  /* ---- tokens/colors.css ---- */
  --white: #fff;
  --black: #000;
  --gray-base: #181b1e;
  --gray-100: #f0f3f5;
  --gray-200: #e4e7ea;
  --gray-300: #c8ced3;
  --gray-400: #acb4bc;
  --gray-500: #8f9ba6;
  --gray-600: #73818f;
  --gray-700: #5c6873;
  --gray-800: #2f353a;
  --gray-900: #23282c;
  --yellow: #FADC09;
  --blue: #0697B4;
  --light-blue: #B2E0E9;
  --green: #4dbd74;
  --red: #f86c6b;
  --orange: #f8cb00;
  --light: #F6F6F6;
  --dark: #152A36;
  --yellow-text: #f4db0d;
  --yellow-alt: #f4db0a;
  --teal-header: #099dba;
  --teal-features: #0a8ea8;
  --ink-black: #2b2c2e;
  --slate-body: #506069;
  --slate-muted: #6f7e8c;
  --sidebar-hover-ink: #152a36;

  --primary: var(--yellow);
  --secondary: var(--light-blue);
  --success: var(--green);
  --info: var(--light-blue);
  --warning: var(--yellow);
  --danger: var(--red);

  --surface-app: #efefef;
  --surface-card: var(--white);
  --surface-card-header: var(--teal-header);
  --surface-card-admin-header: var(--gray-200);
  --surface-card-display: #f3f3f3;
  --surface-card-tip: var(--blue);
  --surface-sidebar: #344650;
  --surface-sidebar-hover: #253239;
  --surface-sidebar-active: var(--light);
  --surface-navbar: var(--white);
  --surface-footer: rgba(0, 0, 0, .05);
  --surface-notification-bg: #f8f8f8;

  --text-default: var(--slate-body);
  --text-muted: var(--slate-muted);
  --text-heading: var(--gray-900);
  --text-inverse: var(--white);
  --text-on-primary: var(--dark);
  --text-link: var(--blue);
  --text-link-hover: var(--dark);
  --text-danger: var(--red);
  --text-success: var(--green);

  --border-color: var(--gray-300);
  --border-subtle: rgba(0, 0, 0, .125);
  --border-input: var(--gray-200);
  --border-width: 1px;

  --chart-fill: #FFF073;
  --chart-stroke: #F5D600;
  --chart-grid: transparent;

  --heat-critical: #fffcea;
  --heat-low: #fdf19f;
  --heat-medium: #fce754;
  --heat-high: #fadc09;
  --heat-highest: #b39d04;

  /* The four poll smileys' own colours (app/assets/images/smileys/*.svg) */
  --mood-awful: #FF5871;
  --mood-not-great: #FFC200;
  --mood-good: #24C6FA;
  --mood-awesome: #1FD466;

  --slider-track: #e0dfdf;
  --slider-track-focus: #c6c6c6;
  --slider-thumb: #fadc09;

  /* ---- tokens/spacing.css ---- */
  --space-0: 0;
  --space-1: 0.25rem;
  --space-2: 0.5rem;
  --space-3: 1rem;
  --space-4: 1.5rem;
  --space-5: 3rem;
  --card-spacer-y: 0.75rem;
  --card-spacer-x: 1.25rem;
  --card-tip-padding: 30px;
  --card-display-padding: 50px 0;
  --btn-padding-y: 0.375rem;
  --btn-padding-x: 0.75rem;
  --btn-padding-y-sm: 0.25rem;
  --btn-padding-x-sm: 0.5rem;
  --btn-padding-y-lg: 0.5rem;
  --btn-padding-x-lg: 1rem;
  --input-padding-y: 0.375rem;
  --input-padding-x: 0.75rem;
  --sidebar-nav-link-padding: 0.8rem;
  --sidebar-subnav-link-padding: 0.5rem 2.8rem;
  --navbar-padding-y: 0.5rem;
  --navbar-padding-x: 1rem;
  --main-padding-top: 1.5rem;

  /* ---- tokens/radii.css ---- */
  --radius-0: 0;
  --radius-sm: 0.2rem;
  --radius: 0.25rem;
  --radius-lg: 0.3rem;
  --radius-card-display: 5px;
  --radius-features: 4px;
  --radius-card-header: 15px;
  --radius-card-shadow: 16px;
  --radius-pill: 10px;
  --radius-circle: 50%;

  /* ---- tokens/shadows.css ---- */
  --shadow-card: 0 4px 7px 0 #CBCBCB;
  --shadow-sm: 0 .125rem .25rem rgba(0, 0, 0, .075);
  --shadow: 0 .5rem 1rem rgba(0, 0, 0, .15);
  --shadow-lg: 0 1rem 3rem rgba(0, 0, 0, .175);
  --shadow-dropdown: 0 0 0 1px rgba(0, 0, 0, .15), 0 4px 8px rgba(0, 0, 0, .1);
  --focus-ring-primary: 0 0 0 0.2rem rgba(250, 220, 9, .5);
  --focus-ring-danger: 0 0 0 0.2rem rgba(248, 108, 107, .5);

  /* ---- tokens/motion.css ---- */
  --transition-layout: .25s;
  --transition-btn: .15s ease-in-out;
  --transition-poll: all .2s ease;
  --transition-search: width .8s ease-in-out;
  --chart-animation-duration: 3000ms;
  --smiley-hover-lift: -10px;

  /* ---- tokens/layout.css ---- */
  --navbar-height: 62px;
  --navbar-brand-width: 250px;
  --navbar-brand-gap: 50px;
  --sidebar-width: 250px;
  --footer-height: 35px;
  --content-max-width-poll: 700px;
  --avatar-size: 36px;
  --avatar-sm: 24px;
  --avatar-lg: 72px;
  --gravatar-nav: 40px;
  --switch-width: 40px;
  --switch-height: 26px;
  --breakpoint-sm: 576px;
  --breakpoint-md: 768px;
  --breakpoint-lg: 992px;
  --breakpoint-xl: 1200px;

  /* Legacy theme aliases still referenced by a few structural rules. */
  --color-bg: var(--surface-app);
  --color-surface: var(--surface-card);
  --color-text: var(--text-default);
  --color-muted: var(--text-muted);
  --color-border: var(--border-color);
  --color-primary: var(--yellow);
  --color-danger: var(--red);
  --color-success: var(--green);
}

/* ==========================================================================
   2. Base elements
   ========================================================================== */

body {
  font-family: var(--font-sans);
  font-size: var(--font-size-base);
  line-height: var(--line-height-base);
  background: var(--surface-app);
  color: var(--text-default);
  -webkit-font-smoothing: antialiased;
}

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

a:hover {
  color: var(--text-link-hover);
  text-decoration: underline;
}

h1, h2, h3, h4, h5, h6 {
  margin: 0 0 var(--headings-margin-bottom);
  font-weight: 500; /* Bootstrap's $headings-font-weight; Open Sans resolves it to 400 */
  line-height: var(--line-height-heading);
  color: var(--text-heading);
}

h1 { font-size: var(--font-size-h1); }
h2 { font-size: var(--font-size-h2); }
h3 { font-size: var(--font-size-h3); }
h4 { font-size: var(--font-size-h4); }
h5 { font-size: var(--font-size-h5); }
h6 { font-size: var(--font-size-h6); }

p {
  margin: 0 0 1rem;
}

hr {
  margin: 1rem 0;
  border: 0;
  border-top: 1px solid var(--border-subtle);
}

small,
.small,
.ds-small {
  font-size: var(--font-size-small);
  font-weight: var(--font-weight-normal);
}

strong, b {
  font-weight: var(--font-weight-bold);
}

code {
  font-family: var(--font-mono);
  font-size: 87.5%;
  color: var(--pink, #e83e8c);
  word-break: break-word;
}

blockquote {
  margin: 0 0 1rem;
}

ul, ol {
  margin: 0 0 1rem;
  padding-left: 1.5rem;
}

.text-muted,
.ds-text-muted { color: var(--text-muted) !important; }
.ds-text-center { text-align: center; }
.ds-text-right { text-align: right; }
.ds-text-danger { color: var(--text-danger); }
.ds-text-success { color: var(--text-success); }
.ds-text-heading { color: var(--text-heading); }
.ds-text-caps { text-transform: uppercase; letter-spacing: .03em; }
.ds-nowrap { white-space: nowrap; }
.ds-mb-0 { margin-bottom: 0 !important; }
.ds-mt-0 { margin-top: 0 !important; }
.ds-mt-3 { margin-top: var(--space-3) !important; }
.ds-mb-3 { margin-bottom: var(--space-3) !important; }
.ds-hidden { display: none !important; }

.lead,
.ds-lead {
  font-size: var(--font-size-lg);
  font-weight: var(--font-weight-light);
}

/* Ionicons help circle next to a label or metric title, as every 6Q field
   and metric carries: <i class="ion ion-ios-help-circle-outline ds-help" title="..."></i> */
.ds-help {
  margin-left: 0.35rem;
  color: var(--gray-600);
  cursor: help;
}

/* Tables (components/core/Table.jsx) -----------------------------------------
   Every <table> gets the design-system table; modifiers: .ds-table-striped,
   .ds-table-hover (6Q's yellow row hover), .ds-table-sm (condensed),
   .ds-table-head-light (grey thead). */

table {
  width: 100%;
  margin-bottom: 1rem;
  border-collapse: collapse;
  background: transparent;
  color: var(--text-default);
}

th, td {
  padding: 0.75rem;
  text-align: left;
  vertical-align: top;
  border-top: 1px solid var(--border-color);
}

thead th {
  border-top: none;
  border-bottom: 2px solid var(--border-color);
  font-weight: var(--font-weight-bold);
  color: var(--gray-900);
  vertical-align: bottom;
}

.ds-table-sm th,
.ds-table-sm td {
  padding: 0.3rem 0.75rem;
}

.ds-table-striped tbody tr:nth-of-type(odd) {
  background: var(--gray-100);
}

.ds-table-hover tbody tr:hover {
  background: var(--yellow);
  color: var(--gray-900);
}

.ds-table-head-light thead {
  background: var(--gray-100);
}

.ds-table-borderless th,
.ds-table-borderless td {
  border: 0;
}

tr.ds-row-deleted {
  text-decoration: line-through;
  color: #bfbfbf;
}

th.actions,
td.actions {
  text-align: right;
  white-space: nowrap;
}

td.actions > *,
th.actions > * {
  vertical-align: middle;
}

.ds-table-responsive {
  overflow-x: auto;
}

/* Forms (components/forms/Input.jsx, Select.jsx, FormRow.jsx) ------------ */

label {
  display: inline-block;
  margin-bottom: 0.5rem;
}

input[type="text"],
input[type="email"],
input[type="password"],
input[type="number"],
input[type="search"],
input[type="url"],
input[type="tel"],
input[type="date"],
input[type="time"],
input[type="datetime-local"],
input[type="file"],
select,
textarea,
.ds-input,
.ds-select {
  display: block;
  width: 100%;
  padding: var(--input-padding-y) var(--input-padding-x);
  font-family: var(--font-sans);
  font-size: var(--font-size-base);
  line-height: var(--line-height-base);
  color: var(--gray-700);
  background: var(--white);
  border: 1px solid var(--border-input);
  border-radius: var(--radius);
  outline: none;
  transition: border-color var(--transition-btn), box-shadow var(--transition-btn);
}

input[type="file"] {
  padding: calc(var(--input-padding-y) - 1px) var(--input-padding-x);
}

textarea {
  resize: vertical;
  min-height: 6rem;
}

input:focus,
select:focus,
textarea:focus,
.ds-input:focus,
.ds-select:focus {
  border-color: var(--gray-400);
  box-shadow: var(--focus-ring-primary);
}

input:disabled,
select:disabled,
textarea:disabled {
  background: var(--gray-100);
  opacity: 1;
}

input::placeholder,
textarea::placeholder {
  color: var(--gray-500);
}

input.ds-invalid,
select.ds-invalid,
textarea.ds-invalid {
  border-color: var(--red);
  color: var(--text-danger);
}

input[type="checkbox"],
input[type="radio"] {
  width: auto;
  margin: 0 0.4rem 0 0;
  vertical-align: middle;
}

input[type="checkbox"] + label,
input[type="radio"] + label {
  display: inline;
  margin: 0;
  font-weight: var(--font-weight-normal);
}

/* The horizontal form row used across 6Q: bold label (with optional help
   circle) in a 4/12 gutter, control in the remaining 8/12.
   <div class="ds-form-row"><label>..</label><div>..field..</div></div>
   .ds-form-row-stacked puts the label above the field instead. */
.ds-form-row {
  display: grid;
  grid-template-columns: minmax(0, 4fr) minmax(0, 8fr);
  gap: 1rem;
  align-items: start;
  margin-bottom: 1rem;
}

.ds-form-row > label {
  margin: 0;
  padding-top: calc(var(--input-padding-y) + 1px);
  font-weight: var(--font-weight-bold);
  color: var(--text-default);
}

.ds-form-row-stacked {
  grid-template-columns: 1fr;
  gap: 0.25rem;
}

.ds-form-row-stacked > label {
  padding-top: 0;
}

.ds-form-row .ds-form-check {
  padding-top: calc(var(--input-padding-y) + 1px);
}

.ds-form-check label {
  font-weight: var(--font-weight-normal);
}

.ds-field-error {
  margin-top: 0.25rem;
  color: var(--text-danger);
  font-size: var(--font-size-sm);
}

.ds-form-text {
  display: block;
  margin-top: 0.25rem;
  color: var(--text-muted);
  font-size: var(--font-size-sm);
}

.ds-form-actions {
  display: flex;
  justify-content: flex-end;
  gap: 0.5rem;
  margin-top: 1rem;
}

.ds-form-actions-left {
  justify-content: flex-start;
}

/* Unported "vertical" forms wrap each field in a bare <div> -- give that
   shape the same row layout as .ds-form-row so a form that has not been
   touched still reads as a 6Q form. `:has()` is this app's baseline (see
   ApplicationController#allow_browser). */
form > div:not([class]):has(> label:only-of-type) {
  display: grid;
  grid-template-columns: minmax(0, 4fr) minmax(0, 8fr);
  gap: 1rem;
  align-items: start;
  margin-bottom: 1rem;
}

form > div:not([class]):has(> label:only-of-type) > label:first-child {
  margin: 0;
  padding-top: calc(var(--input-padding-y) + 1px);
  font-weight: var(--font-weight-bold);
}

/* A checkbox/radio's own label after it (compact toggle rows). */
form > div:not([class]):has(> input[type="checkbox"] + label),
form > div:not([class]):has(> input[type="radio"] + label) {
  display: block;
}

fieldset {
  min-width: 0;
  margin: 0 0 1rem;
  padding: 1rem 1.25rem;
  border: 1px solid var(--border-color);
  border-radius: var(--radius);
}

legend {
  width: auto;
  padding: 0 0.4rem;
  font-size: var(--font-size-lg);
  font-weight: var(--font-weight-bold);
  color: var(--text-heading);
}

/* Rich text (Trix) -- the invite/reminder email text on the poll template
   form. The editor takes the design system's input treatment; the toolbar
   keeps Trix's own glyphs minus the attachment button (the editors are text
   only, see application.js). The backing <textarea> is hidden but keeps its
   name so the field submits exactly as before. */
trix-editor.ds-rich-text {
  display: block;
  min-height: 8rem;
  padding: var(--input-padding-y) var(--input-padding-x);
  font-family: var(--font-sans);
  font-size: var(--font-size-base);
  line-height: var(--line-height-base);
  color: var(--gray-700);
  background: var(--white);
  border: 1px solid var(--border-input);
  border-radius: var(--radius);
  outline: none;
  transition: border-color var(--transition-btn), box-shadow var(--transition-btn);
}

trix-editor.ds-rich-text:focus {
  border-color: var(--gray-400);
  box-shadow: var(--focus-ring-primary);
}

trix-editor.ds-rich-text a {
  color: var(--text-link);
}

trix-toolbar {
  margin-bottom: 0.5rem;
}

trix-toolbar .trix-button-group {
  border-color: var(--gray-300);
  border-radius: var(--radius);
}

trix-toolbar .trix-button {
  border-bottom: 0;
}

trix-toolbar .trix-button.trix-active {
  background: var(--yellow);
}

trix-toolbar [data-trix-button-group="file-tools"] {
  display: none;
}

/* Input group with a grey icon prepend (components/forms/InputGroup.jsx) */
.ds-input-group {
  position: relative;
  display: flex;
  flex-wrap: nowrap;
  align-items: stretch;
  width: 100%;
  margin-bottom: 1rem;
}

.ds-input-group-icon {
  display: flex;
  align-items: center;
  padding: var(--input-padding-y) var(--input-padding-x);
  background: var(--gray-100);
  border: 1px solid var(--border-input);
  border-right: 0;
  border-radius: var(--radius) 0 0 var(--radius);
  color: var(--gray-600);
  font-size: 1.15rem;
}

.ds-input-group > input,
.ds-input-group > select,
.ds-input-group > .ds-input {
  flex: 1 1 auto;
  min-width: 0;
  border-radius: 0 var(--radius) var(--radius) 0;
}

.ds-input-group > .ds-btn {
  border-radius: 0 var(--radius) var(--radius) 0;
}

/* Buttons (components/core/Button.jsx) --------------------------------------
   Bare <button> / input[type=submit] = primary yellow. Variants:
   .ds-btn-primary .ds-btn-secondary .ds-btn-success .ds-btn-danger
   .ds-btn-dark .ds-btn-light .ds-btn-black .ds-btn-outline-danger
   Sizes: .ds-btn-sm .ds-btn-lg. Width: .ds-btn-block. Poll: .ds-btn-poll. */

button,
input[type="submit"],
input[type="button"],
.ds-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.35em;
  padding: var(--btn-padding-y) var(--btn-padding-x);
  font-family: var(--font-sans);
  font-size: var(--font-size-base);
  font-weight: var(--font-weight-normal);
  line-height: var(--line-height-base);
  text-align: center;
  text-decoration: none;
  vertical-align: middle;
  white-space: nowrap;
  cursor: pointer;
  user-select: none;
  border: 1px solid var(--yellow);
  border-radius: var(--radius);
  background: var(--yellow);
  color: var(--gray-900);
  transition: background-color var(--transition-btn), border-color var(--transition-btn), box-shadow var(--transition-btn);
}

button:hover,
input[type="submit"]:hover,
input[type="button"]:hover,
.ds-btn:hover,
.ds-btn-primary:hover {
  background: #d8be04;
  border-color: #ccb304;
  color: var(--gray-900);
  text-decoration: none;
}

button:focus-visible,
input[type="submit"]:focus-visible,
.ds-btn:focus-visible {
  outline: none;
  box-shadow: var(--focus-ring-primary);
}

button:disabled,
input[type="submit"]:disabled,
.ds-btn:disabled,
.ds-btn.ds-disabled {
  opacity: 0.65;
  cursor: not-allowed;
}

.ds-btn-primary {
  background: var(--yellow);
  border-color: var(--yellow);
  color: var(--gray-900);
}

.ds-btn-secondary {
  background: var(--light-blue);
  border-color: var(--gray-300);
  color: var(--gray-900);
}

.ds-btn-secondary:hover {
  background: #94d4e1;
  border-color: #8ed1df;
  color: var(--gray-900);
}

.ds-btn-success {
  background: var(--green);
  border-color: var(--green);
  color: #fff;
}

.ds-btn-success:hover {
  background: #3ea662;
  border-color: #3a9d5d;
  color: #fff;
}

.ds-btn-danger {
  background: var(--red);
  border-color: var(--red);
  color: #fff;
}

.ds-btn-danger:hover {
  background: #f64846;
  border-color: #f63c3a;
  color: #fff;
}

.ds-btn-dark {
  background: var(--dark);
  border-color: var(--dark);
  color: #fff;
}

.ds-btn-dark:hover {
  background: #0a151a;
  border-color: #070f13;
  color: #fff;
}

.ds-btn-light {
  background: var(--light);
  border-color: var(--gray-300);
  color: var(--gray-900);
}

.ds-btn-light:hover {
  background: #e3e3e3;
  border-color: #dcdcdc;
  color: var(--gray-900);
}

.ds-btn-black {
  background: var(--ink-black);
  border-color: var(--ink-black);
  color: var(--yellow-alt);
}

.ds-btn-black:hover {
  background: #181819;
  border-color: #101011;
  color: var(--yellow-alt);
}

.ds-btn-outline-danger {
  background: transparent;
  border-color: var(--red);
  color: var(--red);
}

.ds-btn-outline-danger:hover {
  background: var(--red);
  border-color: var(--red);
  color: #fff;
}

.ds-btn-link {
  background: transparent;
  border-color: transparent;
  color: var(--text-link);
}

.ds-btn-link:hover {
  background: transparent;
  border-color: transparent;
  color: var(--text-link-hover);
  text-decoration: underline;
}

.ds-btn-sm {
  padding: var(--btn-padding-y-sm) var(--btn-padding-x-sm);
  font-size: var(--font-size-sm);
  border-radius: var(--radius-sm);
}

.ds-btn-lg {
  padding: var(--btn-padding-y-lg) var(--btn-padding-x-lg);
  font-size: var(--font-size-lg);
  border-radius: var(--radius-lg);
}

.ds-btn-block {
  display: flex;
  width: 100%;
}

/* Questionnaire button: 180px wide, 20px bold, `.btn-6q` in legacy */
.ds-btn-poll {
  width: 180px;
  padding: 10px var(--btn-padding-x);
  font-size: 20px;
  font-weight: var(--font-weight-bold);
  transition: var(--transition-poll);
}

/* A row of buttons/links that should sit inline (toolbars, table actions).
   `button_to` wraps its button in a block <form> -- application.css makes
   that inline; this just spaces the neighbours. */
.ds-btn-group,
.ds-toolbar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem;
}

.ds-toolbar {
  margin-bottom: 1rem;
}

.ds-toolbar form {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  margin: 0;
}

.ds-toolbar form input:not([type="submit"]),
.ds-toolbar form select {
  width: auto;
  min-width: 220px;
}

.ds-toolbar-right,
.ds-toolbar .ds-push-right {
  margin-left: auto;
}

/* ==========================================================================
   3. Components
   ========================================================================== */

/* Card (components/core/Card.jsx) --------------------------------------------
   .ds-card              default: white, 1px grey border, 0.25rem corners
   .ds-card-shadow       dashboard/report card: no border, 16px corners, shadow
   .ds-card-tip          blue Life Tip banner
   .ds-card-display      grey metric well
   .ds-card-header       teal cap, white text, 15px top corners
   .ds-card-header-admin grey cap, black text
   .ds-card-body / .ds-card-body-flush / .ds-card-footer */

.ds-card {
  position: relative;
  display: flex;
  flex-direction: column;
  min-width: 0;
  margin-bottom: 1.5rem;
  overflow: hidden;
  word-wrap: break-word;
  background: var(--surface-card);
  border: 1px solid var(--border-color);
  border-radius: var(--radius);
  color: var(--text-default);
}

.ds-card-shadow {
  border: none;
  border-radius: var(--radius-card-shadow);
  box-shadow: var(--shadow-card);
}

.ds-card-header {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.5rem 1rem;
  padding: var(--card-spacer-y) var(--card-spacer-x);
  background: var(--surface-card-header);
  color: #fff;
  border-bottom: 1px solid var(--border-color);
  border-top-left-radius: var(--radius-card-header);
  border-top-right-radius: var(--radius-card-header);
  font-size: var(--font-size-h2);
  line-height: var(--line-height-heading);
}

.ds-card-header h1,
.ds-card-header h2,
.ds-card-header h3 {
  margin: 0;
  font-size: var(--font-size-h2);
  color: #fff;
}

.ds-card-header h3 {
  font-size: var(--font-size-h3);
}

.ds-card-header small {
  display: block;
  font-size: var(--font-size-base);
  line-height: var(--line-height-base);
}

.ds-card-header a {
  color: #fff;
}

.ds-card-header .ds-help {
  color: rgba(255, 255, 255, .8);
}

.ds-card-header .ds-badge {
  font-size: var(--font-size-sm);
  vertical-align: middle;
}

.ds-card-header-title {
  flex: 1 1 auto;
  min-width: 0;
}

.ds-card-header-actions {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.5rem;
  margin-left: auto;
  font-size: var(--font-size-base);
  line-height: var(--line-height-base);
}

.ds-card-header-actions input:not([type="submit"]),
.ds-card-header-actions select {
  width: auto;
}

.ds-card-header-actions form {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.5rem;
  margin: 0;
}

.ds-card-header-actions label {
  margin: 0;
}

.ds-card-header-admin {
  background: var(--surface-card-admin-header);
  color: #000;
  border-top-left-radius: calc(var(--radius) - 1px);
  border-top-right-radius: calc(var(--radius) - 1px);
}

.ds-card-header-admin h1,
.ds-card-header-admin h2,
.ds-card-header-admin h3,
.ds-card-header-admin a {
  color: var(--text-heading);
}

.ds-card-body {
  flex: 1 1 auto;
  padding: var(--card-spacer-x);
}

.ds-card-body-flush {
  padding: 0;
}

.ds-card-body > :last-child {
  margin-bottom: 0;
}

.ds-card-section {
  padding: 1rem;
  border-bottom: 1px solid var(--border-subtle);
}

.ds-card-section:last-child {
  border-bottom: 0;
}

.ds-card-footer {
  padding: var(--card-spacer-y) var(--card-spacer-x);
  background: var(--gray-100);
  border-top: 1px solid var(--border-color);
}

.ds-card-tip {
  margin-bottom: 1.5rem;
  padding: var(--card-tip-padding);
  background: var(--surface-card-tip);
  border: none;
  border-radius: var(--radius-card-shadow);
  color: #fff;
  font-weight: var(--font-weight-bold);
  text-align: center;
}

.ds-card-tip a {
  display: inline-block;
  margin-top: 0.5rem;
  color: #fff;
  font-size: 16px;
  text-decoration: underline;
}

.ds-card-tip-title {
  margin-bottom: 0.5rem;
  font-size: var(--font-size-h4);
}

.ds-card-tip-body {
  font-size: 16px;
}

.ds-card-display {
  padding: var(--card-display-padding);
  background: var(--surface-card-display);
  border: none;
  border-radius: var(--radius-card-display);
  text-align: center;
  word-break: normal;
}

/* Two-pane card body split by a hairline (Account screen, dashboard mood) */
.ds-card-split {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
}

.ds-card-split > * {
  padding: 1rem;
}

.ds-card-split > * + * {
  border-left: 1px solid var(--border-subtle);
}

@media (max-width: 767px) {
  .ds-card-split > * + * {
    border-left: 0;
    border-top: 1px solid var(--border-subtle);
  }
}

/* Grids and rows used by the kit screens */
.ds-grid {
  display: grid;
  gap: 1.5rem;
}

.ds-grid-2 {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
  gap: 1.5rem;
}

.ds-grid-3 {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: 1.5rem;
}

.ds-grid-report {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 1rem;
}

.ds-stack {
  display: grid;
  gap: 1rem;
}

.ds-grid > .ds-card,
.ds-grid-2 > .ds-card,
.ds-grid-3 > .ds-card {
  margin-bottom: 0;
}

/* A grid row of cards is itself a page section: it carries the same 1.5rem
   gap beneath it that a single card does, so whatever follows (another
   row, a full-width card) is spaced identically. .ds-grid-report is the
   in-card two-column layout and keeps its own spacing. */
.ds-grid,
.ds-grid-2,
.ds-grid-3,
.dashboard-row {
  margin-bottom: 1.5rem;
}

.ds-card-body > .ds-grid:last-child,
.ds-card-body > .ds-grid-2:last-child,
.ds-card-body > .ds-grid-3:last-child {
  margin-bottom: 0;
}

/* Page-level alerts and toolbars sit between cards, so they take the card
   gap too (their own 1rem default is for use inside a card body). */
.app-main > .ds-alert,
.app-main > .ds-toolbar {
  margin-bottom: 1.5rem;
}

.ds-flex {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem;
}

.ds-flex-between {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
}

.ds-flex-center {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
}

/* Badge (components/core/Badge.jsx) ---------------------------------------- */

.ds-badge {
  display: inline-block;
  padding: 0.25em 0.4em;
  font-size: 75%;
  font-weight: var(--font-weight-bold);
  line-height: 1;
  text-align: center;
  white-space: nowrap;
  vertical-align: baseline;
  border-radius: var(--radius);
  background: var(--yellow);
  color: var(--gray-900);
}

.ds-badge-pill { border-radius: 10rem; padding-right: 0.6em; padding-left: 0.6em; }
.ds-badge-primary { background: var(--yellow); color: var(--gray-900); }
.ds-badge-secondary { background: var(--light-blue); color: var(--gray-900); }
.ds-badge-success { background: var(--green); color: #fff; }
.ds-badge-warning { background: var(--yellow); color: var(--gray-900); }
.ds-badge-danger { background: var(--red); color: #fff; }
.ds-badge-info { background: var(--light-blue); color: var(--gray-900); }
.ds-badge-dark { background: var(--dark); color: #fff; }
.ds-badge-light { background: var(--light); color: var(--gray-900); }
.ds-badge-default { background: var(--gray-200); color: var(--gray-900); }

/* Alert (components/core/Alert.jsx) -- flash messages and notices ------------ */

.ds-alert,
.flash,
.errors,
.notice,
p.warning {
  position: relative;
  margin-bottom: 1rem;
  padding: 0.75rem 1.25rem;
  border: 1px solid #fef5ba;
  border-radius: var(--radius);
  background: #fef8ce;
  color: #827205;
  font-size: var(--font-size-base);
}

.ds-alert-center { text-align: center; }

.ds-alert-danger,
.flash-alert,
.errors {
  background: #fee4e4;
  border-color: #fdd6d6;
  color: #813837;
}

.ds-alert-success,
.flash-notice {
  background: #dbf1e3;
  border-color: #cdecd8;
  color: #28623c;
}

.ds-alert-info,
.notice {
  background: #f0f9fb;
  border-color: #e9f6f9;
  color: #5c7479;
}

.ds-alert-warning,
p.warning {
  background: #fef8ce;
  border-color: #fef5ba;
  color: #827205;
}

.ds-alert ul,
.errors ul {
  margin: 0;
  padding-left: 1.1rem;
}

.ds-alert a,
.errors a,
.notice a {
  color: inherit;
  font-weight: var(--font-weight-bold);
}

/* Avatar (components/core/Avatar.jsx) -- Gravatar circles ------------------- */

.ds-avatar {
  width: var(--avatar-size);
  height: var(--avatar-size);
  padding: 0;
  border-radius: var(--radius-circle);
  object-fit: cover;
  background: var(--gray-200);
  vertical-align: middle;
}

.ds-avatar-sm { width: 24px; height: 24px; }
.ds-avatar-nav { width: 40px; height: 40px; }
.ds-avatar-lg { width: 60px; height: 60px; }
.ds-avatar-xl { width: 72px; height: 72px; }
.ds-avatar-inset { padding: 4px; }

.ds-avatar-row {
  display: flex;
  align-items: center;
  gap: 0.5rem;
}

.ds-avatar-row h6 {
  margin: 0;
}

/* Dropdown (components/core/Dropdown.jsx) -- native <details> --------------- */

.ds-dropdown {
  position: relative;
  display: inline-block;
}

.ds-dropdown > summary {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  padding: var(--btn-padding-y) var(--btn-padding-x);
  font-size: var(--font-size-base);
  line-height: var(--line-height-base);
  background: var(--light-blue);
  color: var(--gray-900);
  border: 1px solid var(--gray-300);
  border-radius: var(--radius);
  cursor: pointer;
  list-style: none;
  user-select: none;
}

.ds-dropdown > summary::-webkit-details-marker {
  display: none;
}

.ds-dropdown > summary::after {
  content: "\25BC";
  font-size: 0.6em;
}

.ds-dropdown-sm > summary {
  padding: var(--btn-padding-y-sm) var(--btn-padding-x-sm);
  font-size: var(--font-size-sm);
}

.ds-dropdown-plain > summary {
  background: transparent;
  border-color: transparent;
}

.ds-dropdown-menu {
  position: absolute;
  top: calc(100% + 2px);
  left: 0;
  z-index: 20;
  min-width: 180px;
  padding: 0;
  margin: 0;
  list-style: none;
  background: #fff;
  border: 1px solid var(--gray-300);
  border-radius: var(--radius);
  box-shadow: var(--shadow-sm);
}

.ds-dropdown-right .ds-dropdown-menu {
  right: 0;
  left: auto;
}

.ds-dropdown-menu a,
.ds-dropdown-menu button,
.ds-dropdown-menu .button_to {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  width: 100%;
  margin: 0;
  padding: 0.5rem 1rem;
  font-size: var(--font-size-base);
  font-weight: var(--font-weight-normal);
  color: var(--text-default);
  background: transparent;
  border: 0;
  border-radius: 0;
  text-align: left;
  text-decoration: none;
  white-space: nowrap;
}

.ds-dropdown-menu .button_to {
  padding: 0;
}

.ds-dropdown-menu .button_to button {
  width: 100%;
}

.ds-dropdown-menu a:hover,
.ds-dropdown-menu button:hover {
  background: var(--gray-100);
  color: var(--text-default);
}

.ds-dropdown-menu a.ds-active {
  background: var(--yellow);
  color: #fff;
}

.ds-dropdown-menu i {
  color: var(--gray-600);
}

/* Pagination (components/core/Pagination.jsx) + Pagy's own nav markup ------- */

.ds-pagination,
.pagy.series-nav {
  display: flex;
  flex-wrap: wrap;
  margin: 1rem 0;
  padding: 0;
  list-style: none;
  font-size: var(--font-size-base);
}

.ds-pagination li {
  margin-left: -1px;
}

.ds-pagination a,
.ds-pagination span,
.pagy.series-nav a {
  display: block;
  margin-left: -1px;
  padding: 0.5rem 0.75rem;
  line-height: 1.25;
  border: 1px solid var(--gray-300);
  background: #fff;
  color: var(--slate-body);
  text-decoration: none;
}

.ds-pagination a:hover,
.pagy.series-nav a:hover {
  background: var(--gray-100);
  color: var(--slate-body);
}

.ds-pagination .ds-active a,
.ds-pagination a.ds-active,
.pagy.series-nav a[aria-current="page"] {
  background: var(--yellow);
  border-color: var(--gray-300);
  color: #fff;
  cursor: not-allowed;
}

.ds-pagination .ds-disabled a,
.ds-pagination a.ds-disabled,
.pagy.series-nav a[aria-disabled="true"]:not([aria-current="page"]),
.pagy.series-nav a:not([href]):not([aria-current="page"]) {
  color: var(--gray-300);
  cursor: not-allowed;
}

.ds-pagination-right,
.pagy-right {
  justify-content: flex-end;
}

/* Progress (components/core/Progress.jsx) -- yellow heat scale -------------- */

.ds-progress {
  display: flex;
  height: 1rem;
  overflow: hidden;
  background: var(--gray-100);
  border-radius: var(--radius);
  font-size: 0.75rem;
}

.ds-progress-map {
  height: 20px;
  margin-top: 1rem;
}

.ds-progress-bar {
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--gray-900);
  background: var(--heat-high);
  transition: width 0.6s ease;
}

.ds-heat-critical { background: var(--heat-critical); }
.ds-heat-low { background: var(--heat-low); }
.ds-heat-medium { background: var(--heat-medium); }
.ds-heat-high { background: var(--heat-high); }
.ds-heat-highest { background: var(--heat-highest); }

/* NPS promoter/passive/detractor breakdown -- same bar, three segments
   instead of five, matching the standard green/gray/red convention. */
.ds-heat-promoter { background: var(--green); }
.ds-heat-passive { background: var(--gray-400); }
.ds-heat-detractor { background: var(--red); }

/* Report response distribution -- the five-segment heat bar */
.response-distribution {
  display: flex;
  height: 20px;
  margin-top: 1rem;
  overflow: hidden;
  background: var(--gray-100);
  border-radius: var(--radius);
}

.response-critical { background: var(--heat-critical); }
.response-low { background: var(--heat-low); }
.response-medium { background: var(--heat-medium); }
.response-high { background: var(--heat-high); }
.response-highest { background: var(--heat-highest); }

/* Switch (components/core/Switch.jsx) -- CoreUI 40x26 toggle ---------------- */

.ds-switch {
  position: relative;
  display: inline-block;
  width: var(--switch-width);
  height: var(--switch-height);
  margin: 0;
  vertical-align: middle;
  cursor: pointer;
}

.ds-switch input {
  position: absolute;
  width: 0;
  height: 0;
  margin: 0;
  opacity: 0;
}

.ds-switch-track {
  position: absolute;
  inset: 0;
  background: #fff;
  border: 1px solid var(--gray-300);
  border-radius: calc(var(--switch-height) / 2);
  transition: background-color var(--transition-btn), border-color var(--transition-btn);
}

.ds-switch-knob {
  position: absolute;
  top: 2px;
  left: 2px;
  width: calc(var(--switch-height) - 4px);
  height: calc(var(--switch-height) - 4px);
  background: var(--gray-300);
  border-radius: var(--radius-circle);
  transition: left var(--transition-btn), background-color var(--transition-btn);
}

.ds-switch input:checked ~ .ds-switch-track {
  background: var(--yellow);
  border-color: var(--yellow);
}

.ds-switch input:checked ~ .ds-switch-knob {
  left: calc(var(--switch-width) - var(--switch-height) + 1px);
  background: #fff;
}

.ds-switch input:focus-visible ~ .ds-switch-track {
  box-shadow: var(--focus-ring-primary);
}

.ds-switch input:disabled ~ * {
  opacity: 0.5;
}

/* A switch with its text label beside it (a standalone toggle rather than
   a labelled form row). */
.ds-switch-row {
  display: flex;
  align-items: center;
  gap: 0.6rem;
}

.ds-switch-row > label:not(.ds-switch) {
  margin: 0;
  font-weight: var(--font-weight-normal);
}

/* List group (ReportScreen's ListGroup/ListRow) ----------------------------- */

.ds-list-group,
.report-stat-list {
  margin: 0 0 1rem;
  padding: 0;
  list-style: none;
  border-top: 1px solid var(--border-subtle);
}

.ds-list-group li,
.report-stat-list li {
  display: flex;
  justify-content: space-between;
  gap: 1rem;
  padding: 0.75rem 1.25rem;
  background: #fff;
  border: 1px solid var(--border-subtle);
  border-top: none;
}

/* The label never needs to wrap -- it's the value (a poll's segment list,
   a timezone's full GMT-offset label, ...) that can run long enough to
   overrun the card. Flex items default to a min-width of their own
   max-content size, which is what forced the value past the card's edge
   instead of wrapping -- `min-width: 0` lets it actually shrink to wrap
   within the available space. */
.ds-list-group li > span:first-child,
.report-stat-list li > span:first-child {
  flex-shrink: 0;
}

.ds-list-group li > strong,
.ds-list-group li > .ds-list-value,
.report-stat-list li > strong {
  text-align: right;
  min-width: 0;
  overflow-wrap: break-word;
}

.ds-list-group-flush,
.ds-list-group-flush li {
  border-left: 0;
  border-right: 0;
}

/* Plain divided list (dashboard "Latest Reports" / "High Fives") */
.ds-divided-list {
  margin: 0;
  padding: 0;
  list-style: none;
}

.ds-divided-list li {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  padding: 0.6rem 0;
  border-top: 1px solid var(--border-subtle);
}

.ds-divided-list li:first-child {
  border-top: none;
}

.ds-divided-list li > .ds-grow {
  flex: 1;
}

/* Mood icon (components/sixq/MoodIcon.jsx) -- Ionicons arrow glyphs ---------- */

.ds-mood-icon,
.direction-up,
.direction-down,
.direction-even {
  display: inline-block;
  font-family: var(--font-icon);
  font-size: 1.4rem;
  font-style: normal;
  font-weight: normal;
  line-height: 1;
  vertical-align: middle;
}

.ds-mood-icon-lg {
  font-size: 2rem;
  transform: translateY(-6px);
}

.ds-mood-icon-up::before,
.direction-up::before { content: "\f3d8"; color: var(--green); }
.ds-mood-icon-down::before,
.direction-down::before { content: "\f3d0"; color: var(--red); }
.ds-mood-icon-even::before,
.direction-even::before { content: "\f1fc"; color: var(--gray-600); }

/* Mood stat (components/sixq/MoodStat.jsx) -- Team Mood / Participation ------
   <div class="ds-mood-stat">
     <strong class="ds-mood-stat-title">Team Mood <i class="ion ion-ios-help-circle-outline ds-help"></i></strong>
     <div class="ds-mood-stat-well">
       <strong class="ds-mood-stat-value">79%</strong>
       <div class="ds-mood-stat-delta"><span class="ds-mood-icon ds-mood-icon-up"></span><h2>4%</h2></div>
     </div>
   </div> */

.ds-mood-stat-title {
  display: block;
  margin-bottom: 0.5rem;
  color: var(--text-muted);
}

.ds-mood-stat-well {
  padding: var(--card-display-padding);
  background: var(--surface-card-display);
  border-radius: var(--radius-card-display);
  text-align: center;
}

.ds-mood-stat-value {
  display: block;
  font-size: var(--font-size-display-3);
  font-weight: var(--font-weight-light);
  line-height: 1;
  color: var(--gray-900);
}

.ds-mood-stat-delta {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.25rem;
  margin-top: 0.5rem;
}

.ds-mood-stat-delta h2,
.ds-mood-stat-delta h4 {
  display: inline;
  margin: 0;
  font-size: var(--font-size-h2);
  color: var(--gray-900);
}

.ds-mood-stat-delta h4 {
  font-size: var(--font-size-h4);
  font-weight: var(--font-weight-normal);
  color: var(--text-muted);
}

.ds-sample-mode {
  opacity: 0.55;
}

/* Mood well (ReportScreen's MoodWell) -- the big percentage with LAST POLL /
   BENCHMARK split beneath it */

.ds-mood-well {
  padding: 1.5rem 0;
  background: var(--surface-card-display);
  border-radius: var(--radius-card-display);
  text-align: center;
}

.ds-mood-well-value {
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 3.5rem;
  font-weight: var(--font-weight-light);
  line-height: 1;
  color: var(--text-heading);
}

.ds-mood-well-value .ds-mood-icon,
.ds-mood-well-value [class^="direction-"] {
  margin-left: 0.25rem;
  font-size: 2rem;
  transform: translateY(-6px);
}

.ds-mood-well-caption {
  margin-top: 0.25rem;
  color: var(--text-muted);
  letter-spacing: .03em;
  text-transform: uppercase;
}

.ds-mood-well-split {
  display: grid;
  grid-template-columns: 1fr 1fr;
  margin-top: 1rem;
}

.ds-mood-well-split h4 {
  margin: 0;
  font-weight: var(--font-weight-normal);
  color: var(--text-heading);
}

.ds-mood-well-split .ds-mood-well-caption {
  font-size: var(--font-size-sm);
}

/* Report score colouring (ReportPresenter#percentage_class) */
.score-red { color: var(--red); }
.score-yellow { color: #b39d04; }
.score-green { color: var(--green); }

/* Empty state (components/sixq/EmptyState.jsx) ------------------------------- */

.ds-empty-state {
  margin: 1rem;
  padding: 1rem;
  text-align: center;
  color: var(--text-default);
}

.ds-empty-state img {
  width: 100%;
  max-width: 120px;
}

.ds-empty-state-wide img {
  max-width: 310px;
}

.ds-empty-state h2 {
  margin: 0 0 var(--headings-margin-bottom);
  font-size: var(--font-size-h2);
  color: var(--gray-900);
}

.ds-empty-state p {
  max-width: 520px;
  margin: 0 auto 0.75rem;
}

/* Features list (components/sixq/FeaturesList.jsx) -- teal upgrade panel ---- */

.ds-features-list {
  padding: 20px;
  margin-bottom: 1.5rem;
  background: var(--teal-features);
  border-radius: var(--radius-features);
  color: #fff;
}

.ds-features-list h3 {
  margin: 0 0 0.5em;
  font-size: var(--font-size-h3);
  font-weight: var(--font-weight-bold);
  color: #fff;
}

.ds-features-list ul {
  margin: 0;
  padding: 0;
  list-style: none;
}

.ds-features-list li {
  display: flex;
  gap: 0.6em;
  margin-bottom: 0.8em;
}

.ds-features-list li::before {
  content: "\f122";
  font-family: var(--font-icon);
  font-size: 14px;
  line-height: 1.5;
  color: var(--yellow);
}

.ds-features-list a {
  color: #fff;
  text-decoration: underline;
}

/* Tip card (components/sixq/TipCard.jsx) -- see .ds-card-tip above */

/* Question number badge in report/questionnaire headers */
.question-no,
.ds-qnumber {
  display: inline-block;
  padding: 0.35em 0.5em;
  margin-right: 0.5rem;
  font-size: 75%;
  font-weight: var(--font-weight-bold);
  line-height: 1;
  vertical-align: middle;
  border-radius: var(--radius);
  background: var(--yellow);
  color: var(--gray-900);
}

.hi5-count {
  display: inline-block;
  min-width: 1.6rem;
  margin-right: 0.5rem;
  padding: 0.25em 0.4em;
  font-size: 75%;
  font-weight: var(--font-weight-bold);
  line-height: 1;
  text-align: center;
  border-radius: var(--radius);
  background: var(--yellow);
  color: var(--gray-900);
}

/* Report comments (ReportScreen) */
.report-comments,
.ds-comments {
  margin-top: 1rem;
}

.report-comments summary,
.ds-comments summary {
  cursor: pointer;
  font-weight: var(--font-weight-bold);
  color: var(--text-link);
  margin-bottom: 0.5rem;
}

.report-comments blockquote,
.ds-comments blockquote,
.report-hi5-comments blockquote {
  margin: 2px 0 0.5rem 13px;
  padding-left: 0.75rem;
  border-left: 3px solid var(--ink-black);
}

.report-comments blockquote p,
.ds-comments blockquote p,
.report-hi5-comments blockquote p {
  margin: 0;
  font-weight: var(--font-weight-bold);
}

.report-comments footer,
.ds-comments footer,
.report-hi5-comments footer {
  color: var(--text-muted);
  font-size: var(--font-size-small);
}

/* Chart canvas wrapper (TrendChart) */
.chart-wrapper,
.ds-chart {
  position: relative;
  height: 240px;
  margin: 1rem;
}

/* "Sample data" badge overlaid directly on a chart (shared/_trend_chart) --
   so it's obvious at a glance the numbers aren't real, not just a caption
   someone could miss above the chart. */
.ds-chart-sample-badge {
  position: absolute;
  top: 0.5rem;
  left: 50%;
  transform: translateX(-50%);
  z-index: 1;
  padding: 0.25em 0.75em;
  font-size: var(--font-size-small);
  font-weight: var(--font-weight-bold);
  letter-spacing: 0.02em;
  text-transform: uppercase;
  color: #fff;
  background: rgba(0, 0, 0, 0.55);
  border-radius: var(--radius-pill);
  pointer-events: none;
}

/* Dialogs (controllers/dialog_controller.js, turbo_confirm_controller.js) --- */

dialog {
  padding: var(--card-spacer-x);
  background: var(--surface-card);
  border: 1px solid var(--border-color);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow);
  color: var(--text-default);
  max-width: 560px;
  width: 90vw;
}

dialog::backdrop {
  background: rgba(0, 0, 0, 0.4);
}

.confirm-dialog {
  max-width: 400px;
}

.confirm-dialog form {
  display: flex;
  justify-content: flex-end;
  gap: 0.5rem;
  margin-top: 1rem;
}

.confirm-dialog button[value="cancel"] {
  background: var(--light-blue);
  border-color: var(--gray-300);
}

/* Pin.js Hosted Fields (pin_hosted_fields_controller.js) ------------------- */

.pin-hosted-field {
  margin-bottom: 1rem;
}

.pin-field {
  height: 2.3rem;
  padding: 0.15rem 0.4rem;
  border: 1px solid var(--border-input);
  border-radius: var(--radius);
  background: var(--white);
}

.pin-field-error {
  margin: 0.25rem 0 0;
  color: var(--text-danger);
  font-size: var(--font-size-sm);
}

/* ==========================================================================
   4. App shell (ui_kits/my6q_admin/AppShell.jsx)
   ========================================================================== */

/* Header: 62px white bar, black logo at 40px, organisation name, account menu */

.app-header {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.5rem 1rem;
  min-height: var(--navbar-height);
  padding: 0 var(--navbar-padding-x);
  background: var(--surface-navbar);
  border-bottom: 1px solid var(--border-color);
}

.app-brand {
  display: flex;
  align-items: center;
  flex: 0 0 auto;
  width: var(--navbar-brand-width);
  margin-right: var(--navbar-brand-gap);
  color: var(--text-heading);
  text-decoration: none;
}

.app-brand:hover {
  text-decoration: none;
}

.app-brand-logo {
  display: block;
  height: 40px;
  width: auto;
}

.app-org {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  min-width: 0;
}

.app-org-name {
  margin: 0;
  font-size: calc(var(--font-size-h2) * 0.8);
  font-weight: var(--font-weight-bold);
  color: var(--dark);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.app-org-logo {
  display: block;
  height: 40px;
  width: auto;
  max-width: 160px;
  object-fit: contain;
}

.app-header-account {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  margin-left: auto;
}

.app-header-account .ds-dropdown > summary {
  background: transparent;
  border-color: transparent;
  padding-left: 0.25rem;
  color: var(--text-heading);
}

.app-header-account .ds-dropdown > summary:hover {
  background: var(--gray-100);
}

/* Headway's widget script (loaded via GTM, see layouts/_google_analytics.html.erb)
   styles #release-notes-icon itself once it attaches -- this just gives the
   bell a sane, centered position beforehand. */
.app-header-release-notes {
  display: flex;
  align-items: center;
  font-size: 1.25rem;
  color: var(--text-heading);
}

.app-header-release-notes:hover {
  color: var(--text-heading);
}

@media (max-width: 991px) {
  .app-brand {
    width: auto;
    margin-right: 1rem;
  }
}

/* Sidebar: 250px, #344650, white links, active link inverts to light */

.app-sidebar {
  display: flex;
  flex-direction: column;
  width: var(--sidebar-width);
  flex: 0 0 var(--sidebar-width);
  background: var(--surface-sidebar);
  overflow: hidden;
}

.app-sidebar ul {
  display: flex;
  flex-direction: column;
  flex: 1 1 auto;
  margin: 0;
  padding: 0;
  list-style: none;
}

/* Hamburger toggle: hidden above the mobile breakpoint (see
   @media (max-width: 767px) below), where the sidebar list is always
   visible via the unconditional rule above -- nothing here changes
   desktop at all. Qualified with the .app-sidebar ancestor, not just
   `.app-sidebar-toggle` alone: a plain class selector (0,1,0) loses to
   the design system's own `input[type="checkbox"] + label` form-field
   rule (0,1,2) a few lines down, which otherwise forced this visible on
   every screen size regardless of this rule (confirmed live). */
.app-sidebar .app-sidebar-toggle {
  display: none;
}

.app-sidebar a {
  display: flex;
  align-items: baseline;
  gap: 0.6rem;
  padding: var(--sidebar-nav-link-padding);
  font-size: var(--font-size-base);
  color: #fff;
  text-decoration: none;
  transition: background-color var(--transition-btn);
}

.app-sidebar a i {
  width: 1.1em;
  color: #D5D5D5;
  text-align: center;
}

.app-sidebar a:hover {
  background: var(--surface-sidebar-hover);
  color: #fff;
  text-decoration: none;
}

.app-sidebar a.active,
.app-sidebar a[aria-current="page"] {
  background: var(--surface-sidebar-active);
  color: var(--dark);
}

.app-sidebar a.active i,
.app-sidebar a[aria-current="page"] i {
  color: var(--dark);
}

.app-sidebar-footer {
  margin-top: auto;
}

.app-sidebar-footer a {
  align-items: center;
  font-weight: var(--font-weight-bold);
}

.app-sidebar-footer img {
  width: 45px;
  padding-right: 0.5rem;
}

@media (max-width: 767px) {
  .app-body {
    flex-direction: column;
  }

  .app-sidebar {
    width: 100%;
    flex-basis: auto;
  }

  /* Hamburger button -- styled to match the sidebar links. Same
     .app-sidebar-qualified-selector specificity note as the desktop
     hiding rule above applies here too. */
  .app-sidebar .app-sidebar-toggle {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    padding: var(--sidebar-nav-link-padding);
    color: #fff;
    cursor: pointer;
    user-select: none;
  }

  .app-sidebar-toggle i {
    width: 1.1em;
    text-align: center;
  }

  /* Collapsed by default -- the checkbox starts unchecked on every fresh
     page load, hiding the list until the label (the hamburger button
     above) is tapped. */
  .app-sidebar ul {
    display: none;
  }

  #app-sidebar-toggle:checked ~ ul {
    display: flex;
  }

  .app-sidebar-footer {
    display: none;
  }
}

/* Main content column */

.app-main {
  padding: var(--main-padding-top) 15px 24px;
  background: var(--surface-app);
}

.app-body--no-sidebar .app-main {
  width: 100%;
  max-width: calc(var(--content-max-width-poll) + 30px);
}

/* Footer: 35px translucent band, 85% type */

.app-footer {
  display: flex;
  align-items: center;
  flex: 0 0 auto;
  min-height: var(--footer-height);
  padding: 0.35rem 1rem;
  background: var(--surface-footer);
  font-size: 85%;
}

.app-footer p {
  margin: 0;
}

.app-footer a {
  color: var(--text-link);
}

/* ==========================================================================
   5. Screens
   ========================================================================== */

/* Login (ui_kits/my6q_admin/LoginScreen.jsx) -------------------------------- */

.ds-sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

.app-body--no-sidebar .app-main:has(> .login-screen) {
  display: flex;
  flex-direction: column;
  max-width: none;
  padding: 0;
  background-color: var(--surface-app);
  background-image: url("/assets/login-background-493c9a66.png");
  background-repeat: no-repeat;
  background-attachment: fixed;
  background-position: center center;
  background-size: cover;
}

.app-main:has(> .login-screen) > .ds-alert,
.app-main:has(> .login-screen) > .flash {
  width: calc(100% - 2rem);
  max-width: 860px;
  margin: 1.5rem auto -1rem;
}

.login-screen {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 2rem 1rem;
}

.login-screen-panels {
  display: flex;
  width: 100%;
  max-width: 860px;
}

.login-screen-form {
  flex: 1 1 0;
  margin-bottom: 0;
  border-radius: var(--radius) 0 0 var(--radius);
}

.login-screen-form .ds-card-body {
  padding: 2.25rem;
}

.login-screen-lead {
  margin: 0 0 1rem;
  color: var(--text-muted);
}

.login-screen-form .ds-input-group:last-of-type {
  margin-bottom: 1.5rem;
}

.login-screen-actions {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
}

.login-screen-actions a {
  font-weight: var(--font-weight-bold);
}

.login-screen-fineprint {
  margin-top: 3rem;
  text-align: center;
  font-size: var(--font-size-small);
}

.login-screen-fineprint p {
  margin: 0;
}

.login-screen-pitch {
  flex: 0 1 320px;
  margin-bottom: 0;
  padding: 3rem 0;
  background: var(--gray-800);
  border: none;
  border-radius: 0 var(--radius) var(--radius) 0;
  color: var(--white);
}

.login-screen-pitch .ds-card-body {
  display: flex;
}

.login-screen-pitch h2 {
  align-self: center;
  margin: 0;
  text-align: center;
  color: var(--white);
  font-size: var(--font-size-h2);
  line-height: 1.3;
}

@media (max-width: 767px) {
  .login-screen-panels {
    flex-direction: column;
  }

  .login-screen-form {
    /* Desktop's `flex: 1 1 0` sizes the form off the main axis, which is
       width there -- a 0 basis is fine since .login-screen-panels is a row
       and the card's own content still determines its height. Stacked
       into a column here, the main axis becomes height, and that same 0
       basis collapses the card to ~0px tall instead (confirmed: rendered
       at 1px, login form invisible) since there's no fixed container
       height for flex-grow to distribute into. `flex: none` makes it size
       off its own content again, like it already does on the cross axis. */
    flex: none;
    border-radius: var(--radius) var(--radius) 0 0;
  }

  .login-screen-pitch {
    flex-basis: auto;
    padding: 1.5rem 0;
    border-radius: 0 0 var(--radius) var(--radius);
  }

  .login-screen-pitch h2 {
    font-size: var(--font-size-h4);
  }
}

/* Logged-out single-column pages (signup, forgot password, terms, trial
   expired): one centred card, like the login form panel. */
.ds-auth-card {
  max-width: 560px;
  margin: 1.5rem auto;
}

.ds-auth-card .ds-card-body {
  padding: 2.25rem;
}

/* Poll questionnaire (ui_kits/poll_questionnaire/PollScreens.jsx) ------------
   A single 700px column; one card per screen. */

.poll-card {
  max-width: var(--content-max-width-poll);
  margin: 1rem auto;
  padding: 3rem 1.25rem;
  background: var(--surface-card);
  border: 1px solid var(--border-color);
  border-radius: var(--radius);
  text-align: center;
}

.poll-card h1 {
  font-size: var(--font-size-h1);
  color: var(--text-heading);
}

.poll-progress {
  margin-bottom: 0.4rem;
  font-size: var(--font-size-sm);
  color: var(--text-muted);
}

.poll-progress-track {
  height: 6px;
  margin-bottom: 1.5rem;
  overflow: hidden;
  background: var(--gray-200);
  border-radius: var(--radius-pill);
}

.poll-progress-fill {
  height: 100%;
  background: var(--yellow);
  transition: width 0.2s ease;
}

/* One card per question -- hidden/shown by poll_wizard_controller.js */
.poll-question {
  max-width: var(--content-max-width-poll);
  margin: 0 auto 1rem;
  overflow: hidden;
  background: var(--surface-card);
  border: none;
  border-radius: var(--radius-card-shadow);
  box-shadow: var(--shadow-card);
  text-align: center;
}

.poll-question > h2 {
  display: flex;
  align-items: flex-start;
  gap: 0.5rem;
  margin: 0;
  padding: var(--card-spacer-y) var(--card-spacer-x);
  background: var(--surface-card-header);
  color: #fff;
  border-top-left-radius: var(--radius-card-header);
  border-top-right-radius: var(--radius-card-header);
  font-size: var(--font-size-h2);
  text-align: left;
}

.poll-question > h2 small {
  align-self: center;
  font-size: var(--font-size-base);
}

.poll-question > h2 .qnumber {
  display: inline-block;
  flex: 0 0 auto;
  margin-top: 0.15em;
  padding: 0.35em 0.5em;
  font-size: 60%;
  font-weight: var(--font-weight-bold);
  line-height: 1;
  border-radius: var(--radius);
  background: var(--yellow);
  color: var(--gray-900);
}

.poll-question > :not(h2) {
  margin-left: var(--card-spacer-x);
  margin-right: var(--card-spacer-x);
}

.poll-question > h2 + * {
  margin-top: var(--card-spacer-x);
}

.poll-question > :last-child {
  margin-bottom: var(--card-spacer-x);
}

.poll-question > p {
  font-size: var(--font-size-lg);
  font-weight: var(--font-weight-light);
}

.poll-question textarea {
  font-size: 16px;
  text-align: left;
}

.poll-question > div > label {
  display: block;
  margin-bottom: 0.25rem;
  text-align: left;
}

.poll-question > div > select {
  text-align: left;
}

/* The four-smiley answer scale (components/sixq/SmileyScale.jsx) */
.smiley-options {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  justify-content: space-evenly;
  align-items: flex-start;
  gap: 0.5rem;
  margin: 20px 0 40px;
}

/* `.poll-question .smiley-options .smiley-option` outranks the generic
   `.poll-question > div > label` rule, so the option keeps its flex column
   and the four smileys stay on one row. */
.poll-question .smiley-options .smiley-option,
.smiley-option {
  position: relative;
  display: flex;
  flex: 1 1 0;
  flex-direction: column;
  align-items: center;
  gap: 0.5rem;
  min-width: 0;
  margin: 0;
  padding: 0.5rem 0.25rem;
  border-radius: var(--radius-card-shadow);
  text-align: center;
  cursor: pointer;
  transition: var(--transition-poll);
}

.smiley-option img {
  width: 100%;
  max-width: 7.5rem;
  height: auto;
  aspect-ratio: 1;
  padding: 4px;
  border-radius: var(--radius-circle);
  box-shadow: 0 0 0 4px transparent;
  transition: var(--transition-poll);
}

.smiley-option span {
  font-size: var(--font-size-base);
  font-weight: var(--font-weight-bold);
  color: var(--text-muted);
  transition: var(--transition-poll);
}

.smiley-option input[type="radio"] {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
}

.smiley-option:hover img,
.smiley-option:has(input:checked) img {
  transform: translateY(var(--smiley-hover-lift)) scale(1.06);
}

/* The chosen smiley gets a ring and a tinted well in its own mood colour and
   its label takes that colour too; the other three step well back. */
.smiley-option:has(input:checked) {
  background: color-mix(in srgb, var(--mood-color) 14%, #fff);
}

.smiley-option:has(input:checked) img {
  box-shadow: 0 0 0 4px var(--mood-color), 0 6px 14px rgba(0, 0, 0, .15);
  background: #fff;
}

.smiley-option:has(input:checked) span {
  color: var(--mood-color);
}

.smiley-option:has(input[value="0"]) { --mood-color: var(--mood-awful); }
.smiley-option:has(input[value="20"]) { --mood-color: var(--mood-not-great); }
.smiley-option:has(input[value="60"]) { --mood-color: var(--mood-good); }
.smiley-option:has(input[value="100"]) { --mood-color: var(--mood-awesome); }

.smiley-options:has(input:checked) .smiley-option:not(:has(input:checked)) img {
  opacity: 0.35;
  filter: grayscale(0.6);
}

.smiley-options:has(input:checked) .smiley-option:not(:has(input:checked)):hover img {
  opacity: 0.8;
  filter: none;
}

.smiley-option:has(input:focus-visible) img {
  outline: 2px solid var(--yellow);
  outline-offset: 4px;
}

/* NPS answer capture (0-10 scale) -- same visually-hidden-radio pattern as
   .smiley-option, but a plain numbered circle instead of a mood image.
   Same specificity bump as `.poll-question .smiley-options .smiley-option`
   above, and for the same reason: outranking the generic
   `.poll-question > div > label` rule (display: block; text-align: left),
   which otherwise wins on specificity and breaks the centered number. */
.nps-options {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  justify-content: space-between;
  gap: 0.4rem;
  margin: 20px 0 0.5rem;
}

.poll-question .nps-options .nps-option,
.nps-option {
  position: relative;
  display: flex;
  flex: 1 1 0;
  align-items: center;
  justify-content: center;
  min-width: 0;
  aspect-ratio: 1;
  border: 2px solid var(--text-muted);
  border-radius: var(--radius-circle);
  font-weight: var(--font-weight-bold);
  color: var(--text-muted);
  text-align: center;
  cursor: pointer;
  transition: var(--transition-poll);
}

.nps-option input[type="radio"] {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
}

.nps-option:hover,
.nps-option:has(input:checked) {
  border-color: var(--primary);
  background: color-mix(in srgb, var(--primary) 20%, #fff);
  color: var(--text-on-primary);
}

.nps-option:has(input:focus-visible) {
  outline: 2px solid var(--yellow);
  outline-offset: 2px;
}

.nps-anchors {
  display: flex;
  justify-content: space-between;
  font-size: var(--font-size-base);
  color: var(--text-muted);
  margin: 0 0 40px;
}

/* Yes/No answer capture (two options) -- same visually-hidden-radio
   pattern as .smiley-option/.nps-option, but two large labeled buttons
   rather than a mood image or a numbered circle. Same specificity bump,
   same reason: outranking the generic `.poll-question > div > label`
   rule. */
.yes-no-options {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  gap: 1rem;
  margin: 20px 0 40px;
}

.poll-question .yes-no-options .yes-no-option,
.yes-no-option {
  position: relative;
  display: flex;
  flex: 1 1 0;
  align-items: center;
  justify-content: center;
  min-width: 0;
  padding: 1.5rem 0;
  border: 2px solid var(--text-muted);
  border-radius: var(--radius);
  font-weight: var(--font-weight-bold);
  font-size: var(--font-size-lg);
  color: var(--text-muted);
  text-align: center;
  cursor: pointer;
  transition: var(--transition-poll);
}

.yes-no-option input[type="radio"] {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
}

.yes-no-option:hover,
.yes-no-option:has(input:checked) {
  border-color: var(--primary);
  background: color-mix(in srgb, var(--primary) 20%, #fff);
  color: var(--text-on-primary);
}

.yes-no-option:has(input:focus-visible) {
  outline: 2px solid var(--yellow);
  outline-offset: 2px;
}

/* Searchable dropdown (controllers/combobox_controller.js) -- the High Five
   recipient picker. The original <select> stays in the form, hidden. */
.combobox {
  position: relative;
  text-align: left;
}

.combobox-input {
  padding-right: 2.25rem;
}

.combobox-chosen {
  border-color: var(--green);
  font-weight: var(--font-weight-bold);
  color: var(--text-heading);
}

.combobox-clear {
  position: absolute;
  top: 0;
  right: 0;
  height: 100%;
  padding: 0 0.6rem;
  background: transparent;
  border: 0;
  color: var(--gray-600);
  font-size: 1.4rem;
  line-height: 1;
}

.combobox-clear:hover {
  background: transparent;
  color: var(--text-heading);
}

.combobox-list {
  position: absolute;
  top: calc(100% + 2px);
  left: 0;
  right: 0;
  z-index: 20;
  max-height: 240px;
  margin: 0;
  padding: 0;
  overflow-y: auto;
  list-style: none;
  background: #fff;
  border: 1px solid var(--gray-300);
  border-radius: var(--radius);
  box-shadow: var(--shadow-sm);
}

.combobox-list li {
  padding: 0.5rem 0.75rem;
  cursor: pointer;
}

.combobox-list li:hover,
.combobox-list li[aria-selected="true"] {
  background: var(--yellow);
  color: var(--gray-900);
}

.combobox-list .combobox-empty {
  color: var(--text-muted);
  cursor: default;
}

.combobox-list .combobox-empty:hover {
  background: transparent;
  color: var(--text-muted);
}

.poll-nav-buttons {
  display: flex;
  justify-content: space-between;
  gap: 0.75rem;
  margin-top: 3rem;
}

.poll-nav-buttons button,
.poll-nav-buttons input[type="submit"],
.poll-nav-buttons .button-link {
  width: 180px;
  padding: 10px var(--btn-padding-x);
  font-size: 20px;
  font-weight: var(--font-weight-bold);
  transition: var(--transition-poll);
}

.poll-nav-buttons .button-link,
.poll-nav-buttons button[data-action*="previous"],
.poll-nav-buttons button[type="button"]:not([data-poll-wizard-target="next"]) {
  background: var(--light-blue);
  border-color: var(--gray-300);
  color: var(--gray-900);
}

.poll-nav-buttons button:disabled {
  opacity: 0.65;
  cursor: not-allowed;
}

/* Legacy `.button-link`: a link styled as a secondary button */
.button-link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.35em;
  padding: var(--btn-padding-y) var(--btn-padding-x);
  font-size: var(--font-size-base);
  line-height: var(--line-height-base);
  border: 1px solid var(--gray-300);
  border-radius: var(--radius);
  background: var(--light-blue);
  color: var(--gray-900);
  text-decoration: none;
  cursor: pointer;
  transition: background-color var(--transition-btn), border-color var(--transition-btn);
}

.button-link:hover {
  background: #94d4e1;
  border-color: #8ed1df;
  color: var(--gray-900);
  text-decoration: none;
}

/* Legacy `.toolbar` / `.dashboard-row` hooks -> design-system equivalents */
.toolbar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem;
  margin-bottom: 1rem;
}

.toolbar form {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  margin: 0 0 0 auto;
}

.toolbar form input:not([type="submit"]),
.toolbar form select {
  width: auto;
  min-width: 220px;
}

.dashboard-row {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 1.5rem;
}

.dashboard-row > .ds-card {
  margin-bottom: 0;
}

/* Legacy `.card` / bare <section> on unported pages: white card default */
.card,
section:not([class]) {
  margin-bottom: 1.5rem;
  padding: var(--card-spacer-x);
  background: var(--surface-card);
  border: 1px solid var(--border-color);
  border-radius: var(--radius);
}

/* Print ---------------------------------------------------------------------- */

@media print {
  .app-header,
  .app-sidebar,
  .app-footer,
  .ds-alert,
  .report-actions,
  .ds-no-print {
    display: none !important;
  }

  .app-main {
    padding: 0;
    background: #fff;
  }

  .ds-card-shadow {
    box-shadow: none;
    border: 1px solid var(--border-color);
  }
}
