/* Shannan dashboard. colors.css is copied verbatim from the website, so
   the tokens (and light/dark) are the same on both sides of the handoff. */

:root {
    --spacer: 2rem;
    --bubble-radius: 0.5rem;
}

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

html {
    font-size: 18px;
}

body {
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
    line-height: 1.6;
    min-height: 100vh;
    display: flex;
    flex-direction: column;
    background-color: var(--bg-primary);
    color: var(--text-primary);
}

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

a:hover {
    text-decoration: underline;
}

.container {
    max-width: 1100px;
    margin: 0 auto;
    padding: 0 var(--spacer);
    /* body is a flex column, so this is a flex item: without min-width it
       refuses to shrink below its content (a wide table) and pushes the
       page sideways instead of letting the table scroll. */
    min-width: 0;
    width: 100%;
}

@media (max-width: 600px) {
    :root {
        --spacer: 1.25rem;
    }
}

h1 {
    font-size: 2rem;
    line-height: 1.2;
}

h2 {
    font-size: 1.25rem;
    margin-bottom: 1rem;
}

p {
    color: var(--text-secondary);
}

/* ---- nav ---- */

.navbar {
    background-color: var(--bg-secondary);
    padding: 0.75rem 0;
}

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

.nav-brand img {
    display: block;
}

.logo-dark {
    display: none !important;
}

[data-theme="dark"] .logo-lite {
    display: none !important;
}

[data-theme="dark"] .logo-dark {
    display: block !important;
}

@media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) .logo-lite {
        display: none !important;
    }
    :root:not([data-theme="light"]) .logo-dark {
        display: block !important;
    }
}

.nav-links {
    list-style: none;
    display: flex;
    gap: 1.5rem;
    align-items: center;
    flex-wrap: wrap;
    font-size: 0.95rem;
}

.nav-links a {
    color: var(--text-secondary);
}

.nav-who {
    color: var(--text-muted);
    max-width: 14rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

@media (max-width: 700px) {
    .nav-who {
        display: none;
    }
}

/* ---- page ---- */

.main {
    flex: 1;
    width: 100%;
    padding-top: var(--spacer);
    padding-bottom: calc(var(--spacer) * 2);
}

.footer {
    background-color: var(--bg-tertiary);
    padding: 1.5rem 0;
    font-size: 0.85rem;
}

.footer p {
    color: var(--text-muted);
}

/* The copyright line and the theme toggle share the footer row; they
   stack on a phone. */
.footer .container {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem 1.5rem;
}

.footer p {
    margin: 0;
}

/* THEME TOGGLE (html/theme_toggle.du), after the website's. One icon and
   one label per mode; <html data-theme> picks which pair shows. */
.theme-toggle {
    font: inherit;
    background: none;
    border: none;
    cursor: pointer;
    padding: 0;
    display: flex;
    align-items: center;
    gap: 0.4rem;
    color: var(--text-muted);
}

.theme-toggle:hover {
    color: var(--text-primary);
}

.theme-icon {
    flex: none;
    width: 1.1rem;
    height: 1.1rem;
    color: inherit;
}

.theme-icon,
.theme-label {
    display: none;
}

[data-theme="light"] .theme-icon-sun,
[data-theme="light"] .theme-label-light,
[data-theme="dark"] .theme-icon-moon,
[data-theme="dark"] .theme-label-dark,
[data-theme="auto"] .theme-icon-auto,
[data-theme="auto"] .theme-label-auto {
    display: inline-block;
}

.eyebrow {
    font-size: 0.8rem;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--code-primary);
    margin-bottom: 0.5rem;
}

.eyebrow a {
    color: inherit;
}

.tagline {
    font-size: 1.1rem;
    margin-top: 0.5rem;
}

.hint {
    font-size: 0.85rem;
    color: var(--text-muted);
}

.mono {
    font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
    font-size: 0.8rem;
    word-break: break-all;
}

.section-more {
    margin-top: var(--spacer);
    text-align: center;
}

/* ---- buttons ---- */

