pack3d / stage.css
amilworks's picture
Publish the PACK3D repacking demo
3cc67c8 verified
Raw History Blame Contribute Delete
11.9 kB
/* Generated from website/index.html by tools/build_hf_space.py. */
:root {
/* color */
--bg: #F4F4F4;
--surface: #FFFFFF;
--surface-2: #F9F9F9;
--ink: #111111;
--ink-2: #464646;
--ink-3: #666666;
--rule: #D9D9D9;
--grid: #E6E6E6;
--select: #D6D6D6;
--teal: #00B796;
--coral: #FF7276;
--coral-ink: #B5363F;
--lav: #997ADB;
--warm: #9E978E;
--orange: #FFAA4D;
--green: #8FE07A;
--green-ink: #2C8F1F;
--tint-teal: #8EDDCB;
--tint-coral: #FFB4B6;
--track: #EDEDED;
/* value marks: 3:1 or more against the sheet */
--teal-mark: #00957A;
--coral-mark: #E04F55;
--warm-mark: #857E75;
--orange-mark: #B35F00;
/* type */
--font-display: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
--font-body: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
--font-mono: "DM Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;
--fs-control: 0.9rem;
--fs-control-sm: 0.84rem;
--fs-meta: 0.8rem;
--fs-label: 0.75rem;
--fs-code: 0.82rem;
--fs-caption: 0.84rem;
--fs-small: 0.9rem;
--fs-title: 1.02rem;
--fs-body: 1.05rem;
--ls-control: -0.006em;
/* layout */
--col: 42rem;
--wide: 76rem;
--bar-h: 52px; /* without the hairline; 44px sideways (below) */
--s-1: 6px; /* spacing: the gaps between parts */
--s-2: 10px;
--s-3: 14px;
--s-4: 22px;
--s-5: 28px;
--s-6: 46px;
--s-7: 64px;
--gutter: clamp(16px, 3.2vw - 8px, 32px);
/* radius: corners nest (inner = outer less the padding) */
--r-xs: 6px;
--r-sm: 10px;
--r-md: 13px;
--r-lg: 16px;
--r-xl: 20px;
--sheet-r: clamp(22px, 3.4vw, 48px);
/* fills: ink at low strength, for any surface and theme */
--wash-1: color-mix(in oklab, var(--ink) 4.5%, transparent);
--wash-2: color-mix(in oklab, var(--ink) 7%, transparent);
--wash-3: color-mix(in oklab, var(--ink) 10%, transparent);
--wash-4: color-mix(in oklab, var(--ink) 14%, transparent);
/* elevation */
--sheet-shadow: 0 1px 2px rgba(0, 0, 0, 0.04), 0 12px 32px -20px rgba(0, 0, 0, 0.2);
--lift: #FFFFFF;
--lift-shadow: 0 1px 2px rgba(0, 0, 0, 0.09), 0 0 0 0.5px rgba(0, 0, 0, 0.1);
--pop: #FFFFFF;
--pop-rule: rgba(0, 0, 0, 0.09);
--pop-shadow: 0 22px 48px -18px rgba(0, 0, 0, 0.26), 0 4px 14px -6px rgba(0, 0, 0, 0.11);
/* motion */
--ease: cubic-bezier(0.2, 0.8, 0.2, 1);
--t-1: 0.15s;
--t-2: 0.25s;
--t-3: 0.4s;
/* figures: ink on the light page, light on the dark one */
--halo: rgba(244, 244, 244, 0.92); /* behind words that lie over a figure */
--ink-dark: #111111; /* words on a light mark, in either theme */
--spark-a: #00957A; /* the predictions a repack changes: PACK3D's */
--spark-b: #E04F55; /* and packed RoPE's */
/* memory order: the opening, the repack window's strips, the end. Pale to deep on the light page */
--mem-0: #C9BAF3;
--mem-1: #9C84E6;
--mem-2: #7356D6;
--mem-3: #4B3AB0;
--mem-4: #271D69;
--tip-shadow: 0 8px 20px -10px rgba(0, 0, 0, 0.45);
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme="light"]) {
--bg: #0E0E0E;
--surface: #171717;
--surface-2: #1B1B1B;
--ink: #EDEDED;
--ink-2: #BDBDBD;
--ink-3: #9A9A9A;
--rule: #2E2E2E;
--grid: #242424;
--select: #3B3B3B;
--teal: #19AC8B;
--coral: #C9474F;
--coral-ink: #FF8F94;
--lav: #9479D8;
--warm: #A39C93;
--orange: #FFB15E;
--green: #7BD866;
--green-ink: #8FE07A;
--tint-teal: #1F5F51;
--tint-coral: #6B2F33;
--track: #202020;
--teal-mark: #19AC8B;
--coral-mark: #C9474F;
--warm-mark: #A39C93;
--orange-mark: #FFB15E;
--sheet-shadow: 0 0 0 1px rgba(255, 255, 255, 0.06), 0 18px 40px -24px rgba(0, 0, 0, 0.8);
--lift: rgba(255, 255, 255, 0.13);
--lift-shadow: none;
--pop: #1B1B1B;
--pop-rule: rgba(255, 255, 255, 0.09);
--pop-shadow: 0 24px 52px -16px rgba(0, 0, 0, 0.75), 0 4px 14px -6px rgba(0, 0, 0, 0.5);
--halo: rgba(14, 14, 14, 0.9);
--spark-a: #5FE0C3;
--spark-b: #FF7276;
--mem-0: #4B3AB0;
--mem-1: #7356D6;
--mem-2: #9A7DE6;
--mem-3: #C9B6F4;
--mem-4: #F7F3FE;
color-scheme: dark;
}
}
:root[data-theme="dark"] {
--bg: #0E0E0E;
--surface: #171717;
--surface-2: #1B1B1B;
--ink: #EDEDED;
--ink-2: #BDBDBD;
--ink-3: #9A9A9A;
--rule: #2E2E2E;
--grid: #242424;
--select: #3B3B3B;
--teal: #19AC8B;
--coral: #C9474F;
--coral-ink: #FF8F94;
--lav: #9479D8;
--warm: #A39C93;
--orange: #FFB15E;
--green: #7BD866;
--green-ink: #8FE07A;
--tint-teal: #1F5F51;
--tint-coral: #6B2F33;
--track: #202020;
--teal-mark: #19AC8B;
--coral-mark: #C9474F;
--warm-mark: #A39C93;
--orange-mark: #FFB15E;
--sheet-shadow: 0 0 0 1px rgba(255, 255, 255, 0.06), 0 18px 40px -24px rgba(0, 0, 0, 0.8);
--lift: rgba(255, 255, 255, 0.13);
--lift-shadow: none;
--pop: #1B1B1B;
--pop-rule: rgba(255, 255, 255, 0.09);
--pop-shadow: 0 24px 52px -16px rgba(0, 0, 0, 0.75), 0 4px 14px -6px rgba(0, 0, 0, 0.5);
--halo: rgba(14, 14, 14, 0.9);
--spark-a: #5FE0C3;
--spark-b: #FF7276;
--mem-0: #4B3AB0;
--mem-1: #7356D6;
--mem-2: #9A7DE6;
--mem-3: #C9B6F4;
--mem-4: #F7F3FE;
color-scheme: dark;
}
.stage-window {
position: relative; display: flex; overflow: hidden; color: var(--ink);
margin: 36px calc(-1 * max(var(--gutter), env(safe-area-inset-right, 0px))) 0 calc(-1 * max(var(--gutter), env(safe-area-inset-left, 0px)));
border-radius: var(--sheet-r);
min-height: min(calc(100svh - var(--bar-h) - 1px - env(safe-area-inset-top, 0px)), 1040px);
background: var(--surface); box-shadow: var(--sheet-shadow);
}
.sw-canvas { position: absolute; inset: 0; width: 100%; height: 100%; display: block; touch-action: pan-y pinch-zoom; cursor: grab; pointer-events: auto; }
.sw-canvas.grabbing { cursor: grabbing; }
.sw-canvas:focus-visible { border-radius: var(--r-sm); }
.sw-in {
position: relative; z-index: 1; flex: 1; display: grid; grid-template-columns: minmax(0, 1fr); grid-template-rows: auto minmax(0, 1fr) auto auto; gap: clamp(14px, 2.4vh, 26px);
width: 100%; min-width: 0; max-width: calc(var(--wide) + max(var(--gutter), env(safe-area-inset-left, 0px)) + max(var(--gutter), env(safe-area-inset-right, 0px)));
margin-inline: auto; pointer-events: none;
padding: clamp(28px, 5vh, 64px) max(var(--gutter), env(safe-area-inset-right, 0px)) clamp(28px, 5vh, 64px) max(var(--gutter), env(safe-area-inset-left, 0px));
}
.sw-in .sw-head > *, .sw-in .sw-under > *, .sw-in .sw-foot > * { pointer-events: auto; }
.sw-head { display: grid; gap: var(--s-3); }
.sw-title { font-family: var(--font-display); font-weight: 340; font-size: clamp(1.6rem, 3.2vw, 2.8rem); line-height: 1.08; letter-spacing: -0.028em; text-wrap: balance; }
.sw-cells { position: relative; display: grid; grid-template-columns: 1fr 1fr; gap: clamp(8px, 3vw, 40px); min-height: min(40svh, 560px); }
/* shared rows, so strips and counts line up */
.sw-under { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 0 clamp(12px, 3vw, 40px); }
.sw-col { min-width: 0; display: grid; grid-row: span 3; grid-template-rows: subgrid; align-content: start; }
.sw-who { display: flex; flex-wrap: wrap; align-items: center; align-content: flex-start; gap: 4px 9px; font-weight: 600; font-size: var(--fs-title); }
.sw-who small { font-weight: 500; font-size: var(--fs-meta); color: var(--ink-3); }
.sw-strip { position: relative; height: 10px; margin-top: var(--s-2); border-radius: var(--r-xs); overflow: hidden; background: var(--wash-1); }
.sw-strip canvas { position: absolute; inset: 0; width: 100%; height: 100%; }
.sw-n { margin-top: var(--s-2); display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; }
.sw-big { font-family: var(--font-display); font-weight: 360; font-size: clamp(1.7rem, 3.4vw, 2.6rem); letter-spacing: -0.03em; line-height: 1; font-variant-numeric: tabular-nums; }
/* as wide as its final value (app.js sets data-max) */
.sw-big::after { content: attr(data-max); display: block; height: 0; overflow: hidden; visibility: hidden; }
.sw-teal { color: var(--teal-mark); }
.sw-coral { color: var(--coral-ink); }
.sw-lab { font-family: var(--font-mono); font-size: var(--fs-label); color: var(--ink-3); overflow-wrap: anywhere; }
.sw-foot { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-2) var(--s-3); container-type: inline-size; }
.sw-act { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-2); }
@media (any-pointer: coarse) { .sw-act { row-gap: 12px; } }
/* the longer label's width, within the foot */
#swGo { min-width: min(14.6em, 100cqw); }
.sw-state { display: flex; align-items: flex-start; gap: 10px; font-size: var(--fs-small); color: var(--ink-2); }
/* half the line height, less half the dot */
.sw-state i { flex: none; width: 8px; height: 8px; margin-top: calc(0.81em - 4px); border-radius: 50%; background: var(--ink-3); transition: background-color var(--t-2) var(--ease), box-shadow var(--t-2) var(--ease); }
.sw-state.hot i { background: var(--ink); }
/* the two longest states, unseen: one height through the repack */
.sw-state-t { display: grid; }
.sw-state-t > * { grid-area: 1 / 1; }
.sw-hold { visibility: hidden; }
.sw-fallback { display: none; grid-column: 1 / -1; align-self: center; margin: 0 auto; max-width: 40ch; padding: 24px; color: var(--ink-2); text-align: center; }
.stage-window.no-canvas .sw-canvas, .stage-window.no-canvas #swA, .stage-window.no-canvas #swB { display: none; }
.stage-window.no-canvas .sw-fallback { display: block; }
.stage-window.no-canvas + .sw-foot-note :is(.sw-cell-note, .hint) { display: none; } /* no cell to describe or turn */
.prose:has(+ .stage-window.no-canvas) .sw-cell-note { display: none; }
.sw-foot-note { max-width: min(var(--col), 66ch); margin-left: max(0px, (100% - var(--col)) / 2); margin-right: auto; }
@media (min-width: 641px) and (max-aspect-ratio: 1/1) {
.stage-window { min-height: 0; }
.sw-cells { min-height: 0; aspect-ratio: 2 / 1.15; }
}
@media (max-width: 640px) {
.stage-window { min-height: 0; }
.sw-in { padding-block: 20px; gap: var(--s-2); }
.sw-cells { min-height: 0; aspect-ratio: 2 / 1; gap: var(--s-1); }
.sw-who { font-size: var(--fs-small); }
.sw-who small { flex-basis: 100%; }
}
/* a short phone (an iPhone SE, Safari's bars): the button reaches the screen */
@media (orientation: portrait) and (max-width: 640px) and (max-height: 640px) {
.sw-in { padding-block: var(--s-3); gap: var(--s-2); }
.sw-head { gap: var(--s-1); }
.sw-title { font-size: 1.35rem; }
.sw-cells { aspect-ratio: 2 / 0.7; }
.sw-strip, .sw-n { margin-top: var(--s-1); }
}
@media (orientation: portrait) and (max-width: 360px) and (max-height: 600px) {
.sw-in { padding-block: var(--s-2); gap: var(--s-1); }
.sw-cells { aspect-ratio: 2 / 0.6; }
}
@media (orientation: landscape) and (max-height: 500px) {
.stage-window { min-height: calc(100svh - var(--bar-h) - 1px); }
.sw-in { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); grid-template-rows: auto minmax(0, 1fr) auto; gap: var(--s-2) clamp(16px, 3vw, 32px); padding-block: 16px; }
.sw-head { grid-column: 1; grid-row: 1; gap: var(--s-1); }
.sw-title { font-size: clamp(1.25rem, 2.6vw, 1.6rem); }
.sw-under { grid-column: 1; grid-row: 2 / -1; align-self: start; }
.sw-who small { flex-basis: 100%; }
.sw-big { font-size: 1.6rem; }
.sw-cells { grid-column: 2; grid-row: 1 / 3; min-height: 0; aspect-ratio: auto; gap: var(--s-1); }
.sw-foot { grid-column: 2; grid-row: 3; }
}
/* Safari's bars showing (874 x 292) */
@media (orientation: landscape) and (max-height: 340px) {
.sw-in { padding-block: var(--s-2); row-gap: var(--s-1); }
.sw-title { font-size: var(--fs-body); } /* one line inside Safari's 62px insets */
.sw-strip, .sw-n { margin-top: var(--s-1); }
}