Template:Category/Workshop itinerary/styles.css

From Miniscope
Jump to: navigation, search
/* TemplateStyles for [[Template:Category/Workshop itinerary]].
 *
 * Screen-first: titles and session names render as normal wiki links
 * (accent color + underline-on-hover) so participants can navigate from
 * the itinerary to any session page. The @media print block strips
 * link chrome (color: inherit; text-decoration: none) blanket-style
 * for paper handouts where URLs aren't actionable, plus adds
 * page-break-before on each day so a single sheet never spans two days.
 *
 * Theme colors via `var(--labki-*, literal)`; see {{UI/card}}/styles.css
 * for the rationale. CATEGORY colors (.is-content, .is-practical,
 * .is-meal, .is-social, .is-break) deliberately stay literal — they're
 * discrete category signals, not theme tokens, and need to read the
 * same regardless of light/dark mode.
 */

.wiki-itinerary-nav {
	margin-bottom: 18px;
}

.wiki-itinerary {
	max-width: 760px;
	margin: 0 auto;
	font-family: Georgia, "Times New Roman", serif;
	color: var(--labki-text, #1c1c1c);
	line-height: 1.45;
}

.wiki-itinerary-header {
	text-align: center;
	padding: 24px 0 18px;
	border-bottom: 2px solid var(--labki-text, #1c1c1c);
	margin-bottom: 28px;
}

.wiki-itinerary-title {
	font-size: 1.9em;
	font-weight: bold;
	letter-spacing: 0.02em;
	margin-bottom: 6px;
}

.wiki-itinerary-dates {
	font-size: 1.1em;
	font-style: italic;
	margin-bottom: 4px;
}

.wiki-itinerary-venue {
	font-size: 0.95em;
	color: var(--labki-text-muted, #444);
	margin-bottom: 4px;
}

.wiki-itinerary-day {
	margin-bottom: 36px;
}

.wiki-itinerary-day-header {
	display: flex;
	align-items: baseline;
	gap: 14px;
	padding-bottom: 6px;
	border-bottom: 1px solid var(--labki-border, #d8dde3);
	margin-bottom: 12px;
}

.wiki-itinerary-day-number {
	font-size: 1.3em;
	font-weight: bold;
	letter-spacing: 0.03em;
}

.wiki-itinerary-day-date {
	font-size: 1.05em;
	color: var(--labki-text-muted, #444);
	font-style: italic;
}

/* Day-level UTC offset label, rendered as "UTC(+2)" / "UTC(-7)" /
 * "UTC" from the workshop's Has timezone offset. margin-left:auto
 * pushes it to the right edge of the flex day-header. */
.wiki-itinerary-day-tz {
	margin-left: auto;
	font-size: 0.8em;
	color: #777;
	letter-spacing: 0.04em;
	font-family: "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", monospace;
}

.wiki-itinerary-day-sessions {
	display: flex;
	flex-direction: column;
	gap: 10px;
}

.wiki-itinerary-session {
	display: grid;
	grid-template-columns: 110px 1fr;
	gap: 16px;
	padding: 8px 0 8px 12px;
	border-bottom: 1px solid #eef0f3;
	border-left: 3px solid var(--labki-border, #d8dde3);
}

.wiki-itinerary-session:last-child {
	border-bottom: none;
}

/* Category color coding. The left-border stripe carries the primary
 * signal (visible in print, even B&W if rendered as a thicker rule);
 * the type chip's background tint is the secondary cue. Defaults
 * (.is-other) inherit the neutral border token set above.
 *
 * These colors stay literal: they're discrete per-category signals,
 * not theme tokens. `border-left-color` is also one of the properties
 * MW's css-sanitizer rejects var() in, which would force literals
 * here regardless. */

.wiki-itinerary-session.is-content {
	border-left-color: #2774AE;
}
.wiki-itinerary-session.is-content .wiki-itinerary-type {
	background: #e8f0f7;
	color: #1c4e7a;
	border-color: #b8d2e6;
}

.wiki-itinerary-session.is-practical {
	border-left-color: #9B59B6;
}
.wiki-itinerary-session.is-practical .wiki-itinerary-type {
	background: #f3eaf7;
	color: #6c3483;
	border-color: #d7b8e3;
}

.wiki-itinerary-session.is-meal {
	border-left-color: #E67E22;
}
.wiki-itinerary-session.is-meal .wiki-itinerary-type {
	background: #fbeee0;
	color: #a04a0d;
	border-color: #e8c79a;
}

.wiki-itinerary-session.is-social {
	border-left-color: #27AE60;
}
.wiki-itinerary-session.is-social .wiki-itinerary-type {
	background: #e6f5eb;
	color: #196f3d;
	border-color: #b5dec5;
}

.wiki-itinerary-session.is-break {
	border-left-color: #95A5A6;
}
.wiki-itinerary-session.is-break .wiki-itinerary-type {
	background: #eef0f1;
	color: #5d6d6e;
	border-color: #c8cdce;
}

.wiki-itinerary-time {
	font-family: "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", monospace;
	font-size: 0.95em;
	color: var(--labki-text, #333);
	white-space: nowrap;
	padding-top: 2px;
}

.wiki-itinerary-time-sep {
	margin: 0 2px;
	color: #999;
}

.wiki-itinerary-content {
	min-width: 0;
}

/* Title row: title on the left, type chip pinned to the right via
 * flex space-between. Without this, the chip sits inline after the
 * title and drifts horizontally based on title length — unreadable
 * across a column of varying titles. */
.wiki-itinerary-session-title {
	display: flex;
	justify-content: space-between;
	align-items: baseline;
	gap: 12px;
	font-weight: bold;
	font-size: 1.02em;
	margin-bottom: 3px;
}

.wiki-itinerary-session-name {
	min-width: 0;
}

/* Optional suffix after the parent session title — "(Part 1)" /
 * "(Morning)" / "Setup" etc. Kept in muted color and normal weight so
 * the parent title remains the dominant signal. */
.wiki-itinerary-session-label {
	color: var(--labki-text-muted, #5a6a7a);
	font-weight: normal;
}

/* Chips wrapper holds the optional group chip and the type chip on
 * the right side of the title row. flex-shrink: 0 keeps the wrapper
 * from stealing space from the title; the inner gap separates the
 * two chips when both are present. */
.wiki-itinerary-chips {
	flex-shrink: 0;
	display: flex;
	gap: 6px;
	align-items: baseline;
}

.wiki-itinerary-type {
	padding: 1px 7px;
	font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
	font-size: 0.72em;
	font-weight: normal;
	letter-spacing: 0.04em;
	text-transform: uppercase;
	color: var(--labki-text-muted, #555);
	background: var(--labki-bg-subtle, #f4f6f8);
	border: 1px solid var(--labki-border, #d8dde3);
	border-radius: 3px;
}

/* Group chip — signals which participant group(s) a delivery is for
 * when multiple sessions share a start time. Accent-colored outline
 * (vs. type chip's muted fill) reads as a "different axis of meaning"
 * — type is "what kind", group is "who". */
.wiki-itinerary-group {
	padding: 1px 7px;
	font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
	font-size: 0.72em;
	font-weight: 600;
	letter-spacing: 0.04em;
	text-transform: uppercase;
	color: var(--labki-accent, #2774AE);
	background: transparent;
	border: 1px solid var(--labki-accent, #2774AE);
	border-radius: 3px;
}

/* Topic — short scannable gist of the session, sits between the
 * title row and the presenter/location meta lines. Distinct from
 * Has description (which is the long-form prose on the session's
 * own page). Plain (not italic — italic is reserved for presenter). */
.wiki-itinerary-topic {
	font-size: 0.95em;
	color: var(--labki-text, #1c1c1c);
	line-height: 1.35;
	margin-bottom: 2px;
}

/* Presenter and location each on their own line. Multi-value Has
 * presenter (co-led sessions) reads better stacked than crowded into
 * a single meta line next to a location. SMW comma-joins the
 * wikilinks for us when the outer #ask is run without link=none. */

.wiki-itinerary-presenter {
	font-size: 0.92em;
	color: var(--labki-text-muted, #444);
	font-style: italic;
}

.wiki-itinerary-where {
	font-size: 0.88em;
	color: var(--labki-text-muted, #555);
}

.wiki-itinerary-where::before {
	content: "@ ";
	color: #aaa;
}

/* TA meta line — same weight as Where; prefixed by "TAs:" inline in
 * the row template (no ::before pseudo-element here because the prefix
 * is part of the rendered content, not decorative). */
.wiki-itinerary-tas {
	font-size: 0.88em;
	color: var(--labki-text-muted, #555);
}

@media print {
	.wiki-itinerary-nav {
		display: none;
	}

	.wiki-itinerary {
		max-width: 100%;
		font-size: 11pt;
	}

	.wiki-itinerary-day {
		page-break-before: always;
		break-before: page;
	}

	.wiki-itinerary-day:first-of-type {
		page-break-before: auto;
		break-before: auto;
	}

	.wiki-itinerary-session {
		page-break-inside: avoid;
		break-inside: avoid;
	}

	.wiki-itinerary a,
	.wiki-itinerary a:visited {
		color: inherit;
		text-decoration: none;
	}
}