/* Op Schedule (Grid): the week-by-week station grid rendered by
 * cCalendarGrid::renderHtml() (behavior in /js/slot_grid.js), loaded by the
 * two slot_grid twins ON TOP of their event stylesheet, whose ".ops" block
 * (header, clock panel, notes, legend, index chips) it reuses. One shared
 * file rather than a twin block in each stylesheet: the print rules below
 * (landscape, a page per week) must apply to these two pages only, and a
 * global @page in the event stylesheets would print every K3Y and CSKM page
 * landscape. Same system as the list: ink #1a2433 on paper #eef3fa,
 * hairlines #8fa9c9/#b7cdea, accent #3d6fb0, mono for callsigns and
 * numbers. Statuses are lightness and shape, never hue alone (hue is the
 * operator's state, below): a scheduled chip has a hairline, a logged one a
 * 3px ink footer (Bill's black close-out cell, reduced to an edge so the
 * state fill stays readable), a past chip with no log is dashed and faded
 * with a hollow glyph, the live block is the only tinted one and carries
 * the needle. Every selector is scoped to
 * .ops.grid, so the event stylesheet's global table rule (2px black borders,
 * 592px cells) is fully reset here and nothing else is touched. */
.ops.grid .opsmeta .stn {font-family:Consolas,Menlo,monospace; font-weight:bold;
	color:#1a2433;}
.ops.grid .opsbar .opslegend .lg {margin-right:14px;}
.ops.grid .opsbar .opslegend .lg.live {padding-left:20px; position:relative;}
.ops.grid .opsbar .opslegend .lg.live::before {content:""; position:absolute;
	left:0; top:3px; width:14px; height:9px; background-color:#dfe9f6;
	border-left:3px solid #1a2433;}
.ops.grid .opsbar .opslegend .lg.live::after {content:""; position:absolute;
	left:8px; top:1px; height:13px; border-left:2px solid #c00000;}

/* Station tabs: real links; the current station is the ink one. */
.gridtabs {margin:0 0 10px; border-bottom:2px solid #1a2433;
	line-height:1.2;}
.gridtabs a {display:inline-block; padding:4px 9px 3px; margin:0 3px 3px 0;
	font-family:Consolas,Menlo,monospace; font-size:small; font-weight:bold;
	color:#1a2433; border:1px solid #8fa9c9; background-color:#dfe9f6;}
.gridtabs a .qn {font-family:Arial,sans-serif; font-size:x-small;
	font-weight:normal; color:#3a4a60;}
.gridtabs a:hover {color:#c00000;}
.gridtabs a[aria-current="page"] {background-color:#1a2433; color:#eef3fa;
	border-color:#1a2433;}
.gridtabs a[aria-current="page"] .qn {color:#b7cdea;}
.gridtabs a[aria-current="page"]:hover {color:#eef3fa;}
.gridtabs a:focus-visible, .morebtn:focus-visible {outline:2px solid #3d6fb0;
	outline-offset:1px;}

/* One table per week. The wrapper scrolls sideways on a narrow screen so
 * the page body never does; the header row and the hour column stay put. */
.weekwrap {overflow-x:auto; margin:0 0 14px;}
.ops.grid table.week {border-collapse:separate; border-spacing:0;
	width:100%; min-width:590px; margin:0; border:1px solid #8fa9c9;
	background-color:#ffffff; padding:0; table-layout:fixed;}
.ops.grid table.week caption {caption-side:top; text-align:left;
	padding:5px 0 4px; font-family:Arial,sans-serif; font-size:small;
	color:#1a2433;}
.ops.grid table.week caption .wk {font-weight:bold; font-size:110%;}
.ops.grid table.week caption .wkcov {margin-left:10px; font-size:x-small;
	color:#3a4a60;}
.ops.grid table.week caption .wknote {margin-left:10px; font-size:x-small;
	color:#3a4a60;}
.ops.grid table.week th, .ops.grid table.week td {border:none;
	border-bottom:1px solid #dfe9f6; border-right:1px solid #dfe9f6;
	width:auto; height:auto; padding:1px 2px; font-family:Arial,sans-serif;
	font-size:x-small; background-color:transparent; text-align:left;
	vertical-align:top; line-height:1.25;}
.ops.grid table.week thead th {position:sticky; top:0; z-index:2;
	background-color:#1a2433; color:#eef3fa; text-align:center;
	letter-spacing:0.04em; text-transform:uppercase; border-color:#1a2433;
	padding:3px 2px;}
.ops.grid table.week th.h, .ops.grid table.week th.l,
.ops.grid table.week td.l {width:36px;
	vertical-align:top;
	font-family:Consolas,Menlo,monospace; font-variant-numeric:tabular-nums;
	white-space:nowrap; text-align:right; padding-right:4px;}
/* The Local column shows 12-hour "12:00a": one monospace character wider
 * than the 24-hour UTC column. table-layout is fixed, so the thead th.l
 * must carry the column width (a tbody td width is ignored there). */
.ops.grid table.week th.l, .ops.grid table.week td.l {width:43px;}
.ops.grid table.week tbody th.h {position:sticky; left:0; z-index:1;
	background-color:#eef3fa; color:#1a2433; font-weight:bold;
	border-right:1px solid #b7cdea;}
.ops.grid table.week td.l {color:#3a4a60; background-color:#f6f8fc;
	border-right:1px solid #b7cdea;}
.ops.grid table.week thead th.l {color:#b7cdea;}
.ops.grid table.week th.off, .ops.grid table.week td.off {
	background-color:#f0f3f8;}
.ops.grid table.week tr.allday th.h {font-weight:normal; font-size:x-small;
	color:#3a4a60;}
.ops.grid table.week tr.allday td.c {background-color:#f6f8fc;}
.ops.grid table.week tr.nowrow th.h {color:#c00000;}
.ops.grid table.week td.c {min-height:16px;}
.ops.grid table.week td.c.live {background-color:#dfe9f6; position:relative;
	border-left:3px solid #1a2433; padding-left:0;}
.ops.grid table.week td.c.live::after {content:""; position:absolute;
	left:0; right:0; top:0; height:2px; background-color:transparent;
	border-top:2px solid #c00000; width:var(--now, 0%);}

/* Chips: one per operator per block, stacked. */
/* A chip is two lines: the call, then state code, count, and marks
 * (Jordan W7VC, 2026-08-28: every hour row the same height, cells that
 * read as full). It wraps rather than truncates: an ellipsis would hide
 * the hollow "no log" glyph, the one fact a coordinator scans for. */
.ops.grid .chip {display:block; position:relative; margin:0 0 1px;
	padding:0 2px; border:1px solid #8fa9c9; background-color:#ffffff;
	font-family:Consolas,Menlo,monospace; font-size:10px; letter-spacing:0;
	line-height:12px; font-variant-numeric:tabular-nums; color:#1a2433;
	white-space:normal;}
.ops.grid td.c .chip {min-height:24px;}
.ops.grid .chip .call {display:block;}
/* Each suffix wraps as a unit (inline-block), so a count never breaks in
 * the middle of its digits. */
.ops.grid .chip .dx, .ops.grid .chip .q, .ops.grid .chip .x {
	display:inline-block; white-space:nowrap;}
/* An empty block is as tall as a one-chip block: 24px chip + 2px border +
 * 1px margin + 2px cell padding. The second line is sized so its worst
 * case ("WY 100 x2" plus the hollow glyph) fits the 66px column; a longer
 * one still wraps to a third line and grows its row, which is honest and
 * rare. */
.ops.grid table.week td.c, .ops.grid table.week th.h,
.ops.grid table.week td.l {height:29px;}
/* The part of the hour block a slot does not cover (a :30 start or end),
 * hatched in ink over the fill; the tooltip carries the exact times. */
.ops.grid .chip .cut {position:absolute; left:0; right:0; display:block;
	z-index:0; pointer-events:none;
	background-image:repeating-linear-gradient(135deg,
	rgba(26,36,51,0.35) 0 1px, transparent 1px 4px);
	border-bottom:1px solid rgba(26,36,51,0.5);}
/* The text and the hollow glyph sit above the hatch, so a late start does
 * not hatch over the callsign line nor an early end over the "no log"
 * mark. */
.ops.grid .chip .call, .ops.grid .chip .st, .ops.grid .chip .dx,
.ops.grid .chip .q, .ops.grid .chip .x, .ops.grid .chip::after {
	position:relative; z-index:1;}
.ops.grid .chip .cut[style^="top:0"] {border-bottom:1px solid rgba(26,36,51,0.5);
	border-top:none;}
.ops.grid .chip .cut:not([style^="top:0"]) {border-bottom:none;
	border-top:1px solid rgba(26,36,51,0.5);}
.ops.grid .chip .dx {margin-right:2px; font-family:Arial,sans-serif;
	font-size:80%; color:#3a4a60;}
.ops.grid .chip .q {margin-right:2px; color:#1a2433; font-weight:bold;}
.ops.grid .chip .x {margin-right:2px; padding:0 1px; font-size:9px;
	font-family:Arial,sans-serif; color:#c00000; background-color:#eef3fa;}
/* Log status is a shape-and-lightness channel of its own, independent of
 * the state fill (Codex, 2026-08-28, after the ink logged chip lost the
 * state on most of the grid): a logged chip keeps its fill and wears a 3px
 * ink footer (Bill's black close-out, reduced to an edge; it shows on every
 * block of a multi-hour slot, the count only on the first), a past chip
 * with no log fades and gets a dashed ink boundary plus the hollow glyph,
 * and every text on a fill is ink (blue on these fills is 2 to 4 to 1). */
.ops.grid .chip.logged {color:#1a2433; border-color:#1a2433;
	border-bottom-width:3px;}
.ops.grid .chip.past:not(.logged) {color:#1a2433; border-color:#1a2433;
	border-style:dashed;}
.ops.grid .chip.nolog::after {content:" \25CB"; color:#1a2433;}
.ops.grid .chip.live {font-weight:bold; border-color:#1a2433;}
.ops.grid .opslegend .chip {display:inline-block; margin:0 3px 0 0;
	vertical-align:-1px;}
/* State colors (US call areas only): Paul Tol's "light" qualitative
 * scheme, made for cell fills behind dark text and chosen for legibility
 * under deutan, protan, and tritan vision (not every pair survives a severe
 * simulation: st6/st7, st3/st5 under red-green, st0 against st4 and st5
 * under tritan), so the chip also shows the state code and color is never
 * the only cue. st0..st7 follow the area's states in alphabetical order
 * (cCalendarGrid::areaStates), stx is a state outside the area. A logged
 * chip keeps its fill and wears the ink footer. The status border rules
 * come AFTER this block on purpose: equal specificity, later wins, and a
 * live or logged chip must keep its ink outline over the fill's own. */
.ops.grid .chip .st {margin-right:2px; font-family:Arial,sans-serif;
	font-size:80%; color:#1a2433;}
.ops.grid .chip.st0 {background-color:#77aadd; border-color:#77aadd;}
.ops.grid .chip.st1 {background-color:#ee8866; border-color:#ee8866;}
.ops.grid .chip.st2 {background-color:#eedd88; border-color:#eedd88;}
.ops.grid .chip.st3 {background-color:#ffaabb; border-color:#ffaabb;}
.ops.grid .chip.st4 {background-color:#99ddff; border-color:#99ddff;}
.ops.grid .chip.st5 {background-color:#44bb99; border-color:#44bb99;}
.ops.grid .chip.st6 {background-color:#bbcc33; border-color:#bbcc33;}
.ops.grid .chip.st7 {background-color:#aaaa00; border-color:#aaaa00;}
.ops.grid .chip.stx {background-color:#dddddd; border-color:#dddddd;}
/* Status edges, after the fills: a filled chip keeps its fill in every
 * status and its status outline in ink; a past chip with no log fades the
 * fill (lightness, not hue; ink on the faded fills stays above 10 to 1). */
.ops.grid .chip.logged, .ops.grid .chip.live,
.ops.grid .chip.past:not(.logged) {border-color:#1a2433;}
.ops.grid .chip.past:not(.logged) {background-image:linear-gradient(
	rgba(255,255,255,0.55), rgba(255,255,255,0.55));}
.stlegend {margin:0 0 8px; font-family:Arial,sans-serif; font-size:x-small;
	color:#3a4a60;}
.stlegend .eyebrow {display:inline; margin:0 10px 0 0;}
.stlegend .lg {display:inline-block; margin:0 12px 3px 0; white-space:nowrap;}
.stlegend .sw {display:inline-block; width:12px; height:10px;
	vertical-align:-1px; margin:0 4px 0 0; border:1px solid #8fa9c9;
	background-color:#ffffff;}
.stlegend .sw.st0 {background-color:#77aadd; border-color:#77aadd;}
.stlegend .sw.st1 {background-color:#ee8866; border-color:#ee8866;}
.stlegend .sw.st2 {background-color:#eedd88; border-color:#eedd88;}
.stlegend .sw.st3 {background-color:#ffaabb; border-color:#ffaabb;}
.stlegend .sw.st4 {background-color:#99ddff; border-color:#99ddff;}
.stlegend .sw.st5 {background-color:#44bb99; border-color:#44bb99;}
.stlegend .sw.st6 {background-color:#bbcc33; border-color:#bbcc33;}
.stlegend .sw.st7 {background-color:#aaaa00; border-color:#aaaa00;}
.stlegend .sw.stx {background-color:#dddddd; border-color:#dddddd;}
.stlegend .qn {color:#3a4a60;}
/* Folding: only when the script runs (it adds .js); print shows everything. */
.ops.grid.js td.c:not(.open) .chip.more {display:none;}
.ops.grid .morebtn {display:block; margin:0; padding:0 3px;
	font-family:Arial,sans-serif; font-size:x-small; font-weight:bold;
	color:#1a2433; background-color:#dfe9f6; border:1px solid #8fa9c9;
	cursor:pointer; line-height:1.25;}
.ops.grid .morebtn:hover {color:#c00000;}
.ops.grid td.c.open .morebtn {background-color:#1a2433; color:#eef3fa;}

@media print {
	@page {size:landscape; margin:10mm;}
	#banner, #stripe, #index, .opsclock, .gridtabs, .opsbar, .opsauto,
	noscript, #footer {display:none !important;}
	#page, #container {width:auto !important; float:none !important;
		margin:0 !important; padding:0 !important; background:#ffffff !important;
		border:none !important; display:block !important;}
	.ops.grid {font-size:9pt;}
	.weekwrap {overflow:visible; break-after:page; page-break-after:always;}
	.weekwrap:last-of-type {break-after:auto; page-break-after:auto;}
	.ops.grid table.week {min-width:0; break-inside:auto;}
	.ops.grid table.week thead th {position:static; color:#000000;
		background-color:#ffffff; border-bottom:2px solid #000000;}
	.ops.grid table.week tbody th.h {position:static;}
	.ops.grid table.week th, .ops.grid table.week td {border-color:#999999;}
	.ops.grid td.c .chip.more {display:block !important;}
	.ops.grid .morebtn {display:none !important;}
	.ops.grid .chip, .stlegend .sw {-webkit-print-color-adjust:exact;
		print-color-adjust:exact;}
	.ops.grid .opsindex {break-before:page; page-break-before:always;}
}