.btn,
button {
    display: inline-block;
    padding: 0.5rem 1rem;
    border: none;
    border-radius: var(--bubble-radius);
    font: inherit;
    font-weight: 600;
    cursor: pointer;
    text-align: center;
    text-decoration: none;
    transition: filter 0.2s;
}

.btn:hover,
button:hover {
    text-decoration: none;
    filter: brightness(var(--hover-brightness));
}

.btn-primary,
button {
    background-color: var(--primary);
    color: white;
}

.btn-large {
    font-size: 1.05rem;
}

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

/* ---- notices and pills ---- */

.notice {
    padding: 0.75rem 1rem;
    border-radius: var(--bubble-radius);
    margin-bottom: 1rem;
    font-size: 0.95rem;
    border-left: 4px solid var(--info);
    background-color: var(--bg-secondary);
    color: var(--text-primary);
}

.notice-warning {
    border-left-color: var(--warning);
}

.notice-error {
    border-left-color: var(--error);
}

.notice-success {
    border-left-color: var(--success);
}

.pill {
    display: inline-block;
    padding: 0.15rem 0.75rem;
    border-radius: 999px;
    font-size: 0.8rem;
    font-weight: 600;
    white-space: nowrap;
    background-color: var(--bg-tertiary);
    color: var(--text-secondary);
}

.pill-info {
    background-color: var(--primary-lighter);
    color: var(--primary-darker);
}

.pill-success {
    background-color: var(--complement-lighter);
    color: var(--complement-darker);
}

/* ---- sign in ---- */

.signin,
.interstitial {
    max-width: 480px;
    margin: calc(var(--spacer) * 1.5) auto;
}

.signin-head {
    margin-bottom: var(--spacer);
}

.interstitial h1 {
    margin-bottom: 1rem;
}

.interstitial p {
    margin-bottom: 1rem;
}

.provider-list {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
    margin-bottom: 1.5rem;
}

.provider-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.75rem;
    padding: 0.5rem 1rem;
    border: 1px solid var(--border);
    border-radius: var(--bubble-radius);
    color: var(--text-primary);
    font-weight: 600;
    background-color: var(--bg-primary);
}

.provider-btn:hover {
    text-decoration: none;
    background-color: var(--bg-secondary);
}

.provider-mark {
    width: 1.25rem;
    height: 1.25rem;
}

.magic-form label {
    display: block;
    font-weight: 600;
    margin-bottom: 0.5rem;
}

.magic-field {
    display: flex;
    gap: 0.5rem;
}

.magic-field input {
    flex: 1;
    min-width: 0;
}

.magic-confirm {
    margin-bottom: 1rem;
}

.signin-note {
    margin-top: 1.5rem;
    font-size: 0.85rem;
    color: var(--text-muted);
}

/* The honeypot. display:none, so no human or screen reader meets it. */
.hp-field {
    display: none;
}

/* ---- forms ---- */

input[type="text"],
input[type="email"],
input[type="search"],
textarea {
    width: 100%;
    padding: 0.7rem 0.85rem;
    border: 1px solid var(--border);
    border-radius: var(--bubble-radius);
    background-color: var(--bg-primary);
    color: var(--text-primary);
    font: inherit;
}

input:focus,
textarea:focus {
    outline: 2px solid var(--primary);
    outline-offset: 1px;
}

.brief-form {
    display: flex;
    flex-direction: column;
    gap: 1.25rem;
}

.field label {
    display: block;
    font-weight: 600;
    margin-bottom: 0.35rem;
}

.field .hint {
    margin-bottom: 0.5rem;
}

.field-row {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 1rem;
}

@media (max-width: 600px) {
    .field-row {
        grid-template-columns: 1fr;
    }
}

.brief-form button {
    align-self: flex-start;
}

/* ---- orders ---- */

.order-head {
    margin-bottom: var(--spacer);
}

/* A page title with its status pill beside it. */
.title-row {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem 1rem;
}

.title-row h1 {
    margin: 0;
}

/* Ordered · Produced, under an order's title (html/order_dates.du). */
.order-dates {
    margin: 0.35rem 0 0;
    color: var(--text-muted);
}

