/* ── Reset & base ─────────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; }

html, body {
    margin: 0;
    padding: 0;
    height: 100%;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
}

/* ── Portal shell ─────────────────────────────────────────────── */
.portal-shell {
    display: flex;
    height: 100vh;
    overflow: hidden;
}

/* Sidebar */
.portal-sidebar {
    width: 240px;
    flex-shrink: 0;
    background: #fff;
    color: #1e2330;
    border-right: 1px solid #e2e8f0;
    display: flex;
    flex-direction: column;
    overflow-y: auto;
    overflow-x: hidden;
}

/* Main area (header + content) */
.portal-main {
    flex: 1;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    background: var(--rz-body-background-color, #f8f9fa);
}

/* Top header bar */
.portal-header {
    height: 56px;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: flex-end;
    padding: 0 1.5rem;
    background: #fff;
    border-bottom: 1px solid #e2e8f0;
    box-shadow: 0 1px 3px rgba(0,0,0,0.06);
}

/* Scrollable content */
.portal-content {
    flex: 1;
    overflow-y: auto;
    padding: 1.75rem 2rem;
}

.portal-content > * {
    max-width: 1300px;
    margin-left: auto;
    margin-right: auto;
}

/* Brand / logo area at top of sidebar */
.portal-brand {
    height: 56px;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0 1.25rem;
    border-bottom: 1px solid #e2e8f0;
    background: #fff;
}

.portal-logo {
    max-height: 34px;
    width: auto;
    object-fit: contain;
}

.portal-sidebar-inner {
    display: flex;
    flex-direction: column;
    height: 100%;
}


.portal-username {
    font-size: 0.875rem;
    font-weight: 500;
}

/* ── Sidebar nav — override Radzen dark panel menu ────────────── */
.portal-sidebar .rz-panel-menu,
nav.portal-sidebar .rz-panel-menu {
    background: #fff !important;
    padding: 0.5rem 0;
}

/* All nav items — reset background and text */
.portal-sidebar .rz-panel-menu .rz-navigation-item,
.portal-sidebar .rz-panel-menu li,
.portal-sidebar .rz-panel-menu .rz-panel-menu-item {
    background: transparent !important;
    color: #374151 !important;
}

/* The clickable link row */
.portal-sidebar .rz-panel-menu .rz-navigation-item > a,
.portal-sidebar .rz-panel-menu .rz-navigation-item > span,
.portal-sidebar .rz-panel-menu a.rz-navigation-item {
    color: #374151 !important;
    background: transparent !important;
}

/* Hover */
.portal-sidebar .rz-panel-menu .rz-navigation-item > a:hover,
.portal-sidebar .rz-panel-menu .rz-navigation-item > span:hover,
.portal-sidebar .rz-panel-menu a.rz-navigation-item:hover {
    background: #f1f5f9 !important;
    color: #1e2330 !important;
}

/* Active / selected page */
.portal-sidebar .rz-panel-menu .rz-navigation-item.rz-state-active > a,
.portal-sidebar .rz-panel-menu .rz-navigation-item.rz-state-active > span,
.portal-sidebar .rz-panel-menu a.rz-navigation-item.rz-state-active {
    background: #edf2ff !important;
    color: #4263eb !important;
    font-weight: 600;
}

/* ── Sub-menu items ────────────────────────────────────────────────
   Radzen's default theme assumes a dark sidebar: a sub-item sits on --rz-base-900 and its
   selected state is a 40% black veil, both with "inherit" as the text colour. On this white
   sidebar the inherited colour is the dark grey forced above, so a sub-item was dark-on-dark and
   the selected one grey-on-grey. The theme exposes all of it as variables — set them rather
   than fight the selectors, which have changed between Radzen versions (the "Active" rule above
   targets .rz-state-active, a class Radzen 10 no longer puts on panel-menu items). */
.portal-sidebar .rz-panel-menu {
    --rz-panel-menu-item-2nd-level-background-color: #f8fafc;
    --rz-panel-menu-item-2nd-level-color: #4b5563;
    --rz-panel-menu-item-2nd-level-hover-background-color: #eef2f7;
    --rz-panel-menu-item-2nd-level-hover-color: #1e2330;
    --rz-panel-menu-item-2nd-level-active-background-color: #e7edff;
    --rz-panel-menu-item-2nd-level-active-color: #3451d1;
    --rz-panel-menu-item-2nd-level-active-font-weight: 600;
}

/* The selected sub-item keeps the left marker the top-level items have, so "you are here"
   reads the same at both levels. */
.portal-sidebar .rz-panel-menu .rz-navigation-menu .rz-navigation-item-wrapper-active {
    box-shadow: inset 4px 0 0 #3451d1;
}

/* Icons and text spans inherit link colour */
.portal-sidebar .rz-panel-menu .rzi,
.portal-sidebar .rz-panel-menu .rz-panel-menu-item-text {
    color: inherit !important;
}

/* ── Collapsed sidebar — icons only, page keeps the width ─────── */
.portal-sidebar {
    transition: width 0.18s ease;
}

/* Toggle sits at the very bottom of the sidebar */
.portal-sidebar-footer {
    margin-top: auto;
    flex-shrink: 0;
    display: flex;
    justify-content: flex-end;
    padding: 0.5rem 0.75rem;
    border-top: 1px solid #e2e8f0;
}

.portal-sidebar-toggle .rzi {
    color: #000 !important;
}

.portal-shell--collapsed .portal-sidebar {
    width: 64px;
}

.portal-shell--collapsed .portal-sidebar-footer {
    justify-content: center;
    padding: 0.5rem 0;
}

/* Hide the labels and centre the icons in the narrow rail */
.portal-shell--collapsed .portal-sidebar .rz-navigation-item-text,
.portal-shell--collapsed .portal-sidebar .rz-panel-menu-item-text {
    display: none !important;
}

.portal-shell--collapsed .portal-sidebar .rz-navigation-item-link {
    justify-content: center;
    gap: 0;
    padding-inline: 0;
}

/* Radzen spaces the icon from the (now hidden) label with a margin */
.portal-shell--collapsed .portal-sidebar .rz-navigation-item-link .rzi {
    margin: 0 !important;
}

/* The point of collapsing: let wide pages (grids, editors) use the space */
.portal-shell--collapsed .portal-content > * {
    max-width: none;
}

/* ── Dashboard stat cards ─────────────────────────────────────── */
.stat-card {
    height: 100%;
}

/* A tile with something behind it — see StatTile.razor */
.stat-tile-link {
    display: block;
    height: 100%;
    color: inherit;
    text-decoration: none;
}

.stat-card--link {
    cursor: pointer;
    transition: box-shadow .15s ease, transform .15s ease;
}

.stat-tile-link:hover .stat-card--link,
.stat-tile-link:focus-visible .stat-card--link {
    box-shadow: 0 4px 14px rgba(0, 0, 0, .14);
    transform: translateY(-1px);
}

/* ── Login page ───────────────────────────────────────────────── */
.login-page {
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background: #f0f2f5;
}

.login-card {
    background: #fff;
    border-radius: 8px;
    box-shadow: 0 2px 16px rgba(0,0,0,0.12);
    padding: 2.5rem 2rem;
    width: 100%;
    max-width: 380px;
}

.login-card h1 {
    margin: 0 0 0.25rem;
    font-size: 1.25rem;
    font-weight: 700;
    color: #1e2330;
}

.login-card h2 {
    margin: 0 0 1.5rem;
    font-size: 1rem;
    font-weight: 400;
    color: #64748b;
}

.login-card .field {
    display: flex;
    flex-direction: column;
    gap: 0.375rem;
    margin-bottom: 1rem;
}

.login-card label {
    font-size: 0.8125rem;
    font-weight: 500;
    color: #374151;
}

.login-card input {
    padding: 0.5rem 0.75rem;
    border: 1px solid #d1d5db;
    border-radius: 4px;
    font-size: 0.9375rem;
    outline: none;
    transition: border-color 0.15s;
}

.login-card input:focus {
    border-color: #4f80ff;
    box-shadow: 0 0 0 2px rgba(79,128,255,0.15);
}

.login-card button[type="submit"] {
    width: 100%;
    padding: 0.625rem;
    margin-top: 0.5rem;
    background: #4f80ff;
    color: #fff;
    border: none;
    border-radius: 4px;
    font-size: 0.9375rem;
    font-weight: 600;
    cursor: pointer;
    transition: background 0.15s;
}

.login-card button[type="submit"]:hover {
    background: #3a6ae0;
}

.error-message {
    background: #fef2f2;
    color: #b91c1c;
    border: 1px solid #fecaca;
    border-radius: 4px;
    padding: 0.5rem 0.75rem;
    font-size: 0.875rem;
    margin-bottom: 1rem;
}

/* ── Blazor error UI ──────────────────────────────────────────── */
#blazor-error-ui {
    background: lightyellow;
    bottom: 0;
    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
    display: none;
    left: 0;
    padding: 0.6rem 1.25rem 0.7rem 1.25rem;
    position: fixed;
    width: 100%;
    z-index: 1000;
}

