        /* ==========================================================================
           #AO The leftovers, in the deck log (owner, 2026-09-14: 做上面的迁移吧)

           What the app-wide audit found still in the outgoing world and recorded nowhere:
           the two overlays that wait, the card a photo pin opens, the note a map marker
           opens, a video with no still, a quote and a link in an entry, and the page an
           old share link now opens. Each was photographed as it was before this file
           existed (.impeccable/review/leftovers, commit 7a3b829).

           ⚠️ Every one of these hangs off <body>, not off a page, so each is on the token
           list at the head of 02-auth.css; without that every var() below resolves to
           nothing, as it did for nine surfaces before them.
           ========================================================================== */

        /* ---- waiting: the whole app ---------------------------------------------------
           A plate of stock with its words in print. It still turns: the spinner stays until
           the round that does every waiting state together (owner, 2026-09-14, of the
           weather: 保持转圈，统一时再改), and it is ink now rather than the outgoing brown. */
        #loadingOverlay {
            position: fixed;
            inset: 0;
            z-index: 7000;
            display: none;
            align-items: center;
            justify-content: center;
            background: rgba(22, 25, 26, 0.42);   /* the oilskin, not the outgoing #242424 (2026-09-17) */
        }
        #loadingOverlay.active { display: flex; }
        #loadingOverlay .loading-spinner {
            display: flex;
            flex-direction: column;
            align-items: center;
            gap: var(--sp-sm);
            min-width: 220px;
            max-width: 300px;
            box-sizing: border-box;
            padding: var(--sp-lg) var(--sp-xl);
            background: var(--log-stock);
            border: 1px solid var(--log-rule-firm);
        }
        #loadingOverlay .loading-spinner-ring {
            width: 28px;
            height: 28px;
            box-sizing: border-box;
            border: 2px solid var(--log-rule);
            border-top-color: var(--log-ink);
            border-radius: 50%;   /* gate:allow rotate — 旋转动画元素，方形旋转会露角，是视觉故障不是风格选择 */
            animation: btnSpin 0.7s linear infinite;
        }
        #loadingOverlay .loading-spinner-text {
            font-family: var(--log-print);
            font-size: var(--fs-micro);
            font-weight: 600;
            letter-spacing: 0.16em;
            text-transform: uppercase;
            text-align: center;
            color: var(--log-ink-soft);
        }
        @media (prefers-reduced-motion: reduce) {
            #loadingOverlay .loading-spinner-ring { animation: none; }
        }

        /* ---- waiting: an upload --------------------------------------------------------
           Which file of how many, in the print face's lining figures; the name in the
           written face; how far, as an ink rule filling a hairline. */
        #uploadProgressOverlay {
            position: fixed;
            inset: 0;
            z-index: 9999;
            display: none;
            align-items: center;
            justify-content: center;
            background: rgba(22, 25, 26, 0.42);   /* the oilskin, not the outgoing #242424 (2026-09-17) */
        }
        #uploadProgressOverlay .upload-progress-card {
            min-width: 230px;
            max-width: 300px;
            box-sizing: border-box;
            padding: var(--sp-lg) var(--sp-xl);
            text-align: center;
            background: var(--log-stock);
            border: 1px solid var(--log-rule-firm);
        }
        #uploadProgressOverlay .upload-progress-count {
            font-family: var(--log-print);
            font-size: var(--fs-xl);
            font-weight: 600;
            font-variant-numeric: lining-nums tabular-nums;
            color: var(--log-ink);
        }
        #uploadProgressOverlay .upload-progress-name {
            margin-top: var(--sp-2xs);
            font-family: var(--log-write);
            font-size: var(--fs-small);
            color: var(--log-ink-soft);
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }
        #uploadProgressOverlay .upload-progress-track {
            height: 3px;
            margin-top: var(--sp-sm);
            overflow: hidden;
            background: var(--log-rule);
        }
        #uploadProgressOverlay .upload-progress-fill {
            height: 100%;
            background: var(--log-ink);
            transition: width 0.15s linear;
        }
        #uploadProgressOverlay .upload-progress-pct {
            margin-top: var(--sp-2xs);
            font-family: var(--log-print);
            font-size: var(--fs-micro);
            font-weight: 600;
            letter-spacing: 0.16em;
            font-variant-numeric: lining-nums tabular-nums;
            color: var(--log-ink-soft);
        }

        /* ---- the card a photo pin opens ------------------------------------------------
           A sheet from the foot, as before, on the stock: the place named on a band with
           CLOSE beside it, what else happened there in the written face, the count in
           print. A favourite keeps its heart on a paper chip, the gallery's own mark. */
        #photoPlaceCard.ppc {
            position: fixed;
            left: 0;
            right: 0;
            bottom: 0;
            z-index: 46;
            max-height: 62dvh;
            display: flex;
            flex-direction: column;
            background: var(--log-stock);
            border-top: 1px solid var(--log-rule-firm);
            transform: translateY(100%);
            /* Hidden even if the transform is ever defeated — a closed sheet must not be
               scrollable into view. */
            visibility: hidden;
            transition: transform 0.3s ease, visibility 0s linear 0.3s;
            padding-bottom: env(safe-area-inset-bottom, 0px);
        }
        #photoPlaceCard.ppc.is-open {
            transform: translateY(0);
            visibility: visible;
            transition: transform 0.3s ease, visibility 0s;
        }
        #photoPlaceCard .ppc-head {
            flex: none;
            display: flex;
            align-items: center;
            justify-content: space-between;
            gap: var(--sp-md);
            min-height: var(--log-row);
            box-sizing: border-box;
            padding: 0 var(--sp-lg);
            background: var(--log-stock-band);
            border-bottom: 1px solid var(--log-rule-firm);
        }
        #photoPlaceCard .ppc-title {
            flex: 1;
            min-width: 0;
            font-family: var(--log-print);
            font-size: var(--fs-lg);
            font-weight: 600;
            color: var(--log-ink);
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }
        #photoPlaceCard .ppc-close {
            flex: none;
            min-height: 44px;
            min-width: 44px;   /* CLOSE in micro caps is 40px wide; the press is not (finish review, 2026-09-14) */
            margin: 0;
            padding: 0;
            border: none;
            border-radius: 0;
            background: none;
            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);
            cursor: pointer;
        }
        #photoPlaceCard .ppc-close:focus-visible {
            outline: none;
            box-shadow: inset 0 0 0 2px var(--log-ink);
        }
        #photoPlaceCard .ppc-also {
            padding: var(--sp-sm) var(--sp-lg) 0;
            font-family: var(--log-write);
            font-size: var(--fs-small);
            line-height: 1.5;
            color: var(--log-ink-soft);
        }
        #photoPlaceCard .ppc-count {
            padding: var(--sp-sm) var(--sp-lg);
            font-family: var(--log-print);
            font-size: var(--fs-micro);
            font-weight: 600;
            letter-spacing: 0.16em;
            text-transform: uppercase;
            font-variant-numeric: lining-nums tabular-nums;
            color: var(--log-ink-soft);
        }
        #photoPlaceCard .ppc-grid {
            flex: 1;
            min-height: 0;
            overflow-y: auto;
            -webkit-overflow-scrolling: touch;
            display: grid;
            grid-template-columns: repeat(3, 1fr);
            gap: var(--sp-2xs);
            padding: 0 var(--sp-lg) var(--sp-lg);
        }
        #photoPlaceCard .ppc-tile {
            position: relative;
            display: block;
            width: 100%;
            margin: 0;
            padding: 0;
            border: none;
            border-radius: 0;
            aspect-ratio: 1;
            overflow: hidden;
            background: #B9C3C0;
            cursor: pointer;
        }
        #photoPlaceCard .ppc-tile img { width: 100%; height: 100%; object-fit: cover; display: block; }
        /* An outline, not the inset shadow: the photograph covers a shadow drawn inside the box. */
        #photoPlaceCard .ppc-tile:focus-visible { outline: 2px solid var(--log-ink); outline-offset: -2px; }
        #photoPlaceCard .ppc-fav {
            position: absolute;
            top: 4px;
            right: 4px;
            width: 22px;
            height: 22px;
            display: flex;
            align-items: center;
            justify-content: center;
            background: var(--log-stock);
            color: var(--log-magenta);
        }
        #photoPlaceCard .ppc-fav svg { fill: currentColor; }

        /* ---- the note a map marker opens -------------------------------------------------
           Google's own window, with its header and × turned off (headerDisabled) and its
           white bubble, radius and shadow taken back to a plate of stock with a firm rule.
           Tapping the map puts it away. */
        #tripMapPage .gm-style .gm-style-iw-c {
            padding: 0 !important;
            border-radius: 0;
            background: var(--log-stock);
            border: 1px solid var(--log-rule-firm);
            box-shadow: none;
        }
        #tripMapPage .gm-style .gm-style-iw-d {
            overflow: hidden !important;
            padding: 0 !important;
        }
        #tripMapPage .gm-style .gm-style-iw-tc::after { background: var(--log-stock); }
        #tripMapPage .mk-pop {
            min-width: 140px;
            padding: var(--sp-sm) var(--sp-md);
        }
        #tripMapPage .mk-pop-name {
            font-family: var(--log-print);
            font-size: var(--fs-base);
            font-weight: 600;
            color: var(--log-ink);
        }
        #tripMapPage .mk-pop-said {
            margin-top: 2px;
            font-family: var(--log-print);
            font-size: var(--fs-micro);
            font-weight: 600;
            letter-spacing: 0.16em;
            text-transform: uppercase;
            font-variant-numeric: lining-nums tabular-nums;
            color: var(--log-ink-soft);
        }

        /* The one act a found place has (41-nearby.js): the way to it. In the magenta every act on this page wears,
           underlined rather than boxed — a filled block in a note this small reads as a label, not a door. */
        #tripMapPage .mk-pop-go {
            margin-top: var(--sp-xs);
            padding: 0;
            min-height: 32px;
            background: none;
            border: none;
            cursor: pointer;
            font-family: var(--log-print);
            font-size: var(--fs-micro);
            font-weight: 600;
            letter-spacing: 0.16em;
            text-transform: uppercase;
            color: var(--log-magenta);
            text-decoration: underline;
            text-underline-offset: 0.25em;
        }

        /* ---- a file on a ticket that never reached the server -------------------------------
           Nothing to open, so the word is not underlined as an act. */
        .pgstack-root .tk-file-act.is-none {
            text-decoration: none;
            color: var(--log-ink-soft);
        }

        /* ---- a quote and a link, read and written ---------------------------------------------
           The quote set off by a firm rule in the soft ink; a link is the ink, underlined, as
           every act in the log is. The same in the entry and in the editor, so what is written
           reads back as it was set. */
        .pgstack-root .jp-text blockquote,
        #writeJournalModal .jw-editor blockquote {
            margin: var(--sp-md) 0;
            padding-left: var(--sp-md);
            border-left: 1px solid var(--log-rule-firm);
            font-style: italic;
            color: var(--log-ink-soft);
        }
        .pgstack-root .jp-text a,
        #writeJournalModal .jw-editor a {
            color: var(--log-ink);
            text-decoration: underline;
            text-underline-offset: 2px;
            text-decoration-thickness: 1px;
        }

        /* ---- an old share link --------------------------------------------------------------
           Sharing is taken out to be rebuilt (owner, 2026-09-14: share的功能都显拿掉 后面重新做 旧的都不要了
           留个空状态之类的 或者写soon). A link sent before then opens this: the log's band, the
           sign-in page's own SOON stamp, one line saying what happened, and the way in. Over the
           sign-in sheet (z-index 10000), which the old shared page sat under for anybody not
           signed in. */
        #sharedTripOverlay {
            position: fixed;
            inset: 0;
            z-index: 10001;
            overflow-y: auto;
            background: var(--log-stock);
        }
        #sharedTripOverlay .st-band {
            display: flex;
            align-items: center;
            min-height: var(--log-row);
            box-sizing: border-box;
            padding: 0 var(--sp-lg);
            background: var(--log-stock-band);
            border-bottom: 1px solid var(--log-rule-firm);
            font-family: var(--log-print);
            font-size: var(--fs-micro);
            font-weight: 600;
            letter-spacing: 0.16em;
            text-transform: uppercase;
            color: var(--log-ink);
        }
        #sharedTripOverlay .st-open {
            display: inline-flex;
            align-items: center;
            min-height: 44px;
            margin: var(--sp-sm) var(--sp-lg);
            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);
        }
        #sharedTripOverlay .st-open:focus-visible {
            outline: none;
            box-shadow: inset 0 0 0 2px var(--log-ink);
        }