.order-price {
    margin-top: 0.5rem;
    font-weight: 600;
    color: var(--text-primary);
}

.order-layout {
    display: grid;
    grid-template-columns: minmax(0, 3fr) minmax(0, 2fr);
    gap: var(--spacer);
    align-items: start;
}

@media (max-width: 860px) {
    /* One column: the summary, then what it costs, then their answers.
       The left column's panels join the grid so the aside can sit
       between them. */
    .order-main {
        display: contents;
    }

    .order-main > :last-child:not(:first-child) {
        order: 3;
    }

    /* Stacked, a sticky box would ride over the answers below it. */
    .checkout-box {
        position: static;
    }

    .order-layout {
        grid-template-columns: 1fr;
    }
}

.panel {
    padding: var(--spacer);
    border-radius: var(--bubble-radius);
    background-color: var(--bg-secondary);
}

.panel > .hint {
    margin-bottom: 1.5rem;
}

.panel-quiet {
    background-color: transparent;
    border: 1px solid var(--border);
}

.panel-narrow {
    max-width: 720px;
}

.report-contents {
    padding-left: 1.25rem;
    display: flex;
    flex-direction: column;
    gap: 0.6rem;
    margin-bottom: 1rem;
}

.report-contents li {
    color: var(--text-secondary);
}

.report-contents li strong {
    color: var(--text-primary);
}

.report-contents li span::before {
    content: "— ";
}

.brief-block {
    margin-top: var(--spacer);
    padding-top: var(--spacer);
    border-top: 1px solid var(--border);
}

.edit-link {
    font-size: 0.85rem;
    font-weight: 600;
    margin-left: 0.5rem;
}

.brief dt,
.facts dt {
    font-size: 0.8rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--text-muted);
    margin-top: 1rem;
}

.brief dt,
.facts dt:first-child {
    margin-top: 0;
}

.brief-item + .brief-item {
    margin-top: 1rem;
}

/* Staff order page: the answers in two columns, one on a phone. */
.staff-stack .brief {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 1rem 2rem;
}

.staff-stack .brief-item + .brief-item {
    margin-top: 0;
}

@media (max-width: 700px) {
    .staff-stack .brief {
        grid-template-columns: minmax(0, 1fr);
    }
}

.brief dd,
.facts dd {
    color: var(--text-primary);
    overflow-wrap: anywhere;
}

/* A left column of more than one panel, beside a sticky aside. */
.order-main {
    display: flex;
    flex-direction: column;
    gap: var(--spacer);
    min-width: 0;
}

