/*
 * SHIPPED BY T23. This file is `docs/use-case-rollout/walk/2026-09-18/mock/design-walk/r2-add-asset-page.css`
 * as signed off, rule for rule and in its order, WITHOUT the section "OPTION B: the box as a sheet of rows"
 * (`.ftd-r2-rows`, `.ftd-r2-rowfull`, `.ftd-r2-help`: option B is not signed off and does not ship), followed by TWO
 * added sections at the foot, "THE BRIDGE" and "THE COLUMN IS A CARD-WIDTH CONTAINER" (DEFECTS F19), neither of
 * which declares a look of its own. It is linked once, site-wide, straight
 * after `film-tv-dashboard.css` (`resources/views/layouts/app.blade.php`), because the two central form components
 * it places (`AssetInfoSection.vue`, `StepCommonInfoBlock.vue`) are mounted on many pages. ADDITIVE ONLY: every
 * selector here starts `.ftd-r2-` or sits under `.ftd`, so nothing outside the redesign can move.
 *
 * THE FORM-HEADING RULE below (`.ftd .ftd-r2-cols .ftd-sec__title, .ftd .ftd-r2-simple .ftd-sec__title`) is this
 * page's own copy of a rule that belongs ONCE in the merged sheet's FOUNDATION section (the prerequisite's point 3).
 * It is raised as a build question in `throughput/notes/T23.md`; this copy goes when the sheet carries it.
 */

/*
 * R2. THE ADD ASSET PAGE, REDRAWN. Layout only. Every class is `ftd-` and lives under `.ftd`.
 * Colour comes only from the --ftd-* variables the approved sheet and foundation.css declare; not one is written here.
 * Every width rule is a container query on `ftd` (the approved sheet's own container), never a screen width.
 *
 * NO LONGER A TRAP: the approved sheet's margin reset on p, h4, dl, dt, dd used to carry specificity 0,1,1, so any
 * margin on one of those had to be written here as `.ftd .ftd-r2-...` to outrank it. The merged sheet's reset is now
 * `:where(.ftd) :where(h4, dl, dt, dd, p)` at 0,0,0 and cancels nothing. The `.ftd `-prefixed selectors below are
 * harmless and stay exactly as signed off.
 */

/* ---------------------------------------------------------------- the page: two columns, the right one narrower.
   Today's Add Asset is col-xl-6 / col-xl-6, but the right column holds only the upload, Usage and Advanced, so an even
   split leaves the left column's fields cramped and the right one half empty. The tracks below keep today's PLACES
   (left = the record, right = the image and the switches) and give the reading column the room. */
.ftd-r2-cols { display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr); gap: 16px; align-items: start; }
.ftd-r2-col { min-width: 0; display: flex; flex-direction: column; gap: 16px; }
@container ftd (max-width: 900px) { .ftd-r2-cols { grid-template-columns: minmax(0, 1fr); } }

/* a box in this page is never flush against the next one: 16px between, 16px inside (the boxed section's own padding) */
.ftd-r2-col > .ftd-sec { margin-bottom: 0; }

/* ---------------------------------------------------------------- A HEADING IS NOT A LABEL
   THE REASON THE LAST ROUND FAILED: a section heading and a field label were the same small capitals, so "DESCRIPTION"
   sat over "DESCRIPTION" and nothing said which was the group and which was the field. The foundation draws the
   section title at 12.5px uppercase and a field label at 11px uppercase: a pixel and a half apart, both shouting.
   Here the box's heading takes TODAY'S OWN GRAMMAR, which screenshot 39 shows and which nobody ever complained about:
   sentence case, 14px, weight 600, full ink. The field label stays small, quiet, uppercase. They can no longer be
   mistaken for each other at any distance, and the page keeps one heading grammar with the approved card head. */
.ftd .ftd-r2-cols .ftd-sec__title,
.ftd .ftd-r2-simple .ftd-sec__title {
    font-size: 14px; font-weight: 600; letter-spacing: 0; text-transform: none; color: var(--ftd-ink);
}