#blazor-error-ui .dismiss {
    cursor: pointer;
    position: absolute;
    right: 3.5rem;
    top: 0.5rem;
}

.blazor-error-boundary {
    background: #b32121;
    padding: 1rem 1rem 1rem 3.7rem;
    color: white;
}

.blazor-error-boundary::after {
    content: "An error has occurred."
}

/* ── Small screens (phone landscape ≈ 873px CSS, tablets) ─────── */
/* A Pixel-class phone held sideways gives ~873 × 390 CSS px. The shell is a
   fixed 240px menu + a fixed-width grid, which leaves the one column that
   matters (the name) a few characters wide. Below the breakpoint the menu
   becomes an overlay rail and the grids opt into the card layout below. */
@media (max-width: 960px) {
    /* The rail always reserves 56px; expanding it floats over the page
       instead of taking the width the content needs. */
    .portal-shell { position: relative; }

    .portal-sidebar {
        position: absolute;
        top: 0;
        bottom: 0;
        left: 0;
        z-index: 40;
        box-shadow: 2px 0 10px rgba(0, 0, 0, 0.15);
    }

    .portal-main { margin-left: 56px; }

    .portal-shell--collapsed .portal-sidebar { width: 56px; }

    /* Vertical space is the scarce one in landscape */
    .portal-header { height: 44px; padding: 0 0.5rem; }
    .portal-content { padding: 0.75rem; }
    .portal-content > * { max-width: none; }

    /* Toolbars above the grids: let them wrap instead of overflowing.
       RadzenStack writes flex-wrap:nowrap inline, hence !important. */
    .portal-content .rz-stack { flex-wrap: wrap !important; }

    /* A text box sized in rem for the desktop must not force a scrollbar */
    .portal-content .rz-textbox { max-width: 100%; }
}