.checkout-box {
    position: sticky;
    top: 1rem;
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

.checkout-name {
    font-weight: 600;
    color: var(--text-primary);
}

.checkout-price {
    font-size: 2.5rem;
    font-weight: 800;
    line-height: 1;
    color: var(--text-primary);
}

.order-list {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

.order-row {
    display: grid;
    grid-template-columns: 1fr auto auto auto;
    gap: 1.25rem;
    align-items: center;
    padding: 1rem 1.25rem;
    border-radius: var(--bubble-radius);
    background-color: var(--bg-secondary);
    color: var(--text-primary);
}

.order-row:hover {
    text-decoration: none;
    filter: brightness(var(--hover-brightness));
}

.order-row-main {
    display: flex;
    flex-direction: column;
    min-width: 0;
}

.order-row-price {
    font-weight: 600;
}

.order-row-action {
    font-size: 0.85rem;
    color: var(--code-complement);
}

@media (max-width: 700px) {
    .order-row {
        grid-template-columns: 1fr auto;
    }
    .order-row-action {
        display: none;
    }
}

.empty {
    text-align: center;
    padding: calc(var(--spacer) * 2) var(--spacer);
    border-radius: var(--bubble-radius);
    background-color: var(--bg-secondary);
}

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

/* ---- request form sections ---- */

fieldset {
    border: none;
    display: flex;
    flex-direction: column;
    gap: 1.25rem;
}

fieldset + fieldset {
    margin-top: 0.5rem;
    padding-top: 1.5rem;
    border-top: 1px solid var(--border);
}

legend {
    font-size: 1.1rem;
    font-weight: 700;
    margin-bottom: 1rem;
    color: var(--text-primary);
}

input[type="number"] {
    width: 5.5rem;
    padding: 0.5rem 0.6rem;
    border: 1px solid var(--border);
    border-radius: var(--bubble-radius);
    background-color: var(--bg-primary);
    color: var(--text-primary);
    font: inherit;
    font-weight: 700;
    text-align: right;
}

.btn-secondary {
    background-color: inherit;
    color: var(--primary);
    border: 2px solid var(--primary);
    padding: calc(0.5rem - 2px) calc(1rem - 2px);
}

/* A summary waiting on the customer is the one status asking them to act. */
.pill-action {
    background-color: var(--primary);
    color: white;
}

/* ---- the summary ---- */

.findings-preview {
    padding-left: 1.25rem;
    margin: 0.5rem 0 0.75rem;
    color: var(--text-secondary);
    font-size: 0.9rem;
}

.report-summary h2 + ol {
    margin-bottom: 1.5rem;
}


.checkout-box form {
    margin-top: 0.25rem;
}

/* ---- staff ---- */

.staff-form h2:not(:first-child) {
    margin-top: 1.5rem;
}

.staff-form textarea.mono {
    font-size: 0.8rem;
    line-height: 1.5;
}

.staff-actions {
    display: flex;
    gap: 0.75rem;
    flex-wrap: wrap;
    margin-top: 1rem;
}

.staff-form + .staff-form {
    margin-top: var(--spacer);
}

.team-perms {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
    gap: 0.6rem 1.5rem;
}

.team-perm {
    display: flex;
    gap: 0.5rem;
    align-items: flex-start;
    margin: 0;
    font-weight: 400;
}

.team-perm input {
    margin-top: 0.15rem;
}

.team-perm:has(input:not(:disabled)) {
    cursor: pointer;
}

/* A checkbox drawn as a switch. Still a checkbox: keyboard, focus ring and
   form value are the input's own; only the paint differs. Ported from
   arland-app's arland-style.css (.switch) — same tokens, from colors.css. */
input[type="checkbox"].switch {
    -webkit-appearance: none;
    appearance: none;
    position: relative;
    flex-shrink: 0;
    width: 2.25rem;
    height: 1.25rem;
    border: none;
    border-radius: 999px;
    background-color: var(--border);
    cursor: pointer;
    transition: background-color 0.15s;
}

input[type="checkbox"].switch::after {
    content: "";
    position: absolute;
    top: 0.1875rem;
    left: 0.1875rem;
    width: 0.875rem;
    height: 0.875rem;
    border-radius: 50%;
    background-color: var(--bg-primary);
    box-shadow: 0 1px 3px var(--shadow-color);
    transition: transform 0.15s;
}

input[type="checkbox"].switch:checked {
    background-color: var(--primary);
}

input[type="checkbox"].switch:checked::after {
    transform: translateX(1rem);
}

/* Owners' and your own row: shown, not changeable. */
input[type="checkbox"].switch:disabled {
    cursor: default;
    opacity: 0.55;
}

.team-perm small {
    display: block;
    opacity: 0.7;
}

/* ---- toast ----
   The one confirmation slot (#toast in html/layout.du) for controls that
   save as they change. Fixed, so it can't shift the page as it comes and
   goes; each save swaps in a new node, so the animation replays with no
   JS. Ported from arland-app's arland-style.css. */
.toast {
    position: fixed;
    top: 5rem;
    right: 1.5rem;
    z-index: 200;
    pointer-events: none;
}

.toast-msg {
    display: inline-block;
    padding: 0.4rem 0.9rem;
    border-radius: 999px;
    background-color: var(--bg-primary);
    border: 1px solid color-mix(in srgb, var(--success) 45%, var(--border));
    color: var(--success);
    font-size: 0.875rem;
    font-weight: 600;
    white-space: nowrap;
    box-shadow: 0 4px 14px var(--shadow-color);
    animation: toastIn 2.6s ease forwards;
}

.toast-msg.badge-error {
    border-color: color-mix(in srgb, var(--error) 45%, var(--border));
    color: var(--error);
}

@keyframes toastIn {
    0%   { opacity: 0; transform: translateY(-0.5rem); }
    8%   { opacity: 1; transform: none; }
    72%  { opacity: 1; transform: none; }
    100% { opacity: 0; transform: translateY(-0.25rem); }
}

@media (prefers-reduced-motion: reduce) {
    .toast-msg {
        animation: toastHold 2.6s step-end forwards;
    }

    @keyframes toastHold {
        0%, 72% { opacity: 1; }
        100%    { opacity: 0; }
    }
}

/* ---- team ---- */

/* A table too wide for the screen scrolls inside its panel. nowrap is
   what makes it overflow at all: every cell here is a name, an address,
   a badge or a date, and letting them wrap squeezes the columns into a
   tall stack rather than a table that scrolls. After arland-app's table
   rules in arland-style.css. */
.table-panel {
    padding: 0;
    max-width: 100%;
    overflow-x: auto;
}

.table-panel::-webkit-scrollbar {
    height: 8px;
}

.table-panel::-webkit-scrollbar-track {
    background-color: var(--bg-secondary);
}

.table-panel::-webkit-scrollbar-thumb {
    background-color: var(--border);
    border-radius: 4px;
}

.data-table {
    width: 100%;
    border-collapse: collapse;
    white-space: nowrap;
}

.data-table .perm-tags {
    flex-wrap: nowrap;
}

.data-table th,
.data-table td {
    padding: 0.8rem 1rem;
    text-align: left;
    vertical-align: middle;
    border-bottom: 1px solid var(--border);
}

.data-table th {
    font-size: 0.75rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--text-muted);
}

.data-table tbody tr:last-child td {
    border-bottom: none;
}

.nowrap {
    white-space: nowrap;
}

/* What someone holds, as lower-case badges. After arland-app's auth.css. */
.perm-tags {
    display: flex;
    flex-wrap: wrap;
    gap: 0.35rem;
}

.perm-tag {
    flex-shrink: 0;
    font-size: 0.75rem;
    font-weight: 600;
    padding: 0.2rem 0.7rem;
    border-radius: 999px;
    white-space: nowrap;
    background-color: color-mix(in srgb, var(--primary) 14%, transparent);
    color: var(--primary);
}

/* Owner: the page's own two colors reversed. */
.perm-tag-admin {
    background-color: var(--text-primary);
    color: var(--bg-primary);
}

.member-tags:not(:empty) {
    margin: 0.5rem 0 1.25rem;
}

.member-facts {
    display: flex;
    flex-wrap: wrap;
    gap: 1rem 2.5rem;
    margin: 0;
}

.member-fact dt {
    font-size: 0.75rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--text-muted);
}

