        /* ── carried from css/06-legacy-map-stops.css on 2026-09-22, as that part was deleted.
           It is the record of how this room came to be dressed in one file, and its last
           sentence is an instruction addressed to this file. ── */
/* ══════════════════════════════════════════════════════════
           The stop detail sheet was dressed here too, and is not any more · 2026-09-12
           ══════════════════════════════════════════════════════════

           Five hundred and sixty-eight lines ended this file and every one of them dressed
           one overlay: the sheet's head, its two words, its section heads, the stay ticket
           in all its parts, the activity timeline with its rail and its dot, the day band,
           the notes aside, and a form that was rewritten in April and whose `.form-input`
           rules had had nothing to match ever since.

           It loads BEFORE css/17t-stop.css, so it did not win the properties that file
           names — it won the ones it does not. That is a quieter failure than the one in
           css/24-tail.css and it produced the same picture: a migrated room with
           `--accent` on its DAY 4–7, `--border` under its section heads, `--text-secondary`
           on its date range and a 1px `#C4CBC3` box still drawn round every category word.
           A rule that does not mention a property does not win it, and the room could not
           win a property nobody in it had mentioned.

           So the room is dressed in ONE file. If something here is wanted back, it goes to
           css/17t-stop.css — not to a second copy that loads at a different time. */

        /* ==========================================================================
        /* ⚠️ SINCE 2026-09-30 THIS FILE HOLDS ONLY WHAT IS SHARED. The stop itself is a page in the folio now
           (css/61-folio-stops.css). The head below is kept as the record of how the room was migrated on
           2026-09-11; the rules it describes are gone. */
           #AE  A stop — what is at one place, and the form that changes it
           ==========================================================================

           Migrated into the deck log on 2026-09-11, at the owner's word: "trip页面里的
           add a stop 页面 还是旧世界的 迁移至新世界，依旧需要加图片search 功能 unsplash",
           and then "stop detail sheet一起做" — so both modes, the reading one and the form.

           ⚠️ THIS ROOM COULD NOT BE MIGRATED BY CSS. Forty-one elements in the form carried
           a `style` attribute and twenty-four of them PAINTED — font, colour, border,
           background — and an inline style beats every stylesheet there is. The markup had
           to be rewritten before a single rule here could reach anything. The note that used
           to sit in it said why, honestly: "inline styles reproduce the 9a canvas sample
           verbatim". That is a reasonable way to land a design and a terrible way to keep
           one, and it is worth naming because this is the last room in the app that did it.

           ⚠️ AND #stopDetailSheet WAS THE EIGHTH SURFACE MISSING FROM THE TOKEN LIST at the
           head of css/02-auth.css. Checked before writing: getComputedStyle returned "" for
           both --log-ink and --log-stock. Eight is no longer a run of bad luck — every
           overlay in this app is on <body>, because .app-frame's desktop transform degrades
           position:fixed, so EVERY overlay needs that line.

           ⚠️ THE PHOTOGRAPH SEARCH IS THE TRIP FORM'S COMPONENT, NOT A COPY OF IT. The
           `.ucov-*` markup here is bound by bindCoverSearch (public/11a-cover-search.js),
           which was restructured the same day to take a scope and a callback precisely so
           this room would not get a second one. The dressing for it is shared too — see the
           note above the .ucov rules at the foot of this file. */

        /* The stop sheet's own rules (the sheet, its reading mode, a bed as a line in the register, what is planned
           by day, the form, the two ways to a photograph, the acts) went on 2026-09-30: the room moved onto the folio
           (css/61-folio-stops.css, public/04-stops.js) and #stopDetailSheet is no longer drawn. What is left in this
           file is what two rooms still share: a place offered under a field, and the photograph search. */

        /* ==========================================================================
           A place, offered — in whichever room asks for one
           ==========================================================================

           ⚠️ FOUR ROOMS DRESSED THIS LIST SEPARATELY: Saved, the profile editor, the journal
           editor, and — as of today — the stop sheet. The journal editor's own note
           anticipated exactly this: "scoped to this form because .place-suggestions is
           shared with the stops picker, WHICH IS IN ANOTHER ROOM'S ROUND." This is that
           round, so the fourth copy is not written; the three become one.

           ⚠️ WHAT DIFFERS BETWEEN THE ROOMS IS GEOMETRY, AND THAT IS REAL. Saved floats the
           list over the sheet; the journal editor puts it in normal flow, because there it
           was absolutely positioned inside one half of a two-column row and opened 166px
           wide with its bottom clipped — laid out, opaque, invisible, and reported as "the
           field cannot be used". Those are different answers to different rooms. The INK is
           not: stock, one rule, 44px rows, the band on hover. That part lives here, and each
           room now says only where its list sits. */

        .place-suggestions {
            background: var(--log-stock);
            border: 1px solid var(--log-rule-firm);
            border-radius: 0;
            box-shadow: none;
            overflow-y: auto;
        }

        .place-suggestion {
            display: flex;
            align-items: center;
            min-height: 44px;
            padding: var(--sp-xs) var(--sp-md);
            font-family: var(--log-write);
            font-size: var(--fs-base);
            color: var(--log-ink);
            cursor: pointer;
        }
        .place-suggestion + .place-suggestion { border-top: 1px solid var(--log-rule); }
        /* Said above the list when it is the journey's stops rather than a search (01-core.js). */
        .place-suggestions-note {
            margin: 0;
            padding: var(--sp-xs) var(--sp-md);
            font-family: var(--log-print);
            font-size: var(--fs-micro);
            font-weight: 600;
            letter-spacing: 0.14em;
            text-transform: uppercase;
            color: var(--log-ink);
        }
        #writeJournalModal .place-suggestions-note { padding-left: 0; padding-right: 0; }
        .place-suggestion:hover,
        .place-suggestion:active { background: var(--log-stock-band); }
        .place-suggestion:focus-visible {
            outline: none;
            box-shadow: inset 0 0 0 2px var(--log-ink);
        }

        /* ==========================================================================
           The photograph search, in whichever room asks for it
           ==========================================================================

           ⚠️ THESE RULES WERE SCOPED TO #planTripModal AND ARE NOT ANY MORE. The component
           became shared on 2026-09-11 (bindCoverSearch takes a scope and a callback), and a
           shared component dressed per-room is a copy waiting to happen — the same fault as
           the two pickers where one kept its magnifier, and the two calendars before them.

           So the dressing lives once, on `.ucov`, and each room only says where the panel
           sits. If a third room asks, it draws the markup and inherits all of this. */

        .ucov {
            padding: var(--sp-sm) 0 var(--sp-md);
            background: var(--log-stock);
        }

        .ucov-bar {
            display: flex;
            align-items: stretch;
            gap: var(--sp-md);
            border-bottom: 1px solid var(--log-rule-firm);
        }

        .ucov-input {
            flex: 1;
            min-width: 0;
            min-height: 44px;
            padding: 0;
            border: none;
            border-radius: 0;
            background: none;
            outline: none;
            font-family: var(--log-write);
            font-size: var(--fs-base);
            color: var(--log-ink);
        }
        .ucov-input::placeholder {
            color: var(--log-ink-soft);
            opacity: 1;   /* Firefox dims a placeholder by default; 0.54 of ink-soft is not legible */
        }

        .ucov-go {
            flex: none;
            min-height: 44px;
            padding: 0;
            border: none;
            background: none;
            cursor: pointer;
            font-family: var(--log-print);
            font-size: var(--fs-micro);
            font-weight: 600;
            letter-spacing: 0.16em;
            text-transform: uppercase;
            text-decoration: underline;
            text-underline-offset: 0.25em;
            text-decoration-thickness: 1px;
            color: var(--log-ink);
        }

        /* What the search has to say for itself — looking, nothing found, or why it could
           not ask. An empty grid and a grid that has not been asked for look identical,
           which is how the notifications page spent a week pretending it had no notices. */
        .ucov-said {
            padding-top: var(--sp-sm);
            font-family: var(--log-write);
            font-size: var(--fs-body);
            color: var(--log-ink-soft);
        }
        .ucov-said.is-wrong { color: var(--log-port); }

        .ucov-grid {
            display: grid;
            grid-template-columns: repeat(2, minmax(0, 1fr));
            gap: 1px;
            margin-top: var(--sp-sm);
            background: var(--log-rule);
            border: 1px solid var(--log-rule);
        }
        .ucov-grid:empty { display: none; }

        /* A figure, not a button: the byline under each photograph has to be a LINK to the
           photographer's page, and a <button> may not contain one. So the picture is the
           button and the byline is its sibling. */
        .ucov-tile {
            position: relative;
            display: block;
            width: 100%;
            aspect-ratio: 16 / 10;
            margin: 0;
            padding: 0;
            border: none;
            border-radius: 0;
            background: var(--log-stock-band);
            overflow: hidden;
        }

        .ucov-take {
            display: block;
            width: 100%;
            height: 100%;
            padding: 0;
            border: none;
            border-radius: 0;
            background: none;
            cursor: pointer;
        }

        .ucov-tile img {
            width: 100%;
            height: 100%;
            object-fit: cover;
            display: block;
        }

        /* ⚠️ 0.70, AND THE NUMBER IS MEASURED. At 0.62 this band composites over a bright
           photograph to rgb(111,112,113), and --log-on-oilskin on that is 4.18:1 — under the
           4.5 that 11px text needs. Over the capture's stub it measured 5.25:1, which is
           exactly why the photograph of it looked fine; a real Bali search comes back full of
           white sky, which is what a landscape-only search returns. At 0.70 the worst case is
           5.51:1.

           Whoever took it, on every tile — not only on the one that gets chosen. That is what
           "wherever the photograph is shown" means, and twelve are shown at once. */
        .ucov-by {
            position: absolute;
            left: 0;
            right: 0;
            bottom: 0;
            padding: 2px var(--sp-xs);
            background: rgba(22, 25, 26, 0.70);
            font-family: var(--log-print);
            font-size: var(--fs-micro);
            letter-spacing: 0.08em;
            color: var(--log-on-oilskin);
            overflow: hidden;
            text-overflow: ellipsis;
            white-space: nowrap;
            text-align: left;
        }
        .ucov-by a {
            color: var(--log-on-oilskin);
            text-decoration: underline;
            text-underline-offset: 0.15em;
        }

        /* Chosen. Stamped on the margin rather than tinted over the photograph — a wash over
           a picture is exactly the Ink-Not-Glow the rest of this world refuses, and it would
           also change the thing you are trying to judge. */
        .ucov-tile.is-on { box-shadow: inset 0 0 0 4px var(--log-ink); }
        .ucov-take:focus-visible {
            outline: none;
            box-shadow: inset 0 0 0 3px var(--log-magenta);
        }

        .ucov-source {
            padding-top: var(--sp-sm);
            font-family: var(--log-write);
            font-size: var(--fs-small);
            color: var(--log-ink-soft);
        }
        .ucov-source a {
            color: var(--log-ink);
            text-decoration: underline;
            text-underline-offset: 0.2em;
        }
