/*
 * FlyUI Rail Remote v0.1.0.4 — assets/flyui-rail-remote.css
 *
 * Slim one-thumb vertical navigation rail for CapeLookout Community Grid
 * pages, finished in the GDS dark-glass system (dark slate, cyan #79e7ff
 * accent, gold #ffd670, glassmorphic blur). The concept art is blue bars;
 * this is that behavior polished into Flybridge.
 *
 * Layout contract the JS depends on:
 *   .flyui-rail-remote            fixed root, vertically centered, right side
 *   .flyui-rail-remote.is-left    mirrors to the left, subrail opens inward
 *   .fur-rail        > .fur-cat   (icon + label, the thumb zones)
 *   .fur-subrail     > .fur-subrail-title / .fur-subrail-list > .fur-sub
 *   .fur-side-toggle              left/right switch, parked at the top corner
 *
 * State classes set by the JS:
 *   .fur-cat.is-active            gesture target (thumb is on/over this row)
 *   .fur-cat.is-scroll-active     section the page is currently scrolled to
 *   .fur-sub.is-active            subcat under the thumb
 *   .fur-subrail.is-open          lane visible + hit-testable
 *
 * Dense standalone fallback rows preserve the original 15-lane geometry.
 * Community Grid manifests add fur-density--sparse when eight or fewer live
 * lanes exist, restoring full 42px+ thumb targets without a tall empty rail.
 */

.flyui-rail-remote {
	/* --- locked tokens (brief §5) --- */
	--fur-row-h: clamp(42px, calc((100dvh - 128px) / 15), 56px);
	--fur-rail-w: clamp(76px, 18vw, 92px);
	--fur-sub-w: clamp(150px, 42vw, 220px);

	/* read by the JS for flight offset; demo overrides this inline */
	--fur-header-offset: 72px;

	/* --- GDS palette --- */
	--fur-glass: rgba(13, 22, 33, 0.72);
	--fur-glass-strong: rgba(10, 18, 28, 0.86);
	--fur-border: rgba(121, 231, 255, 0.18);
	--fur-border-soft: rgba(121, 231, 255, 0.10);
	--fur-ink: #d6e6f2;
	--fur-ink-dim: rgba(214, 230, 242, 0.62);
	--fur-cyan: #79e7ff;
	--fur-gold: #ffd670;
	--fur-active-a: rgba(0, 185, 215, 0.95);
	--fur-active-b: rgba(0, 149, 210, 0.88);
	--fur-shadow: 0 10px 34px rgba(0, 0, 0, 0.46);

	position: fixed;
	top: 0;
	bottom: 0;
	right: 10px;
	left: auto;
	z-index: 99999;

	width: var(--fur-rail-w);

	/* Full-height, no transform: a transformed ancestor would trap the
	   position:fixed subcat lane against the root instead of the viewport, so
	   the rail is centered with flex instead. Pass-through (pointer-events
	   none) — only the rail + open lane + controls catch input. */
	display: flex;
	flex-direction: column;
	justify-content: center;
	align-items: flex-end;

	box-sizing: border-box;
	font-family: inherit;
	-webkit-tap-highlight-color: transparent;

	pointer-events: none;
}

.flyui-rail-remote.is-left {
	right: auto;
	left: 10px;
	align-items: flex-start;
}

.flyui-rail-remote *,
.flyui-rail-remote *::before,
.flyui-rail-remote *::after {
	box-sizing: border-box;
}

/* ===================== RAIL ===================== */
.fur-rail {
	position: relative;
	display: flex;
	flex-direction: column;
	gap: 6px;
	padding: 8px 7px;

	width: var(--fur-rail-w);
	max-height: calc(100dvh - 24px);
	overflow: visible;

	background: var(--fur-glass);
	border: 1px solid var(--fur-border);
	border-radius: 20px;
	box-shadow: var(--fur-shadow);
	-webkit-backdrop-filter: blur(16px) saturate(140%);
	backdrop-filter: blur(16px) saturate(140%);

	pointer-events: auto;
}

/* On short viewports the 15 rows can exceed the rail; allow it to scroll
   internally rather than overflow the glass. Partial mitigation — see
   SMOKE-REPORT known limitations. */