.member-fact dd {
    margin: 0.2rem 0 0;
}

#staff-grants {
    margin-top: var(--spacer);
}

#staff-grants .hint {
    margin-top: 1rem;
}

/* ---- staff orders ---- */

/* Declined: the same 14% tint family as the permission badges. */
.pill-danger {
    background-color: color-mix(in srgb, var(--error) 18%, transparent);
    color: var(--error);
}

.data-table .num {
    text-align: right;
}

/* The filter: closed it's one line; open, status switches and a search. */
.filters {
    margin-bottom: 1rem;
    border-radius: var(--bubble-radius);
    background-color: var(--bg-secondary);
}

.filters > summary {
    padding: 0.75rem 1rem;
    cursor: pointer;
    font-weight: 600;
    user-select: none;
}

.filters[open] > summary {
    border-bottom: 1px solid var(--border);
}

.filters form {
    padding: 1rem;
    display: flex;
    flex-direction: column;
    gap: 1rem;
}

.filter-statuses {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem 1.5rem;
}

.filter-status {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    margin: 0;
    font-weight: 400;
    cursor: pointer;
}

.filter-search {
    display: flex;
    align-items: center;
    gap: 1rem;
}

.filter-search input[type="search"] {
    flex: 1;
    max-width: 28rem;
    margin: 0;
}

