<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://wiki.shroudforge.net/index.php?action=history&amp;feed=atom&amp;title=Module%3ACountdown%2Fstyles.css</id>
	<title>Module:Countdown/styles.css - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.shroudforge.net/index.php?action=history&amp;feed=atom&amp;title=Module%3ACountdown%2Fstyles.css"/>
	<link rel="alternate" type="text/html" href="https://wiki.shroudforge.net/index.php?title=Module:Countdown/styles.css&amp;action=history"/>
	<updated>2026-11-05T06:50:16Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://wiki.shroudforge.net/index.php?title=Module:Countdown/styles.css&amp;diff=60&amp;oldid=prev</id>
		<title>Bonsaibauer: 1 revision imported: Import Star Citizen Modules</title>
		<link rel="alternate" type="text/html" href="https://wiki.shroudforge.net/index.php?title=Module:Countdown/styles.css&amp;diff=60&amp;oldid=prev"/>
		<updated>2026-11-04T22:22:05Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported: Import Star Citizen Modules&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:22, 4 November 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;en-GB&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key mediawiki-mediawiki:diff:1.41:old-59:rev-60 --&gt;
&lt;/table&gt;</summary>
		<author><name>Bonsaibauer</name></author>
	</entry>
	<entry>
		<id>https://wiki.shroudforge.net/index.php?title=Module:Countdown/styles.css&amp;diff=59&amp;oldid=prev</id>
		<title>starcitizen&gt;Alistar Bot: Name the flat reservation and count the hairline it lies under, so the last pixel of shift goes too (via update-page on MediaWiki MCP Server)</title>
		<link rel="alternate" type="text/html" href="https://wiki.shroudforge.net/index.php?title=Module:Countdown/styles.css&amp;diff=59&amp;oldid=prev"/>
		<updated>2026-08-27T21:58:12Z</updated>

		<summary type="html">&lt;p&gt;Name the flat reservation and count the hairline it lies under, so the last pixel of shift goes too (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* Module:Countdown&lt;br /&gt;
 *&lt;br /&gt;
 * Two states. Before the gadget runs — and forever, without JavaScript — the&lt;br /&gt;
 * element holds a date range and is styled as a plain readout. Once the gadget&lt;br /&gt;
 * has built the digit stack it replaces that range with a label and three units&lt;br /&gt;
 * and adds `t-countdown--live`, and the rules below take over. The range is&lt;br /&gt;
 * dropped rather than hidden: the stack says everything it said and more, so&lt;br /&gt;
 * keeping it would only have assistive tech read the same span of time twice.&lt;br /&gt;
 *&lt;br /&gt;
 * The gadget also adds one of three tense classes — `--upcoming`, `--running`,&lt;br /&gt;
 * `--ended` — which is what the colour keys off. Nothing here reaches outside&lt;br /&gt;
 * the countdown element, which is the point: the card hosting it never has to&lt;br /&gt;
 * learn what a clock is.&lt;br /&gt;
 *&lt;br /&gt;
 * ARRANGEMENT. The clock stands its units in a column by default, for a card&lt;br /&gt;
 * that gives it a slot down one side, and lies them down into a strip when&lt;br /&gt;
 * there is no such slot. Two things ask for the strip, and they are different&lt;br /&gt;
 * questions: below 639px the media query does, because every card is stacked&lt;br /&gt;
 * there; and at any width `--flat` does, for a card that is stacked throughout&lt;br /&gt;
 * and therefore has no viewport question to ask. A card must never restyle the&lt;br /&gt;
 * clock itself — the arrangement is the clock&amp;#039;s, the slot is the card&amp;#039;s.&lt;br /&gt;
 */&lt;br /&gt;
.t-countdown {&lt;br /&gt;
	/* The caption&amp;#039;s size, named because three rules need it: the caption draws&lt;br /&gt;
	 * itself with it, and the reservation below is measured in it. */&lt;br /&gt;
	--countdown-caption: 0.62rem;&lt;br /&gt;
	/* One unit, as tall as the gadget will build it. The digits carry&lt;br /&gt;
	 * line-height 1, so they are exactly their own size; the caption adds its&lt;br /&gt;
	 * own height plus the 0.25em that separates them, hence the 1.25. */&lt;br /&gt;
	--countdown-unit: calc(var(--countdown-size, 3rem) + var(--countdown-caption) * 1.25);&lt;br /&gt;
	/* The reservation for a clock lying down: one unit row, not four. Named&lt;br /&gt;
	 * rather than repeated because all three arrangements that lie the clock&lt;br /&gt;
	 * down need it, and they already have enough to keep in step.&lt;br /&gt;
	 *&lt;br /&gt;
	 * The trailing 1px is the hairline. Lying down it runs across the BLOCK&lt;br /&gt;
	 * axis, and box-sizing is border-box, so it counts against the height —&lt;br /&gt;
	 * standing up the same hairline is on the inline edge and costs nothing,&lt;br /&gt;
	 * which is why the reservation below has no such term. */&lt;br /&gt;
	--countdown-reserve-flat: calc(var(--countdown-unit) + var(--space-md) * 2 + 1px);&lt;br /&gt;
	flex: none;&lt;br /&gt;
	display: flex;&lt;br /&gt;
	flex-direction: column;&lt;br /&gt;
	justify-content: center;&lt;br /&gt;
	/* THE COLUMN THE CLOCK STANDS IN, pinned rather than left to its content,&lt;br /&gt;
	 * and the shift is only the first of two reasons.&lt;br /&gt;
	 *&lt;br /&gt;
	 * The range and the units are different widths — 268px against 87 — so&lt;br /&gt;
	 * going live shrank the clock by 181 and rewrapped the card&amp;#039;s prose beside&lt;br /&gt;
	 * it. And left to itself the column&amp;#039;s width depends on how long the DATE in&lt;br /&gt;
	 * the settings happens to be, so an event running into September gave the&lt;br /&gt;
	 * body less room to set than one running into May. Neither is something the&lt;br /&gt;
	 * card next to it should be able to feel.&lt;br /&gt;
	 *&lt;br /&gt;
	 * 7rem leaves 80px of content box once the padding is out, which clears&lt;br /&gt;
	 * both sides: the units need 54px, and the range&amp;#039;s longest unbreakable word&lt;br /&gt;
	 * is &amp;quot;September&amp;quot; at 76. All three arrangements that lie the clock down&lt;br /&gt;
	 * already set `inline-size: 100%`, so this needs no reset of its own. */&lt;br /&gt;
	inline-size: 7rem;&lt;br /&gt;
	padding: var(--space-md);&lt;br /&gt;
	/* THE ROOM THE CLOCK WILL NEED, reserved before it needs it: a label row and&lt;br /&gt;
	 * three unit rows. The two states hold different things — a date range now,&lt;br /&gt;
	 * a label and three counters once the gadget runs — and left to themselves&lt;br /&gt;
	 * they are different heights, so going live grew the card under the reader&lt;br /&gt;
	 * and pushed every band below it down the page (11px standing up, 30px&lt;br /&gt;
	 * lying down, measured). Reserving the taller of the two in BOTH means the&lt;br /&gt;
	 * swap changes what the clock says and never how much room it takes.&lt;br /&gt;
	 *&lt;br /&gt;
	 * Derived from the same tokens that draw a unit rather than measured off a&lt;br /&gt;
	 * screenshot, so it cannot drift from what it is reserving for. */&lt;br /&gt;
	min-block-size: calc(var(--line-height-x-small) + var(--countdown-unit) * 3 + var(--space-md) * 2);&lt;br /&gt;
	font-family: var(--font-family-monospace);&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	/* THE TENSE COLOUR, set once here and inherited. The label and the digits&lt;br /&gt;
	 * are halves of one statement — what this is, and how long — so they take&lt;br /&gt;
	 * one colour between them, and each tense below has a single declaration to&lt;br /&gt;
	 * change rather than one per part. Only the unit captions opt back out. */&lt;br /&gt;
	color: var(--color-subtle);&lt;br /&gt;
	/* The hairline is the clock&amp;#039;s own edge, not the card&amp;#039;s: the card takes a&lt;br /&gt;
	 * content slot and has no business deciding that whatever lands in it gets a&lt;br /&gt;
	 * rule. Logical so it follows the flex row&amp;#039;s direction rather than assuming&lt;br /&gt;
	 * the clock is always on the right. It runs the full height of the card,&lt;br /&gt;
	 * meeting the border top and bottom. */&lt;br /&gt;
	border-inline-start: var(--border-subtle);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.t-countdown__fallback {&lt;br /&gt;
	font-size: var(--font-size-small);&lt;br /&gt;
	line-height: var(--line-height-small);&lt;br /&gt;
	/* Standing up the range wraps down a narrow column, so a date whose longest&lt;br /&gt;
	 * word outgrows it breaks rather than hangs out of the card. Insurance:&lt;br /&gt;
	 * &amp;quot;September&amp;quot; is the longest word any English date produces and it fits. */&lt;br /&gt;
	overflow-wrap: break-word;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Deliberately the same size and tracking as Module:CardLua&amp;#039;s kicker: the two&lt;br /&gt;
 * sit at opposite ends of the card&amp;#039;s head and share a top and bottom edge, so&lt;br /&gt;
 * anything smaller here breaks that line. */&lt;br /&gt;
.t-countdown__label {&lt;br /&gt;
	font-size: var(--font-size-x-small);&lt;br /&gt;
	line-height: var(--line-height-x-small);&lt;br /&gt;
	letter-spacing: 0.12em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Live: the unit rows share whatever height the card has, so the clock fills&lt;br /&gt;
 * its column instead of clustering. Sizing the digits BY the height would want&lt;br /&gt;
 * `cqh`, which needs `container-type` — rejected by the TemplateStyles&lt;br /&gt;
 * sanitizer — so the digits stay on a scale and the rows do the adapting. */&lt;br /&gt;
.t-countdown--live {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-rows: auto;&lt;br /&gt;
	grid-auto-rows: 1fr;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	justify-items: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.t-countdown__unit {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	flex-direction: column;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	justify-content: center;&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.t-countdown__value {&lt;br /&gt;
	/* 3rem is the ceiling before the clock, rather than the card&amp;#039;s content,&lt;br /&gt;
	 * starts deciding how tall the row is. */&lt;br /&gt;
	font-size: var(--countdown-size, 3rem);&lt;br /&gt;
	font-weight: var(--font-weight-medium);&lt;br /&gt;
	letter-spacing: -0.04em;&lt;br /&gt;
	/* Tabular figures so the stacked numbers line up: without it a 1 is&lt;br /&gt;
	 * narrower than a 0 and the column reads ragged. */&lt;br /&gt;
	font-variant-numeric: tabular-nums;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* The plain number behind each reel — what assistive tech reads instead of a&lt;br /&gt;
   column of digits. The class is the gadget&amp;#039;s to apply but this stylesheet&amp;#039;s to&lt;br /&gt;
   define: the odometer markup is shared with the hero, and only the component it&lt;br /&gt;
   was built inside knows which stylesheet is guaranteed to be on the page. */&lt;br /&gt;
.t-countdown__sr {&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	width: 1px;&lt;br /&gt;
	height: 1px;&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	clip-path: inset( 50% );&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.t-countdown__unit-label {&lt;br /&gt;
	font-size: var(--countdown-caption);&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
	letter-spacing: 0.14em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	/* The one part that opts out: the captions name the units and are not part&lt;br /&gt;
	 * of the statement the tense is colouring. */&lt;br /&gt;
	color: var(--color-subtle);&lt;br /&gt;
	margin-top: 0.25em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- Tense --------------------------------------------------------------&lt;br /&gt;
 * Colour is reinforcement here, never the only carrier: the label already says&lt;br /&gt;
 * &amp;quot;Coming&amp;quot;, &amp;quot;Ends&amp;quot; or &amp;quot;Ended&amp;quot; in words, so nothing is lost on a monochrome&lt;br /&gt;
 * display or to a screen reader, and no visually-hidden partner is owed.&lt;br /&gt;
 *&lt;br /&gt;
 * The stripe is Module:Entity/Ports&amp;#039; overlay retuned for the area. Ports draws&lt;br /&gt;
 * 2px lines on a 6px period at alpha 0.10 over a 32px pill; the same rule here&lt;br /&gt;
 * covers roughly twenty times that, and its average lift — duty cycle times&lt;br /&gt;
 * alpha, 0.033 — visibly washes the colour underneath toward grey. The line&lt;br /&gt;
 * weight stays at 2px because that is the house signature; the spacing and the&lt;br /&gt;
 * alpha come down, landing at a lift of 0.012, about a third of Ports.&lt;br /&gt;
 */&lt;br /&gt;
.t-countdown--running,&lt;br /&gt;
.t-countdown--upcoming {&lt;br /&gt;
	background-image: repeating-linear-gradient(&lt;br /&gt;
		-45deg,&lt;br /&gt;
		light-dark(rgba(0, 0, 0, 0.03), rgba(255, 255, 255, 0.06)),&lt;br /&gt;
		light-dark(rgba(0, 0, 0, 0.03), rgba(255, 255, 255, 0.06)) 2px,&lt;br /&gt;
		transparent 2px,&lt;br /&gt;
		transparent 10px&lt;br /&gt;
	);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.t-countdown--running {&lt;br /&gt;
	color: var(--color-success);&lt;br /&gt;
	background-color: var(--background-color-success-subtle);&lt;br /&gt;
	border-inline-start-color: var(--border-color-success);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.t-countdown--upcoming {&lt;br /&gt;
	color: var(--color-warning);&lt;br /&gt;
	background-color: var(--background-color-warning-subtle);&lt;br /&gt;
	border-inline-start-color: var(--border-color-warning);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Ended has no rule, and needs none: claiming no tense means taking no tense&lt;br /&gt;
 * colour, so it falls back to the subtle the root already sets. That is&lt;br /&gt;
 * `--color-subtle` rather than `--color-disabled` on purpose — the number still&lt;br /&gt;
 * carries a fact worth reading, how long ago and so how stale the card is. It&lt;br /&gt;
 * is past, not inert. */&lt;br /&gt;
&lt;br /&gt;
/* ---- Lying down ----------------------------------------------------------&lt;br /&gt;
 * The strip. `display` has to be reset explicitly: the live state is a grid,&lt;br /&gt;
 * and flex-direction is inert on a grid, so flipping the direction alone would&lt;br /&gt;
 * silently leave the units stacked.&lt;br /&gt;
 *&lt;br /&gt;
 * These rules must stay BELOW the tense block. They are single-class like it,&lt;br /&gt;
 * so which wins is decided on source order, and the strip has to be able to&lt;br /&gt;
 * move the tense colour from the inline edge to the block edge.&lt;br /&gt;
 *&lt;br /&gt;
 * The declarations appear twice, here and in the media query at the foot,&lt;br /&gt;
 * because one is asked for by a class and the other by a viewport and CSS&lt;br /&gt;
 * cannot share a block across a media query. Keep them identical.&lt;br /&gt;
 */&lt;br /&gt;
.t-countdown--flat,&lt;br /&gt;
.t-countdown--flat.t-countdown--live {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	flex-direction: row;&lt;br /&gt;
	/* The units end-align as a group; the auto margin below holds the label at&lt;br /&gt;
	 * the start. Both together, so the strip reads left to right as what this&lt;br /&gt;
	 * is and then how long, with the empty space between the two rather than&lt;br /&gt;
	 * spread through them the way space-between would. */&lt;br /&gt;
	justify-content: flex-end;&lt;br /&gt;
	align-items: flex-end;&lt;br /&gt;
	gap: var(--space-md);&lt;br /&gt;
	inline-size: 100%;&lt;br /&gt;
	/* Lying down, the rule that divided two columns becomes the one that&lt;br /&gt;
	 * divides two rows. */&lt;br /&gt;
	border-inline-start: 0;&lt;br /&gt;
	border-block-start: var(--border-subtle);&lt;br /&gt;
	/* Three units abreast rather than stacked down a column: at 3rem the strip&lt;br /&gt;
	 * dominates the card it is attached to. */&lt;br /&gt;
	--countdown-size: 2.5rem;&lt;br /&gt;
	/* One row now, not four, and the label is shorter than a unit. */&lt;br /&gt;
	min-block-size: var(--countdown-reserve-flat);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.t-countdown--flat .t-countdown__label,&lt;br /&gt;
.t-countdown--flat .t-countdown__fallback {&lt;br /&gt;
	margin-inline-end: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.t-countdown--flat.t-countdown--running {&lt;br /&gt;
	border-block-start-color: var(--border-color-success);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.t-countdown--flat.t-countdown--upcoming {&lt;br /&gt;
	border-block-start-color: var(--border-color-warning);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.t-countdown--flat.t-countdown--live .t-countdown__label {&lt;br /&gt;
	align-self: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Narrow lies every clock down, whether its card asked or not. */&lt;br /&gt;
@media (max-width: 639px) {&lt;br /&gt;
	.t-countdown,&lt;br /&gt;
	.t-countdown--live {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-direction: row;&lt;br /&gt;
		justify-content: flex-end;&lt;br /&gt;
		align-items: flex-end;&lt;br /&gt;
		gap: var(--space-md);&lt;br /&gt;
		inline-size: 100%;&lt;br /&gt;
		border-inline-start: 0;&lt;br /&gt;
		border-block-start: var(--border-subtle);&lt;br /&gt;
		--countdown-size: 2.5rem;&lt;br /&gt;
		min-block-size: var(--countdown-reserve-flat);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.t-countdown__label,&lt;br /&gt;
	.t-countdown__fallback {&lt;br /&gt;
		margin-inline-end: auto;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.t-countdown--running {&lt;br /&gt;
		border-block-start-color: var(--border-color-success);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.t-countdown--upcoming {&lt;br /&gt;
		border-block-start-color: var(--border-color-warning);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.t-countdown--live .t-countdown__label {&lt;br /&gt;
		align-self: center;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Note what lying down does NOT change: alignment inside a unit. Each unit&lt;br /&gt;
 * centres its digits over its own caption either way, so the clock reads the&lt;br /&gt;
 * same on its side as it does standing up. Only the axis changes. */&lt;/div&gt;</summary>
		<author><name>starcitizen&gt;Alistar Bot</name></author>
	</entry>
</feed>