@media (max-height: 700px) {
	.fur-rail { overflow-y: auto; -webkit-overflow-scrolling: touch; }
	.fur-rail::-webkit-scrollbar { width: 0; height: 0; }
	.fur-rail { scrollbar-width: none; }
}

/* ===================== CATEGORY ROW ===================== */
.fur-cat {
	position: relative;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: 2px;

	height: var(--fur-row-h);
	min-height: 42px;
	width: 100%;
	padding: 4px 2px;

	border: 1px solid transparent;
	border-radius: 13px;
	background: rgba(255, 255, 255, 0.025);
	color: var(--fur-ink-dim);

	font: inherit;
	line-height: 1;
	cursor: pointer;
	user-select: none;
	-webkit-user-select: none;

	/* the rail owns the gesture; rows must not scroll the page */
	touch-action: none;
	transition: background 140ms ease, color 140ms ease,
		border-color 140ms ease, transform 120ms ease, box-shadow 140ms ease;
}

.fur-cat:hover {
	color: var(--fur-ink);
	background: rgba(121, 231, 255, 0.07);
	border-color: var(--fur-border-soft);
}

.fur-cat-icon {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 24px;
	height: 24px;
	flex: 0 0 auto;
}

.fur-cat-icon svg { width: 24px; height: 24px; display: block; }