/* ---------------------------------------------------------------- ONE FIELD, NO REPEATED LABEL
   Where a box holds one field whose label only repeats the box's heading (Department / Department, Supplier /
   Supplier), the heading is drawn once and the control sits under it on its own. This is the class that box's body
   wears, so the control keeps the same left edge as a labelled field elsewhere on the page.
   Such a box has one 32px control in it, so it does NOT need a full box of body around it: the padding drops to the
   16px it needs and no more, or two dropdowns cost the top of the column two hundred pixels of white (which is the
   wasted space he objected to in today's boxes, not the grouping). */
.ftd-r2-solo { max-width: 460px; }
.ftd-sec--boxed > .ftd-sec__body > .ftd-r2-solo:only-child { margin-bottom: 0; }
.ftd .ftd-r2-cols .ftd-sec__body:has(> .ftd-r2-solo:only-child),
.ftd .ftd-r2-simple .ftd-sec__body:has(> .ftd-r2-solo:only-child) { padding: 12px 16px; }

/* the approved .ftd-field carries 14px under it for the next field. The LAST field in a box has no next field, and
   that 14px was drawn as a band of empty box under a lone control, which is exactly the wasted space he objects to. */
.ftd-sec--boxed > .ftd-sec__body > .ftd-field:last-child { margin-bottom: 0; }
.ftd-sec--boxed > .ftd-sec__body > .ftd-field:last-child > .ftd-field__help:last-child { margin-bottom: 0; }

/* ---------------------------------------------------------------- THE FIELD GRID inside a box
   Two tracks that every box on the page shares, so labels and controls line up down the whole column. */
.ftd-r2-fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px 18px; align-items: start; }
.ftd-r2-fields > .ftd-field { margin-bottom: 0; }
.ftd-r2-wide { grid-column: 1 / -1; }
@container ftd (max-width: 1080px) { .ftd-r2-fields { grid-template-columns: minmax(0, 1fr); } }
/* a tick box has no control box of its own, so on a row of its own it keeps the same height as a field beside it
   rather than sitting hard against the control above */
.ftd-r2-fields > .ftd-field > .ftd-checks { min-height: 32px; }