.results-count {
    margin: 0 0 0.5rem;
}

/* A table row that opens something: anywhere on it is the click target
   (static/row-link.js), and its one link (.row-target) is drawn as plain
   text so no cell looks like a link of its own (an address styled as a
   link reads as mailto). The row highlights on hover and when the link
   has keyboard focus. */
.row-link {
    cursor: pointer;
}

.row-link:hover td,
.row-link:focus-within td {
    background-color: var(--bg-tertiary);
}

.row-link .row-target {
    color: inherit;
    text-decoration: none;
}

.row-link .row-target:focus-visible {
    outline: 2px solid var(--primary);
    outline-offset: 2px;
}

/* New: sent to us and waiting on us, so it's the one that shouts. Rich
   yellow with black text in both themes; it doesn't follow the palette. */
.pill-new {
    background-color: #ffc400;
    color: #000;
}

/* The summary: staff-written markdown, on the customer's summary page and
   their purchased order. Kept compact: it's an outline, not the report. */
.summary-md {
    line-height: 1.2;
}

.summary-md > :first-child {
    margin-top: 0;
}

.summary-md > :last-child {
    margin-bottom: 1.5rem;
}

/* Headings are the page's own: the markdown is the whole section. */
.summary-md h1,
.summary-md h2,
.summary-md h3 {
    margin: 1.75rem 0 0.75rem;
}

.summary-md h2 {
    font-size: 1.4rem;
}

.summary-md h2,
.summary-md h3 {
    color: var(--primary);
}

.summary-md > h1:first-child,
.summary-md > h2:first-child,
.summary-md > h3:first-child {
    margin-top: 0;
}

.summary-md ul,
.summary-md ol {
    padding-left: 1.25rem;
    margin: 0.5rem 0 1rem;
}

.summary-md li {
    margin: 0.25rem 0;
}

.summary-md p {
    margin: 0 0 0.75rem;
}

/* A table in the summary is drawn as a two-column grid of boxes (one
   column on a phone), one box per row: the first column as a number, the
   second under it, both centred.

     |---|---|
     | 15 | Pages |
     | 5  | Major competitors researched |

   Summary only; the report's tables stay tables. A header row, if one was
   typed, has no place in a box, so it isn't drawn. */
.summary-md table,
.summary-md tbody {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.5rem;
}

.summary-md table {
    display: block;
    margin: 1.5rem 0 1.5rem;
}

.summary-md thead {
    display: none;
}

.summary-md tr {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.35rem;
    padding: 1rem;
    text-align: center;
    border-radius: var(--bubble-radius);
    background-color: var(--bg-primary);
}

@media (max-width: 600px) {
    .summary-md tbody {
        grid-template-columns: minmax(0, 1fr);
    }
}

.summary-md td {
    display: block;
    padding: 0;
    border: none;
    text-align: center;
}

/* The number above what it counts, both centred in the box. */
.summary-md td:first-child {
    font-size: 2.25rem;
    font-weight: 800;
    line-height: 1;
    color: var(--text-primary);
}

.summary-md td + td {
    color: var(--text-secondary);
}

/* Staff order page: one column, top to bottom — their order, our summary,
   the report. */
.staff-stack {
    display: flex;
    flex-direction: column;
    gap: var(--spacer);
    max-width: 52rem;
}

.staff-stack .staff-form + .staff-form {
    margin-top: 0;
}

/* Stripe's badge, under the buy button. Two files rather than one tinted
   with currentColor: Stripe's marks agreement allows the wordmark in
   slate, blurple or white and nothing else, so the theme picks a file
   instead of a colour. From arland-app's auth.css. */
.stripe-badge {
    display: none;
    width: 8.5rem;
    height: auto;
    margin-top: 0.75rem;
}

.stripe-badge-light {
    display: block;
}

[data-theme="dark"] .stripe-badge-light {
    display: none;
}

[data-theme="dark"] .stripe-badge-dark {
    display: block;
}

@media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) .stripe-badge-light {
        display: none;
    }

    :root:not([data-theme="light"]) .stripe-badge-dark {
        display: block;
    }
}