.fur-cat-label {
	font-size: 10px;
	font-weight: 600;
	letter-spacing: 0.01em;
	text-transform: capitalize;
	max-width: 100%;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

/* current scroll section — quiet cyan presence */
.fur-cat.is-scroll-active {
	color: var(--fur-ink);
	background: rgba(121, 231, 255, 0.12);
	border-color: rgba(121, 231, 255, 0.28);
}
.fur-cat.is-scroll-active .fur-cat-icon svg { color: var(--fur-cyan); }

/* gesture target — strongest state, the blue bar from the concept (brief §5) */
.fur-cat.is-active {
	background: linear-gradient(90deg, var(--fur-active-a), var(--fur-active-b));
	color: #fff;
	border-color: rgba(255, 255, 255, 0.28);
	box-shadow: 0 4px 16px rgba(0, 165, 220, 0.42);
	transform: translateX(0) scale(1.02);
}
.fur-cat.is-active .fur-cat-icon svg { color: #fff; }

/* gesture beats scroll-active when both would apply */
.fur-cat.is-active.is-scroll-active {
	background: linear-gradient(90deg, var(--fur-active-a), var(--fur-active-b));
}

.fur-cat:focus { outline: none; }
.fur-cat:focus-visible {
	outline: 2px solid var(--fur-cyan);
	outline-offset: 2px;
	color: var(--fur-ink);
}

/* ===================== CONTROLS (side switch + hide) ===================== */
/* In-flow, sitting just above the rail. The root is a centered flex column,
   so controls + rail center as a group; no absolute positioning (which would
   escape the now full-height root). */
.fur-controls {
	display: flex;
	gap: 8px;
	margin-bottom: 8px;
	z-index: 4;
	pointer-events: none; /* only the buttons catch input */
}

.fur-side-toggle,
.fur-hide-toggle {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 34px;
	height: 34px;
	padding: 0;

	background: var(--fur-glass-strong);
	border: 1px solid rgba(121, 231, 255, 0.32);
	border-radius: 50%;
	color: var(--fur-cyan);
	box-shadow: var(--fur-shadow);
	opacity: 1;
	-webkit-backdrop-filter: blur(14px);
	backdrop-filter: blur(14px);

	cursor: pointer;
	pointer-events: auto;
	transition: background 140ms ease, color 140ms ease, border-color 140ms ease;
}

.fur-side-toggle:hover { color: var(--fur-gold); border-color: rgba(255, 214, 112, 0.45); }
.fur-hide-toggle:hover { color: var(--fur-gold); border-color: rgba(255, 214, 112, 0.45); }
.fur-side-toggle:focus,
.fur-hide-toggle:focus { outline: none; }
.fur-side-toggle:focus-visible,
.fur-hide-toggle:focus-visible { outline: 2px solid var(--fur-cyan); outline-offset: 2px; }

/* Bidirectional swap mark — reads the same in both modes, so no mirroring. */
.fur-side-toggle svg { width: 17px; height: 17px; display: block; }
.fur-hide-toggle svg { width: 16px; height: 16px; display: block; }

/* ===================== HIDE / PEEK ===================== */
/* When hidden, the rail/lane/controls vanish and only a clearly-labeled
   "Show remote" peek button remains. */
.fur-peek-toggle {
	display: none;
	align-items: center;
	gap: 7px;

	min-height: 34px;
	padding: 0 13px;

	background: var(--fur-glass-strong);
	border: 1px solid rgba(121, 231, 255, 0.34);
	border-radius: 999px;
	color: var(--fur-cyan);
	box-shadow: var(--fur-shadow);
	-webkit-backdrop-filter: blur(14px);
	backdrop-filter: blur(14px);

	font: inherit;
	font-size: 12px;
	font-weight: 800;
	letter-spacing: 0.02em;
	white-space: nowrap;
	cursor: pointer;
	pointer-events: auto;
	transition: background 140ms ease, color 140ms ease, border-color 140ms ease;
}
.fur-peek-toggle:hover { color: var(--fur-gold); border-color: rgba(255, 214, 112, 0.45); }
.fur-peek-toggle:focus { outline: none; }
.fur-peek-toggle:focus-visible { outline: 2px solid var(--fur-cyan); outline-offset: 2px; }
.fur-peek-toggle svg { width: 15px; height: 15px; display: block; flex: 0 0 auto; }

.flyui-rail-remote.is-hidden {
	width: auto;
	height: auto;
	max-height: none;
}
.flyui-rail-remote.is-hidden .fur-rail,
.flyui-rail-remote.is-hidden .fur-subrail,
.flyui-rail-remote.is-hidden .fur-controls { display: none; }
.flyui-rail-remote.is-hidden .fur-peek-toggle { display: inline-flex; }

/* ===================== SUBRAIL ===================== */
.fur-subrail {
	position: fixed;
	top: var(--fur-sub-y, 50vh);
	transform: translateY(-50%) scale(0.98);
	transform-origin: center right;

	width: var(--fur-sub-w);
	max-height: calc(100dvh - 24px);
	padding: 10px;

	background: var(--fur-glass-strong);
	border: 1px solid var(--fur-border);
	border-radius: 18px;
	box-shadow: var(--fur-shadow);
	-webkit-backdrop-filter: blur(18px) saturate(140%);
	backdrop-filter: blur(18px) saturate(140%);

	display: flex;
	flex-direction: column;
	gap: 8px;
	overflow-y: auto;
	-webkit-overflow-scrolling: touch;

	opacity: 0;
	visibility: hidden;
	pointer-events: none;
	transition: opacity 150ms ease, transform 150ms ease, visibility 0s linear 150ms;
}

/* opens INWARD toward page center: right rail -> lane on its left, and the
   mirror for left rail. Offset is viewport-based now that the lane is fixed
   and pinned to the active row on desktop and mobile alike. */
.flyui-rail-remote:not(.is-left) .fur-subrail {
	right: calc(var(--fur-rail-w) + 14px);
	left: auto;
	transform-origin: center right;
}
.flyui-rail-remote.is-left .fur-subrail {
	left: calc(var(--fur-rail-w) + 14px);
	right: auto;
	transform-origin: center left;
}

.fur-subrail.is-open {
	opacity: 1;
	visibility: visible;
	pointer-events: auto;
	transform: translateY(-50%) scale(1);
	transition: opacity 150ms ease, transform 150ms ease, visibility 0s;
}

.fur-subrail::-webkit-scrollbar { width: 6px; }
.fur-subrail::-webkit-scrollbar-thumb {
	background: rgba(121, 231, 255, 0.25);
	border-radius: 6px;
}

.fur-subrail-title {
	font-size: 12px;
	font-weight: 700;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--fur-cyan);
	padding: 2px 6px 6px;
	border-bottom: 1px solid var(--fur-border-soft);
	flex: 0 0 auto;
}

.fur-subrail-list {
	display: flex;
	flex-direction: column;
	gap: 5px;
}

/* ===================== SUBCAT ===================== */
.fur-sub {
	display: flex;
	align-items: center;
	gap: 10px;

	min-height: 42px;
	width: 100%;
	padding: 10px 14px;

	border: 1px solid transparent;
	border-radius: 11px;
	background: rgba(255, 255, 255, 0.03);
	color: var(--fur-ink);

	font: inherit;
	font-size: 14px;
	font-weight: 500;
	text-align: left;
	cursor: pointer;
	user-select: none;
	-webkit-user-select: none;

	touch-action: none;
	transition: background 130ms ease, color 130ms ease,
		border-color 130ms ease, transform 110ms ease;
}

/* Small left cue (parent category glyph). Dim cyan at rest, white when the
   thumb is on it. */
.fur-sub-icon {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 17px;
	height: 17px;
	flex: 0 0 auto;
}
.fur-sub-icon svg { width: 17px; height: 17px; display: block; color: var(--fur-cyan); opacity: 0.72; }
.fur-sub-label { flex: 1 1 auto; min-width: 0; }

.fur-sub:hover {
	background: rgba(121, 231, 255, 0.10);
	border-color: var(--fur-border-soft);
}

.fur-sub.is-active {
	background: linear-gradient(90deg, var(--fur-active-a), var(--fur-active-b));
	color: #fff;
	border-color: rgba(255, 255, 255, 0.28);
	transform: translateX(-2px);
}
.fur-sub.is-active .fur-sub-icon svg { color: #fff; opacity: 1; }
.flyui-rail-remote.is-left .fur-sub.is-active { transform: translateX(2px); }

.fur-sub:focus { outline: none; }
.fur-sub:focus-visible { outline: 2px solid var(--fur-cyan); outline-offset: 2px; }

/* ===================== MOBILE: THUMB-REACH PASS =====================
   This remote is a one-thumb flight control, not a full-height dock. On
   phones the rail drops to the bottom (above the app's bottom dock), sheds
   its icons, and shrinks so every category sits in thumb range; the subcat
   lane pins to the active row so a single glide-and-slide reaches any
   cat/sub. Desktop/tablet keep the tall iconned rail above. */
@media (max-width: 700px) {
	.flyui-rail-remote {
		/* narrower rail container so the offset math + reach are tight */
		--fur-rail-w: clamp(76px, 20vw, 88px);

		top: auto;
		bottom: calc(env(safe-area-inset-bottom, 0px) + 86px);
		right: max(8px, env(safe-area-inset-right, 0px));
		left: auto;

		/* root wraps controls + rail; the rail caps its own height below */
		height: auto;
		max-height: none;
		width: var(--fur-rail-w);
		justify-content: flex-end;
	}
	.flyui-rail-remote.is-left {
		right: auto;
		left: max(8px, env(safe-area-inset-left, 0px));
	}

	.fur-rail {
		max-height: min(64dvh, 520px);
		gap: 2px;
		padding: 5px 5px;
		border-radius: 18px;
	}

	/* labels only on mobile — icons are what made it too tall */
	.fur-cat-icon { display: none; }

	.fur-cat {
		flex-direction: row;
		/* Sized so all 15 rows fit inside the capped rail height (no internal
		   scroll) from SE-class up to the largest phones, while staying as tall
		   as the budget allows. Deliberately a touch shorter than 36px: at 36px
		   the 15-row stack overflows the 520px cap on tall phones and would
		   scroll, which breaks glide-to-any-category. */
		height: clamp(25px, 3.6dvh, 32px);
		min-height: 25px;
		width: 100%;
		padding: 0 8px;
		border-radius: 11px;
	}
	.fur-cat-label {
		font-size: 11px;
		line-height: 1;
		font-weight: 800;
		letter-spacing: 0.02em;
	}
	/* Visual rows are compact, but the gesture hit zone is extended a few px
	   above/below so the thumb still lands reliably and bridges the gaps. The
	   pseudo-element is part of the button for hit-testing. */
	.fur-cat::after {
		content: '';
		position: absolute;
		left: 0;
		right: 0;
		top: -3px;
		bottom: -3px;
	}

	/* Grid-owned sparse manifests do not need the compressed 15-row geometry.
	   Give each live lane a real thumb target and remove overlapping hit zones. */
	.flyui-rail-remote.fur-density--sparse {
		--fur-rail-w: clamp(96px, 25vw, 108px);
	}
	.flyui-rail-remote.fur-density--sparse .fur-rail {
		gap: 4px;
		padding: 7px 6px;
	}
	.flyui-rail-remote.fur-density--sparse .fur-cat {
		height: 48px;
		min-height: 48px;
		padding: 0 9px;
	}
	.flyui-rail-remote.fur-density--sparse .fur-cat::after {
		top: 0;
		bottom: 0;
	}
	.flyui-rail-remote.fur-density--sparse .fur-cat-label {
		font-size: 11.5px;
		line-height: 1.08;
		white-space: normal;
		overflow: visible;
		text-overflow: clip;
		text-align: center;
	}

	/* Subcat lane on mobile: positioning/offsets are inherited from the base
	   (now fixed + pinned to the active row everywhere). Here we only set the
	   mobile size and the no-scroll guarantee. */
	.fur-subrail {
		width: clamp(128px, 36vw, 160px);
		max-height: none;      /* never cap -> */
		overflow: visible;     /* never scroll on mobile (one-gesture doctrine) */
		padding: 8px;
	}
	.fur-subrail-list { overflow: visible; gap: 5px; }

	.fur-subrail-title { display: none; }

	.fur-sub {
		min-height: 28px;
		padding: 6px 9px;
		font-size: 11px;
		line-height: 1.05;
		gap: 8px;
	}
	.fur-sub-icon { width: 15px; height: 15px; }
	.fur-sub-icon svg { width: 15px; height: 15px; }

	/* controls stay plainly visible above the (bottom-anchored) rail */
	.fur-side-toggle,
	.fur-hide-toggle { width: 32px; height: 32px; }

	/* Peek button when hidden: bottom-safe, side-aware pill above the nav. */
	.flyui-rail-remote.is-hidden {
		top: auto;
		bottom: calc(env(safe-area-inset-bottom, 0px) + 76px);
		right: 10px;
		left: auto;
		width: auto;
		height: auto;
	}
	.flyui-rail-remote.is-hidden.is-left {
		left: 10px;
		right: auto;
	}
	.flyui-rail-remote.is-hidden .fur-peek-toggle {
		display: inline-flex;
		min-height: 36px;
		padding: 0 14px;
		border-radius: 999px;
		font-weight: 800;
	}
}

/* ===================== REDUCED MOTION ===================== */
@media (prefers-reduced-motion: reduce) {
	.flyui-rail-remote *,
	.flyui-rail-remote *::before,
	.flyui-rail-remote *::after {
		transition-duration: 0.001ms !important;
		animation-duration: 0.001ms !important;
	}
}


/* ============================================================
 * 0.2.0 COMMAND MODE — append-only section (Rev B: existing GDS custom
 * properties only, alpha variants via color-mix; no fresh palette literals;
 * explicit font properties). Every rule is scoped to markup that exists only
 * on Command-capable renders, so dormant pages are untouched by these bytes.
 * ============================================================ */

/* Hit testing (Dan Rev B re-attack): the Rail root and .fur-controls are
 * deliberate pass-through (pointer-events:none), and every REAL control in the
 * legacy Rail restores its own hit target explicitly. The Command controls
 * follow the same doctrine — auto on the actual buttons only, never on the
 * .fur-mode / .fur-commands containers, preserving pass-through everywhere a
 * thumb should fall through to the page. */
.fur-mode-toggle,
.fur-cmd {
	pointer-events: auto;
}

/* Mode toggle lives inside .fur-controls, so is-hidden already removes it. */
.fur-mode { display: inline-flex; }
.fur-mode-toggle {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 48px;
	min-height: 34px;
	padding: 4px 10px;
	border: 1px solid var(--fur-border);
	border-radius: 10px;
	background: var(--fur-glass);
	color: var(--fur-cyan);
	font-family: inherit;
	font-weight: 600;
	font-size: 12px;
	line-height: 1;
	letter-spacing: 0.04em;
	cursor: pointer;
}
.fur-mode-toggle[hidden] { display: none; }
.fur-mode-toggle:focus-visible { outline: 2px solid var(--fur-cyan); outline-offset: 2px; }
.fur-mode-toggle[aria-pressed="true"] {
	background: color-mix(in srgb, var(--fur-cyan) 18%, transparent);
	border-color: var(--fur-cyan);
	color: var(--fur-ink);
}

/* Command nav: same fixed lane as the Jump rail; exactly one nav is visible
   per mode. [hidden] wins until arming removes it. */
.fur-commands { display: none; }
.fur-commands[hidden] { display: none; }
.flyui-rail-remote[data-fur-mode="command"] .fur-commands:not([hidden]) {
	display: flex;
	flex-direction: column;
	gap: 6px;
}
.flyui-rail-remote[data-fur-mode="command"] .fur-rail,
.flyui-rail-remote[data-fur-mode="command"] .fur-subrail { display: none; }
.flyui-rail-remote.is-hidden .fur-commands { display: none; }

/* Thumb geometry (Dan build note): explicit >=48px targets on BOTH axes,
   independent of the Jump density row clamp. Label-only lanes in R2. */
.fur-cmd {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 8px;
	min-width: 48px;
	min-height: 48px;
	padding: 6px 12px;
	border: 1px solid var(--fur-border);
	border-radius: 12px;
	background: var(--fur-glass);
	color: var(--fur-ink);
	font-family: inherit;
	font-weight: 600;
	font-size: 13px;
	line-height: 1.2;
	text-align: left;
	cursor: pointer;
}
.fur-cmd:focus-visible { outline: 2px solid var(--fur-cyan); outline-offset: 2px; }
.fur-cmd[aria-pressed="true"] {
	background: color-mix(in srgb, var(--fur-cyan) 16%, transparent);
	border-color: var(--fur-cyan);
	color: var(--fur-ink);
}
.fur-cmd:disabled {
	opacity: 0.45;
	cursor: not-allowed;
}
.fur-cmd-count {
	min-width: 26px;
	padding: 2px 7px;
	border-radius: 999px;
	background: color-mix(in srgb, var(--fur-cyan) 14%, transparent);
	color: var(--fur-cyan);
	font-size: 11px;
	text-align: center;
}
.fur-cmd-count:empty { display: none; }

/* Persistent engagement truth (Discovery state, not Rail mode). */
.flyui-rail-remote.is-engaged .fur-mode-toggle {
	box-shadow: 0 0 0 1px color-mix(in srgb, var(--fur-gold) 55%, transparent),
		0 0 14px color-mix(in srgb, var(--fur-gold) 35%, transparent);
}
.flyui-rail-remote.is-engaged[data-fur-mode="command"] .fur-commands:not([hidden]) {
	box-shadow: 0 0 18px color-mix(in srgb, var(--fur-gold) 18%, transparent);
	border-radius: 14px;
}

/* ============================================================
 * SHORT-VIEWPORT COMMAND REACH (Rev E — Dan canary: landscape Map FAIL)
 * The command lane must never shrink its 48px targets to make seven rows
 * fit. Instead the lane itself becomes internally scrollable when the
 * viewport is too short — the same mitigation the predecessor already
 * applies to .fur-rail at (max-height: 700px), scoped here to .fur-commands
 * ONLY so the Jump rail acquires no new behavior.
 *
 * The available height is derived, not device-tuned: 100dvh minus the space
 * the Rail already reserves. Desktop/tablet: the controls row + breathing
 * room. Phones (<=700px wide): the predecessor bottom-anchors the root at
 * 86px + safe-area-inset-bottom, so the reserve grows to match. The vh line
 * is a fallback for engines without dvh; dvh wins where supported.
 * ============================================================ */
.flyui-rail-remote {
	--fur-cmd-reserve: calc(96px + env(safe-area-inset-top, 0px) + env(safe-area-inset-bottom, 0px));
}
@media (max-width: 700px) {
	.flyui-rail-remote {
		--fur-cmd-reserve: calc(140px + env(safe-area-inset-top, 0px) + env(safe-area-inset-bottom, 0px));
	}
}

.flyui-rail-remote[data-fur-mode="command"] .fur-commands:not([hidden]) {
	max-height: calc(100vh - var(--fur-cmd-reserve));
	max-height: calc(100dvh - var(--fur-cmd-reserve));
	min-height: 0;
	overflow-y: auto;
	-webkit-overflow-scrolling: touch;
	overscroll-behavior: contain;
	touch-action: pan-y;
	scrollbar-width: none;
}
.flyui-rail-remote[data-fur-mode="command"] .fur-commands::-webkit-scrollbar {
	width: 0;
	height: 0;
}

/* Targets are fixed-size cargo inside that scroller: never flex-shrunk, so
   the >=48px thumb geometry survives a height-constrained column. */
.fur-cmd {
	flex: 0 0 auto;
}