/* the money block: four tracks of numbers, which is how Quantity & Costs reads as one table rather than nine boxes */
.ftd-r2-money { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px 18px; }
.ftd-r2-money > .ftd-field { margin-bottom: 0; }
@container ftd (max-width: 1080px) { .ftd-r2-money { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@container ftd (max-width: 620px) { .ftd-r2-money { grid-template-columns: minmax(0, 1fr); } }
/* a number in this form is entered, not read in a column, so it keeps the control's own width rather than the
   foundation's 150px cap: a "Gross Total" box half the width of the box above it reads as a mistake */
.ftd .ftd-r2-money .ftd-input--num, .ftd .ftd-r2-fields .ftd-input--num { max-width: none; }

/* ---------------------------------------------------------------- THE USAGE BOX: four three-state choices
   Each one is its own row: the group's name, then its tiles under it (foundation F2 puts the heading above). The rows
   are divided by a hairline so four groups of tiles do not read as sixteen loose buttons. */
.ftd-r2-usage { display: flex; flex-direction: column; gap: 12px; }
.ftd-r2-usage > * + * { padding-top: 12px; border-top: 1px solid var(--ftd-hairline); }
.ftd .ftd-r2-usage__label { margin: 0 0 6px; font-size: 11px; font-weight: 600; letter-spacing: .05em; text-transform: uppercase; color: var(--ftd-label); }

/* ---------------------------------------------------------------- THE FOOTER: Create and Cancel, at the right */
.ftd-r2-foot { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 8px; margin-top: 16px; padding: 12px 16px; border: 1px solid var(--ftd-control-line); border-radius: 8px; background: var(--ftd-inset); }

/* ---------------------------------------------------------------- the simple tabs (Bulk Photo Upload, Image Matching) */
.ftd-r2-simple { display: flex; flex-direction: column; gap: 16px; }
.ftd-r2-simple > .ftd-sec { margin-bottom: 0; }
.ftd-r2-simple > .ftd-alert { margin-bottom: 0; }

/* a tab pane that is not the chosen one is not drawn at all (today every pane is `lazy`, one in the DOM at a time) */
.ftd-r2-pane[hidden] { display: none; }

/* QUANTITY & COSTS, grouped (Tristian, 2026-09-19: "the costs are all over the place ... they should be grouped by
   Net/Gross/Tax and not all bundled together"). Currency, Quantity and Tax Rate lead; then three groups read left to right as
   the sum does: Net, Tax, Gross, each holding its per-unit figure over its total. Every field keeps today's label. */
.ftd .ftd-r2-costs__top { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0 16px; }
.ftd .ftd-r2-costs__groups { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; margin-top: 6px; }
.ftd .ftd-r2-costgroup { min-width: 0; margin: 0; padding: 10px 12px 2px; border: 1px solid var(--ftd-line); border-radius: 6px; background: var(--ftd-inset); }
.ftd .ftd-r2-costgroup > legend { padding: 0 6px; font-size: 12px; font-weight: 600; letter-spacing: .05em; text-transform: uppercase; color: var(--ftd-ink); }
.ftd .ftd-r2-costgroup .ftd-input--num { max-width: none; }
@container ftd (max-width: 560px) { .ftd .ftd-r2-costs__top, .ftd .ftd-r2-costs__groups { grid-template-columns: minmax(0, 1fr); } }
.ftd .ftd-r2-costs__top .ftd-input--num { max-width: none; }

/* ================================================================ THE BRIDGE (T23; not in the reference file)
   IT DECLARES NO LOOK OF ITS OWN. The reference draws a picker as `<select class="ftd-input">`, a chosen tag as
   `.ftd-multi__chip` and the drop area's icon as a direct child of `.ftd-drop`. The product's picker is
   vue-multiselect (its Find-as-you-type, its custom labels and its "Add New" entry are function, and T23 is the look
   only), and vue-dropzone wraps its waiting message in a `.dz-message` of its own. Both write markup this repository
   cannot class. What follows hands the sheet's own box down to that markup and turns off what vue-multiselect's and
   the theme's stylesheets add on top (`resources/sass/custom/plugins/_select2.scss` writes `!important` on
   `.multiselect__tags`, so the answers carry it too). No colour is written: every one is a `--ftd-*` variable. */

/* ---- the picker: `.ftd-input` (one value) or `.ftd-multi` (several) is on vue-multiselect's root, which is the box */
.ftd .multiselect.ftd-input, .ftd .multiselect.ftd-multi { position: relative; display: flex; align-items: center; min-height: 32px; font-size: inherit; color: var(--ftd-ink); cursor: pointer; }
.ftd .multiselect.ftd-input { height: auto; padding: 0 26px 0 10px; background-image: linear-gradient(45deg, transparent 49%, var(--ftd-muted) 50%), linear-gradient(135deg, var(--ftd-muted) 50%, transparent 51%); background-position: right 12px center, right 7px center; background-size: 5px 5px; background-repeat: no-repeat; }
.ftd .multiselect.ftd-multi { padding-right: 26px; }
.ftd .multiselect.ftd-input.multiselect--active, .ftd .multiselect.ftd-multi.multiselect--active { border-color: var(--ftd-accent); box-shadow: 0 0 0 3px var(--ftd-focus); z-index: 5; }
.ftd .multiselect.ftd-input.multiselect--disabled, .ftd .multiselect.ftd-multi.multiselect--disabled { background-color: var(--ftd-inset); color: var(--ftd-muted); cursor: not-allowed; opacity: 1; }
/* vue-multiselect's own caret is the click target that closes an open list: kept, its drawn triangle is not */
.ftd .multiselect.ftd-input > .multiselect__select, .ftd .multiselect.ftd-multi > .multiselect__select { top: 0; right: 0; width: 26px; height: 100%; min-height: 30px; padding: 0; background: transparent; }
.ftd .multiselect.ftd-input > .multiselect__select::before, .ftd .multiselect.ftd-multi > .multiselect__select::before { content: none; }
/* its inner box is not a second box */
.ftd .multiselect.ftd-input > .multiselect__tags, .ftd .multiselect.ftd-multi > .multiselect__tags { flex: 1 1 auto; min-width: 0; min-height: 0 !important; padding: 0 !important; border: 0 !important; border-radius: 0; background: transparent !important; font: inherit !important; color: inherit !important; }
.ftd .multiselect.ftd-multi > .multiselect__tags { display: flex; flex-wrap: wrap; align-items: center; gap: 5px; }
.ftd .multiselect.ftd-multi > .multiselect__tags > .multiselect__tags-wrap { display: contents; }
.ftd .multiselect.ftd-input .multiselect__single, .ftd .multiselect.ftd-input .multiselect__placeholder, .ftd .multiselect.ftd-input .multiselect__input,
.ftd .multiselect.ftd-multi .multiselect__placeholder, .ftd .multiselect.ftd-multi .multiselect__input { min-height: 0; margin: 0; padding: 0 !important; border: 0; border-radius: 0; background: transparent !important; font: inherit; font-size: inherit !important; line-height: 30px; color: inherit !important; }
.ftd .multiselect.ftd-input .multiselect__single { display: block; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.ftd .multiselect.ftd-input .multiselect__placeholder, .ftd .multiselect.ftd-multi .multiselect__placeholder { display: block; color: var(--ftd-muted) !important; }
.ftd .multiselect.ftd-multi .multiselect__placeholder { line-height: 24px; }
.ftd .multiselect.ftd-multi .multiselect__input { width: auto; flex: 1 1 60px; line-height: 22px; }
.ftd .multiselect.ftd-input .multiselect__spinner, .ftd .multiselect.ftd-multi .multiselect__spinner { top: 0; right: 0; width: 26px; height: 30px; background: transparent; }
/* the open list: the control's own line and corner, on the surface */
.ftd .multiselect.ftd-input > .multiselect__content-wrapper, .ftd .multiselect.ftd-multi > .multiselect__content-wrapper { left: -1px; right: -1px; top: 100%; width: auto; margin-top: 3px; border: 1px solid var(--ftd-control-line) !important; border-radius: 6px; background: var(--ftd-surface) !important; color: var(--ftd-ink); font-size: inherit; }
.ftd .multiselect.ftd-input.multiselect--above > .multiselect__content-wrapper, .ftd .multiselect.ftd-multi.multiselect--above > .multiselect__content-wrapper { top: auto; bottom: 100%; margin: 0 0 3px; }
.ftd .multiselect.ftd-input .multiselect__option, .ftd .multiselect.ftd-multi .multiselect__option { min-height: 32px; padding: 8px 10px; line-height: 16px; font-size: inherit; white-space: normal; color: var(--ftd-ink) !important; }
.ftd .multiselect.ftd-input .multiselect__option--highlight, .ftd .multiselect.ftd-multi .multiselect__option--highlight { background: var(--ftd-hover) !important; color: var(--ftd-primary) !important; }
.ftd .multiselect.ftd-input .multiselect__option--selected, .ftd .multiselect.ftd-multi .multiselect__option--selected { background: var(--ftd-inset) !important; color: var(--ftd-ink) !important; font-weight: 600; }
.ftd .multiselect.ftd-input .multiselect__option::after, .ftd .multiselect.ftd-multi .multiselect__option::after { content: none; }

/* ---- the date picker: `input-class="ftd-input"` puts the control's class on vue2-datepicker's own input */
.ftd .ftd-field > .mx-datepicker { display: block; width: 100%; }

/* ---- the drop area: `.ftd-drop` is on vue-dropzone's root. Its `.dz-message` wrapper leaves the layout, and the
   sheet's `.ftd-drop > i` is handed down through it (display: contents does not change what a selector matches).
   Once a file is queued Dropzone appends its preview tiles to the same root: they flow in rows from the left, which is
   all T23 says about them. The bar, the tile and the grid are T32's and go on top of this. */
.ftd .ftd-drop > .dz-message { display: contents; }
.ftd .ftd-drop > .dz-message > i { font-size: 2.4rem; color: var(--ftd-control-line); }
.ftd .ftd-drop.dz-clickable, .ftd .ftd-drop.dz-clickable > .dz-message > * { cursor: pointer; }
.ftd .ftd-drop.dz-started { flex-flow: row wrap; align-items: flex-start; justify-content: flex-start; gap: 12px; }
.ftd .ftd-drop.dz-drag-hover { border-color: var(--ftd-accent); border-style: solid; background: var(--ftd-hover); }

/* ================================================================ THE COLUMN IS A CARD-WIDTH CONTAINER (F19; not in the reference file)
   IT DECLARES NO LOOK OF ITS OWN, and no width of its own: it only says what the widths already written
   elsewhere are to be measured against.

   THE FAULT (DEFECTS F19, ledger T32-070 to T32-073). The queued tile's three widths are container queries on
   a container NAMED `ftdcard` (`resources/sass/custom/_ftd-r11-images.scss`, its 560px and 380px queries: the
   196px tile with its 12px gap and 96px picture, and the one-across fold with its 132px picture). In the mock
   the element naming `ftdcard` is the page's own `.ftd-r11-pane`, which does not ship; in the merged sheet the
   only `ftdcard` containers are `.ftd-card__body`, `.ftd-modal__body`, `.ftd-summary` and `.ftd-sheet`, and
   this page draws none of them. So on the Add Asset page NO ancestor of the upload column named that
   container and the three widths could never fire at all. Measured on the base over this branch's own built
   `app.css` with the sheets in `app.blade.php`'s order, three files queued: at 1366 the upload column is
   467.6px and the queue still drew ONE 433.6px track with a 120px picture, and at 390 the column is 342px and
   the picture was still 120px where the line asks for 132.

   WHY THE COLUMN, and not a wrapper of the queue's own. The widths are about the column: the ledger reads them
   off `.ftd-r2-col` itself (`throughput/ledger/checks/06b-asset-form-upload-and-states.js`, T32-070 to
   T32-073, `g.closest('.ftd-r2-col')`), and `NewAsset.vue` puts this class on both tracks through
   `columns_class`. Naming the container here means the query and the reading measure the same box.

   `ftdcard`, NEVER `ftd`. `.ftd` names `ftd` (`film-tv-dashboard.css`) and every `@container ftd (...)` rule
   above -- this page's own 900px stack, the 1080px field grid, the money and cost folds -- must go on
   answering the PAGE. A container of a DIFFERENT name in between does not answer to them: a named query skips
   any container whose name is not the one asked for, so those rules still resolve to `.ftd`.

   BOTH COLUMNS TAKE IT, which is what a class is for. Every `ftdcard` query in every shipped sheet was read
   for this: the only one that matches anything inside either column of this page is the merged sheet's own
   `@container ftdcard (max-width: 560px) { .ftd-drop--bar .ftd-drop__sub { margin-left: 0 } }`
   (`film-tv-dashboard.css`), and its `@container ftd` twin on the next line says a narrow box is exactly when
   that is wanted. Nothing else in the two columns carries `.ftd-panels`, `.ftd-stats`, `.ftd-facts`,
   `.ftd-asset`, `.ftd-band--sm`, `.ftd-files__*` or `.ftd-post*`. */
.ftd .ftd-r2-col { container-type: inline-size; container-name: ftdcard; }