/* ── Data grids as cards on small screens ─────────────────────────
   Opt-in, per grid: add `portal-grid-cards` to the RadzenDataGrid *and* set
   Responsive="true" — that is what repeats the column title inside each cell,
   which is the only thing that makes a header-less card readable. Pages add a
   `portal-cards-<page>` modifier to say which cell is the card title and which
   ones sit inline. Grids without the class keep the plain table. */
@media (max-width: 960px) {
    .portal-grid-cards .rz-data-grid-data { overflow: visible; }

    /* The colgroup carries the desktop column widths — they are exactly what
       crushes the name column, so drop them along with the header row. */
    .portal-grid-cards .rz-grid-table {
        table-layout: auto !important;
        width: 100% !important;
    }

    .portal-grid-cards .rz-grid-table > colgroup,
    .portal-grid-cards .rz-grid-table > thead { display: none; }

    .portal-grid-cards .rz-grid-table > tbody { display: block; }

    .portal-grid-cards .rz-grid-table > tbody > tr {
        display: flex;
        flex-wrap: wrap;
        align-items: baseline;
        gap: 0.15rem 0.9rem;
        margin-bottom: 0.5rem;
        padding: 0.6rem 0.75rem;
        border: 1px solid var(--rz-base-300, #e2e8f0);
        border-radius: 8px;
        background: #fff;
    }

    .portal-grid-cards .rz-grid-table > tbody > tr > td {
        display: flex;
        align-items: baseline;
        gap: 0.4rem;
        flex: 1 1 100%;
        min-width: 0;
        width: auto !important;
        max-width: none !important;
        height: auto !important;
        padding: 0.1rem 0 !important;
        border: 0 !important;
        /* Row striping is painted per cell; inside a card only the full-width
           cells would get a band, so let the card own the background. */
        background: transparent !important;
    }

    /* The repeated column title — hidden on desktop by the theme, shown here */
    .portal-grid-cards .rz-grid-table > tbody > tr > td > .rz-column-title {
        display: block;
        flex: 0 0 auto;
        font-size: 0.7rem;
        font-weight: 600;
        text-transform: uppercase;
        letter-spacing: 0.02em;
        color: var(--rz-text-secondary-color, #64748b);
    }

    /* Desktop cells ellipsize on one line; a card has the room to wrap */
    .portal-grid-cards .rz-grid-table > tbody > tr > td > .rz-cell-data {
        white-space: normal;
        overflow: visible;
        text-overflow: clip;
        min-width: 0;
    }

    /* A card title cell also carries its own caption lines (parent place, stored
       name) — those must not inherit the title's weight and size. */
    .portal-grid-cards .rz-grid-table > tbody > tr > td .rz-text-caption {
        font-weight: 400;
        font-size: 0.75rem;
    }

    /* An empty cell would print a lone label (e.g. no AI suggestion yet) */
    .portal-grid-cards .rz-grid-table > tbody > tr > td:has(> .rz-cell-data:empty) { display: none; }

    .portal-grid-cards .rz-pager {
        flex-wrap: wrap;
        row-gap: 0.25rem;
    }

    /* People (/actors): 1 Canonical · 2 Merge · 3 Person · 4 Type · 5 Dates
       · 6 Objects · 7 actions */
    .portal-cards-actors .rz-grid-table > tbody > tr > td:nth-child(3) {
        order: 1;
        font-size: 1rem;
        font-weight: 600;
    }
    .portal-cards-actors .rz-grid-table > tbody > tr > td:nth-child(3) > .rz-column-title { display: none; }
    .portal-cards-actors .rz-grid-table > tbody > tr > td:nth-child(4),
    .portal-cards-actors .rz-grid-table > tbody > tr > td:nth-child(5),
    .portal-cards-actors .rz-grid-table > tbody > tr > td:nth-child(6) {
        order: 2;
        flex: 0 0 auto;
    }
    .portal-cards-actors .rz-grid-table > tbody > tr > td:nth-child(1),
    .portal-cards-actors .rz-grid-table > tbody > tr > td:nth-child(2),
    .portal-cards-actors .rz-grid-table > tbody > tr > td:nth-child(7) {
        order: 3;
        flex: 0 0 auto;
    }

    /* Place pickers (PlaceMergePanel / PlaceSearchBox):
       1 Place · 2 Type · 3 GeoNames · 4 Objects · 5 action */
    .portal-cards-place-candidates .rz-grid-table > tbody > tr > td:nth-child(1) {
        order: 1;
        font-size: 1rem;
        font-weight: 600;
    }
    .portal-cards-place-candidates .rz-grid-table > tbody > tr > td:nth-child(1) > .rz-column-title { display: none; }
    .portal-cards-place-candidates .rz-grid-table > tbody > tr > td:nth-child(2),
    .portal-cards-place-candidates .rz-grid-table > tbody > tr > td:nth-child(3),
    .portal-cards-place-candidates .rz-grid-table > tbody > tr > td:nth-child(4) {
        order: 2;
        flex: 0 0 auto;
    }
    .portal-cards-place-candidates .rz-grid-table > tbody > tr > td:nth-child(5) {
        order: 3;
        flex: 0 0 auto;
    }

    /* Places (/places): 1 Name · 2 Status · 3 Objects · 4 Children · 5 Type
       · 6 Country · 7 AI suggests · 8 action */
    .portal-cards-places .rz-grid-table > tbody > tr > td:nth-child(1) {
        order: 1;
        font-size: 1rem;
        font-weight: 600;
    }
    .portal-cards-places .rz-grid-table > tbody > tr > td:nth-child(1) > .rz-column-title { display: none; }
    .portal-cards-places .rz-grid-table > tbody > tr > td:nth-child(2),
    .portal-cards-places .rz-grid-table > tbody > tr > td:nth-child(3),
    .portal-cards-places .rz-grid-table > tbody > tr > td:nth-child(4),
    .portal-cards-places .rz-grid-table > tbody > tr > td:nth-child(5),
    .portal-cards-places .rz-grid-table > tbody > tr > td:nth-child(6) {
        order: 2;
        flex: 0 0 auto;
    }
    .portal-cards-places .rz-grid-table > tbody > tr > td:nth-child(7),
    .portal-cards-places .rz-grid-table > tbody > tr > td:nth-child(8) {
        order: 3;
        flex: 0 0 auto;
    }

    /* Objects behind a place count (/places/{id}/objects): 1 Image · 2 Object
       · 3 Museum · 4 Date · 5 Linked via · 6 actions */
    .portal-cards-place-objects .rz-grid-table > tbody > tr > td:nth-child(1) {
        order: 1;
        flex: 0 0 auto;
    }
    .portal-cards-place-objects .rz-grid-table > tbody > tr > td:nth-child(1) > .rz-column-title { display: none; }
    .portal-cards-place-objects .rz-grid-table > tbody > tr > td:nth-child(2) {
        order: 2;
        font-size: 1rem;
        font-weight: 600;
    }
    .portal-cards-place-objects .rz-grid-table > tbody > tr > td:nth-child(2) > .rz-column-title { display: none; }
    .portal-cards-place-objects .rz-grid-table > tbody > tr > td:nth-child(3),
    .portal-cards-place-objects .rz-grid-table > tbody > tr > td:nth-child(4),
    .portal-cards-place-objects .rz-grid-table > tbody > tr > td:nth-child(5),
    .portal-cards-place-objects .rz-grid-table > tbody > tr > td:nth-child(6) {
        order: 3;
        flex: 0 0 auto;
    }
}

/* ── Documentation pages (/docs) — rendered markdown ──────────── */
.mimo-doc { max-width: 60rem; line-height: 1.6; }
.mimo-doc h1 { font-size: 1.6rem; margin: 0 0 1rem; }
.mimo-doc h2 { font-size: 1.25rem; margin: 1.75rem 0 .75rem; border-bottom: 1px solid var(--rz-base-300); padding-bottom: .25rem; }
.mimo-doc h3 { font-size: 1.05rem; margin: 1.25rem 0 .5rem; }
.mimo-doc p, .mimo-doc ul, .mimo-doc ol { margin: 0 0 .85rem; }
.mimo-doc li { margin-bottom: .3rem; }
.mimo-doc code {
    background: var(--rz-base-200);
    border-radius: 3px;
    padding: .1rem .3rem;
    font-size: .875em;
}
.mimo-doc pre {
    background: var(--rz-base-200);
    border-radius: 6px;
    padding: .85rem 1rem;
    overflow-x: auto;
    margin: 0 0 1rem;
}
.mimo-doc pre code { background: none; padding: 0; }
.mimo-doc blockquote {
    border-left: 4px solid var(--rz-warning);
    background: var(--rz-base-100);
    margin: 0 0 1rem;
    padding: .6rem 1rem;
}
.mimo-doc blockquote p:last-child { margin-bottom: 0; }
.mimo-doc table {
    border-collapse: collapse;
    margin: 0 0 1rem;
    display: block;
    overflow-x: auto;
    max-width: 100%;
}
.mimo-doc th, .mimo-doc td {
    border: 1px solid var(--rz-base-300);
    padding: .4rem .65rem;
    text-align: left;
    vertical-align: top;
}
.mimo-doc th { background: var(--rz-base-200); }
.mimo-doc a { color: var(--rz-primary); }

/* ── Sandbox banner ───────────────────────────────────────────────────────
   Deliberately loud and deliberately not dismissible: it is the only thing
   distinguishing a Portal editing a throwaway copy from one editing the real
   collection. Sits above the header so it survives every page and scroll. */
.sandbox-banner {
    display: flex;
    align-items: center;
    gap: .75rem;
    flex-wrap: wrap;
    padding: .5rem 1rem;
    background: var(--rz-warning, #b45309);
    color: #fff;
    font-size: .875rem;
    line-height: 1.4;
}
.sandbox-banner__label {
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .06em;
    padding: .1rem .5rem;
    border: 1px solid currentColor;
    border-radius: 3px;
    flex: none;
}
.sandbox-banner strong { font-weight: 700; }
.sandbox-banner a {
    color: #fff;
    text-decoration: underline;
    margin-left: auto;
    flex: none;
}

/* ── Object editor (/objects/{id}/edit) ───────────────────────────────────
   Everything on the page is a label/value pair, so everything shares one
   two-column grid (.obj-fields): an event's type and date sit in the same
   columns as its Place / Maker / Materials rows, which is what keeps them
   aligned from one event to the next. */
.obj-header {
    display: flex;
    align-items: center;
    gap: 1rem;
    flex-wrap: wrap;
    margin-bottom: 1.25rem;
}
.obj-header__title { min-width: 0; }
.obj-header__link { margin-left: auto; color: var(--rz-primary); white-space: nowrap; }

.obj-muted { font-size: .8rem; color: var(--rz-text-secondary-color, #64748b); }

.obj-summary { position: sticky; top: 0; }
.obj-summary__image {
    width: 100%;
    max-height: 220px;
    object-fit: contain;
    border-radius: 4px;
    margin-bottom: .75rem;
}

.obj-card-head {
    display: flex;
    align-items: baseline;
    gap: .25rem 1rem;
    flex-wrap: wrap;
    margin-bottom: .75rem;
}
.obj-card-title { margin: 0; font-size: 1rem; font-weight: 600; white-space: nowrap; }

.obj-fields {
    display: grid;
    grid-template-columns: 9rem minmax(0, 1fr);
    gap: .4rem 1rem;
    align-items: baseline;
    margin: 0;
}
.obj-fields dt {
    font-size: .72rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: .04em;
    color: var(--rz-text-secondary-color, #64748b);
    overflow-wrap: anywhere;
}
.obj-fields dd { margin: 0; font-size: .9rem; min-width: 0; overflow-wrap: anywhere; }
.obj-fields--stacked { grid-template-columns: 1fr; gap: 0; }
.obj-fields--stacked dd { margin-bottom: .6rem; }

.obj-event { padding: .85rem 0; border-top: 1px solid var(--rz-base-300, #e2e8f0); }
.obj-event:last-child { padding-bottom: 0; }
.obj-fields dt.obj-event__type { font-size: .8rem; color: var(--rz-primary, #3451d1); }
.obj-fields dd.obj-event__date { font-weight: 600; }

/* The museum's own wording, shown only where it differs from the linked value */
.obj-source { font-size: .8rem; font-weight: 400; font-style: italic; color: var(--rz-text-secondary-color, #64748b); }

.obj-tag {
    display: inline-block;
    margin-left: .4rem;
    padding: .05rem .45rem;
    border: 1px solid var(--rz-base-300, #e2e8f0);
    border-radius: 999px;
    font-size: .68rem;
    color: var(--rz-text-secondary-color, #64748b);
    white-space: nowrap;
    vertical-align: middle;
}
.obj-tag--authority { border-color: #86efac; background: #f0fdf4; color: #166534; }
.obj-tag--supplied  { border-color: #fcd34d; background: #fffbeb; color: #92400e; }

/* What is linked now (with its Unlink), or that nothing is */
.obj-current,
.obj-result {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: .75rem;
}
.obj-current {
    padding: .5rem .75rem;
    margin-bottom: .75rem;
    border: 1px solid var(--rz-base-300, #e2e8f0);
    border-radius: 6px;
    background: var(--rz-base-100, #f8fafc);
}
.obj-current--empty { border-color: #fcd34d; background: #fffbeb; color: #92400e; font-size: .9rem; }
.obj-result { padding: .4rem 0; border-bottom: 1px solid var(--rz-base-200, #eef2f7); font-size: .9rem; }
.obj-result > :first-child { min-width: 0; }

.obj-search { display: flex; gap: .5rem; margin: .75rem 0 .25rem; }
.obj-search .rz-textbox { flex: 1; min-width: 0; }

/* One card per vocabulary; the colour and the name tag travel with every term of it */
.obj-vocab { border-top: 3px solid var(--obj-vocab-color); }
.obj-vocab--mimo    { --obj-vocab-color: #3451d1; }
.obj-vocab--bemusic { --obj-vocab-color: #0f766e; }
.obj-vocab__origin {
    display: inline-block;
    margin-right: .4rem;
    padding: .1rem .55rem;
    border-radius: 4px;
    background: var(--obj-vocab-color);
    color: #fff;
    font-size: .75rem;
    font-weight: 600;
    letter-spacing: .02em;
    vertical-align: middle;
}
.obj-vocab__origin--small { margin: 0 0 0 .4rem; padding: 0 .4rem; font-size: .65rem; }

@media (max-width: 960px) {
    .obj-summary { position: static; }
    .obj-fields { grid-template-columns: 6.5rem minmax(0, 1fr); }
}
