/* The analysis page type.
   Inherits the theme's tokens; every value here falls back so the stylesheet
   is still legible if it is ever loaded on its own. Long-form reading is the
   whole job, so the measure is narrow and the tables are the only thing
   allowed to break out of it. */

/* Width.
   WordPress wraps post content in .entry-content and caps it at theme.json's
   global contentSize (41rem). That cap sat between the page container and the
   article, so the article — and every table and chart inside it — was 656px
   wide at every viewport from 768px up, however much screen there was. The
   six-column financial tables wrapped because of it. Released here for the
   page types that manage their own measure; pages that rely on the global cap
   for their reading width are untouched.

   The article is then a reading grid: prose sits in a centred column narrow
   enough to read, and tables, charts, figure groups and the reader split break
   out to the full container, because a table squeezed to prose width is a
   table nobody checks. */
.blueprysm-page.page-analysis{--maxw:78rem}
.page-analysis .entry-content,
.page-analysis .wp-block-post-content{max-width:none}

/* One column.
   Every element in the article — prose, headings, tables, charts, figure
   groups, the series rail, the method section — is the same width and shares
   both margins. Nothing is inset, nothing breaks out.

   That is a deliberate trade. A single column this wide runs longer lines
   than the 65-75 characters typography texts recommend, so the type carries
   it: set larger, with more leading than body text normally gets. A uniform
   measure is what makes the page read as one document. */
.blueprysm-page .analysis{
	display:grid;
	grid-template-columns:[col-start] min(var(--col,48rem),100%) [col-end];
	justify-content:center;
	row-gap:0}
.blueprysm-page .analysis>*,
.blueprysm-page .analysis .abody>*{grid-column:col;max-width:none}
.blueprysm-page .analysis .abody{display:contents}

/* style.css caps .entry-content p at 38rem, which is (0,2,1) and beats a
   selector ending in *, so the elements have to be named to release it. */
.blueprysm-page .analysis>p,
.blueprysm-page .analysis>h1,
.blueprysm-page .analysis .abody>p,
.blueprysm-page .analysis .abody>h2,
.blueprysm-page .analysis .abody>h3,
.blueprysm-page .analysis .abody>ul,
.blueprysm-page .analysis .abody>ol,
.blueprysm-page .analysis .lede,
.blueprysm-page .analysis .srcline{max-width:none}

.blueprysm-page .analysis h1{max-width:none;text-wrap:balance}

.blueprysm-page .analysis{font-size:var(--fs-base)}
.blueprysm-page .analysis .abody p{margin:0 0 1.15em;line-height:var(--lh-body)}
.blueprysm-page .analysis .lede{font-size:var(--fs-lg);line-height:var(--lh-tight)}
.blueprysm-page .analysis .abody h2{margin:2.4em 0 .6em}
.blueprysm-page .analysis .abody h3{margin:1.8em 0 .4em;font-size:var(--fs-md)}

/* The source line sits directly under the lede: what this is built on, before
   anything is claimed. */
.blueprysm-page .analysis .srcline{
	font-size:var(--fs-xs);line-height:var(--lh-body);
	color:var(--ink-3,#5F6472);border-left:2px solid var(--rule,#DCDAD3);
	padding:.15rem 0 .15rem .9rem;margin:0 0 2rem}
.blueprysm-page .analysis .srcline b{color:var(--ink-2,#565B66);font-weight:600}

/* Series rail. Each piece stands alone, so each piece says where it sits. */
.blueprysm-page .serieso{
	display:flex;flex-wrap:wrap;gap:.35rem;margin:0 0 2.6rem;
	padding:0 0 1.4rem;border-bottom:1px solid var(--rule,#DCDAD3)}
.blueprysm-page .serieso a{
	display:inline-flex;align-items:baseline;gap:.42rem;
	font-size:var(--fs-xs);letter-spacing:.01em;text-decoration:none;
	color:var(--ink-3,#5F6472);border:1px solid var(--rule,#DCDAD3);
	border-radius:2px;padding:.3rem .55rem;transition:border-color .12s,color .12s}
.blueprysm-page .serieso a .n{
	font-family:var(--mono,monospace);font-size:var(--fs-2xs);color:var(--ink-3,#5F6472)}
.blueprysm-page .serieso a:hover{color:var(--ink,#12141A);border-color:var(--ink-3,#5F6472)}
.blueprysm-page .serieso a[aria-current="page"]{
	background:var(--ink,#12141A);border-color:var(--ink,#12141A);color:#fff}
.blueprysm-page .serieso a[aria-current="page"] .n{color:var(--sky,#58D1FC)}

.blueprysm-page .analysis .abody>.figs{
	display:grid;grid-template-columns:repeat(auto-fit,minmax(11rem,1fr));
	gap:0;margin:2rem 0;border-block:1px solid var(--rule,#DCDAD3)}
.blueprysm-page .analysis .abody>.figs .fig{padding:1.1rem 1.2rem 1.2rem}
.blueprysm-page .analysis .abody>.figs .fig+.fig{border-left:1px solid var(--rule,#DCDAD3)}

/* Data tables. A figure the reader cannot scan is a figure they will not
   check, so the numbers are tabular and the row heads stay put. */
.dtable-wrap{overflow-x:auto;margin:1.6rem 0;-webkit-overflow-scrolling:touch}
.dtable{border-collapse:collapse;width:100%;font-size:var(--fs-sm);line-height:var(--lh-label)}
.dtable caption{
	text-align:left;font-family:var(--mono,monospace);font-size:var(--fs-xs);
	letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3,#5F6472);
	padding:0 0 .6rem;max-width:70ch;line-height:var(--lh-label)}
.dtable th,.dtable td{
	padding:.7rem 1rem;text-align:right;
	border-bottom:1px solid var(--rule,#DCDAD3);
	font-variant-numeric:tabular-nums}
.dtable thead th{
	font-size:var(--fs-2xs);font-family:var(--mono,monospace);letter-spacing:.1em;
	text-transform:uppercase;color:var(--ink-3,#5F6472);font-weight:400;
	border-bottom:1px solid var(--ink-3,#5F6472);vertical-align:bottom}
.dtable th.rowhead,.dtable tbody th{text-align:left;font-weight:500;color:var(--ink,#12141A)}
.dtable tbody tr:last-child th,.dtable tbody tr:last-child td{border-bottom:0}
.dtable b{font-weight:600;color:var(--ink,#12141A)}
.dtable a{color:var(--accent,#005DD6)}
.tnote{font-size:var(--fs-xs);color:var(--ink-3,#5F6472);margin:-.9rem 0 1.6rem;line-height:var(--lh-body)}

/* Charts. Text wears text tokens; the mark beside it carries the identity. */
.chart{margin:2rem 0 2.2rem;padding:0}
.chart figcaption{
	font-size:var(--fs-sm);font-weight:600;color:var(--ink,#12141A);
	margin:0 0 .5rem;max-width:44ch}
.chart .cv{display:block;width:100%;height:auto;margin:.4rem 0 .2rem;overflow:visible}
.chart figcaption{max-width:52ch}
.chart .ct{font-family:var(--sans,system-ui);font-size:var(--fs-2xs);fill:var(--ink-2,#565B66)}
.chart .ctax{font-size:var(--fs-3xs);fill:var(--ink-3,#5F6472)}
.chart .ctv{font-variant-numeric:tabular-nums;fill:var(--ink-2,#565B66)}
.chart .cte{fill:var(--ink,#12141A);font-weight:600}
.chart .ctin{fill:#fff;font-variant-numeric:tabular-nums;font-size:var(--fs-3xs)}
.chart .csrc{font-size:var(--fs-xs);line-height:var(--lh-body);color:var(--ink-3,#5F6472);margin:.6rem 0 0;max-width:68ch;
	font-family:var(--sans,system-ui);letter-spacing:0;text-transform:none}
.clegend{display:flex;flex-wrap:wrap;gap:.2rem 1.1rem;margin:0 0 .3rem;font-size:var(--fs-xs);color:var(--ink-2,#565B66)}
.clegend .li{display:inline-flex;align-items:center;gap:.4rem}
.clegend .sw{width:11px;height:11px;border-radius:2px;display:inline-block;flex:none}

/* "What this tells you" — the part a reader actually acts on. */
.blueprysm-page .readers{
	margin:3rem 0 0;padding:1.6rem 0 0;border-top:1px solid var(--rule,#DCDAD3)}
.blueprysm-page .readers h2{margin:0 0 1.2rem!important}
.blueprysm-page .reader{
	display:grid;grid-template-columns:11rem 1fr;gap:1.4rem;
	padding:.9rem 0;border-bottom:1px solid var(--rule,#DCDAD3)}
.blueprysm-page .reader:last-child{border-bottom:0}
.blueprysm-page .reader .who{
	font-family:var(--mono,monospace);font-size:var(--fs-2xs);letter-spacing:.12em;
	text-transform:uppercase;color:var(--ink-3,#5F6472);margin:.2rem 0 0}
.blueprysm-page .reader .what{margin:0;line-height:var(--lh-body)}

/* Method and limits. Not small print — it is the reason to believe the rest. */
.blueprysm-page .limits{
	margin:3rem 0 0;padding:1.7rem 1.6rem;background:var(--surface-2,#EFEDE8);
	border:1px solid var(--rule,#DCDAD3)}
.blueprysm-page .limits h2{margin:0 0 1.1rem!important;font-size:var(--fs-md)}
.blueprysm-page .lim-grid{display:grid;grid-template-columns:1fr 1fr;gap:1.6rem}
.blueprysm-page .lim-grid p{font-size:var(--fs-sm);line-height:var(--lh-body);margin:0 0 .7rem}
.blueprysm-page .lim-grid .who{
	font-family:var(--mono,monospace);font-size:var(--fs-2xs);letter-spacing:.12em;
	text-transform:uppercase;color:var(--ink-3,#5F6472);margin:0 0 .5rem}
.blueprysm-page .limits .asof{
	font-size:var(--fs-xs);color:var(--ink-2,#565B66);margin:1.3rem 0 0;
	padding-top:1rem;border-top:1px solid var(--rule,#DCDAD3)}
.blueprysm-page .limits .corr{font-size:var(--fs-xs);margin:.5rem 0 0;color:var(--ink-2,#565B66)}

/* Next in the series. */
.blueprysm-page .nextup{
	display:block;margin:2.4rem 0 0;padding:1.3rem 1.5rem;text-decoration:none;
	background:var(--ink,#12141A);color:#fff;transition:background .14s}
.blueprysm-page .nextup:hover{background:#1B1E26}
.blueprysm-page .nextup .mono{
	display:block;font-family:var(--mono,monospace);font-size:var(--fs-2xs);
	letter-spacing:.14em;text-transform:uppercase;color:var(--sky,#58D1FC);margin:0 0 .4rem}
.blueprysm-page .nextup .t{display:block;font-weight:600;font-size:var(--fs-md);line-height:1.3}
.blueprysm-page .nextup .q{display:block;font-size:var(--fs-sm);color:#C3C7D0;margin:.25rem 0 0}

/* The series index. Every row names a finding, not a category. */
.aindex{margin:1.6rem 0 0;border-top:1px solid var(--rule,#DCDAD3)}
.aindex .aitem{
	display:grid;grid-template-columns:3.2rem minmax(0,34rem) 1fr;gap:1.6rem;
	padding:1.25rem .4rem;text-decoration:none;color:inherit;
	border-bottom:1px solid var(--rule,#DCDAD3);transition:background .12s}
.aindex .aitem:hover{background:var(--surface-2,#EFEDE8)}
.aindex .aitem .n{
	font-size:var(--fs-2xs);letter-spacing:.1em;color:var(--ink-3,#5F6472);padding-top:.25rem}
.aindex .aitem .t{display:block;font-weight:600;font-size:var(--fs-md);line-height:1.32;color:var(--ink,#12141A)}
.aindex .aitem .q{display:block;font-size:var(--fs-sm);color:var(--ink-3,#5F6472);margin:.15rem 0 .5rem}
.aindex .aitem .f{display:block;font-size:var(--fs-sm);line-height:var(--lh-body);color:var(--ink-2,#565B66)}
.aindex .aitem .f b{color:var(--ink,#12141A);font-weight:600}
.aindex .aitem .src{
	font-size:var(--fs-xs);letter-spacing:0;text-transform:none;color:var(--ink-3,#5F6472);
	font-family:var(--sans,system-ui);line-height:var(--lh-label);padding-top:.35rem}

@media (max-width:860px){
	.blueprysm-page .lim-grid{grid-template-columns:1fr;gap:1.1rem}
	.blueprysm-page .reader{grid-template-columns:1fr;gap:.3rem}
	.aindex .aitem{grid-template-columns:2.4rem 1fr;gap:.9rem}
	.aindex .aitem .src{grid-column:2;padding-top:.5rem}
	.chart .cv{min-width:0}
	.dtable{font-size:var(--fs-xs)}
	.dtable th,.dtable td{padding:.55rem .6rem}
	.blueprysm-page .serieso a{font-size:var(--fs-2xs);padding:.26rem .45rem}
}

/* Handheld. A wide data table cannot be made narrow without lying about it,
   so it keeps its shape and scrolls sideways inside its own box — and says so,
   because an off-screen column nobody knows about is the same as a missing
   one. */
@media (max-width:640px){
	.dtable-wrap{overscroll-behavior-x:contain}
	.dtable-wrap[data-scrolls="1"]::after{
		content:"Scroll sideways for the rest of this table";
		/* Sticky, because the hint lives inside the box that scrolls — without
		   this it slides off with the table it is describing. */
		display:block;position:sticky;left:0;width:max-content;padding:.5rem 0 0;
		font-family:var(--mono,monospace);font-size:var(--fs-2xs);letter-spacing:.1em;
		text-transform:uppercase;color:var(--ink-3,#5F6472)}
	.dtable{font-size:var(--fs-xs)}
	.dtable th,.dtable td{padding:.5rem .55rem;white-space:nowrap}
	.dtable th.rowhead,.dtable tbody th{white-space:normal;min-width:8.5rem}
	.blueprysm-page .analysis .abody>.figs{
		grid-template-columns:1fr 1fr}
	.blueprysm-page .analysis .abody>.figs .fig:nth-child(odd){border-left:0}
	.chart figcaption{font-size:var(--fs-sm)}
}

/* Two inherited caps fight the reading grid and have to be released inside the
   article, where the grid column is already doing that job:
   style.css caps every .entry-content paragraph at 38rem, and .section-lead
   carries its own smaller size and 44rem cap from the page-type sheet. Left in
   place they produced a text column narrower than its own container, which is
   what made the prose and the tables look like two different pages. */

.blueprysm-page .analysis .section-lead{
	font-size:var(--fs-md);max-width:none;color:var(--ink-2,#565B66)}
.blueprysm-page .analysis .abody>.finding{font-size:var(--fs-md);line-height:var(--lh-body)}

/* The banner.
   Every piece opens on a drawing made from its own figures — the orbital
   bands in part 1 are the measured altitudes, the bars in part 4 the real
   prices per MHz-POP. A stock photograph of a satellite would say nothing
   and could not be checked; this is the analysis at a glance.

   The ink field, the hairline grid that echoes the licence-file tables, and
   the wash of brand blue are painted here rather than drawn into the SVG.
   That buys two things: the drawing can letterbox inside the frame on a
   narrow screen with no visible seam, because the frame is painted behind it
   either way; and the label and the headline figure stay real HTML at a real
   size instead of shrinking with the artwork the way SVG text would. The
   banner sits in the article's single column like everything else. */
.blueprysm-page .analysis>.abanner{
	position:relative;
	margin:0 0 1.9rem;
	border-radius:10px;
	overflow:hidden;
	background-color:var(--ink,#12141A);
	background-image:
		linear-gradient(135deg,rgba(0,93,214,.42) 0%,rgba(0,93,214,.08) 55%,rgba(0,93,214,0) 100%),
		repeating-linear-gradient(to right,rgba(255,255,255,.05) 0 1px,transparent 1px 60px),
		repeating-linear-gradient(to bottom,rgba(255,255,255,.05) 0 1px,transparent 1px 40px);
	box-shadow:inset 0 0 0 1px rgba(255,255,255,.10)}
.blueprysm-page .analysis .abanner-svg{
	display:block;width:100%;
	height:clamp(150px,20vw,286px)}
.blueprysm-page .analysis .abanner-cap{
	position:absolute;inset:0;
	display:flex;flex-direction:column;justify-content:space-between;
	padding:1rem 1.15rem;
	margin:0;
	pointer-events:none;
	/* The drawing runs edge to edge and cannot be asked to leave a corner
	   clear, so the two bands the type sits in are darkened instead. Without
	   this the figure collides with whatever the motif happens to draw at the
	   bottom right — in part 1, the lowest orbital band. */
	background:linear-gradient(to bottom,
		rgba(18,20,26,.55) 0,
		rgba(18,20,26,0) 26%,
		rgba(18,20,26,0) 58%,
		rgba(18,20,26,.68) 100%)}
.blueprysm-page .analysis .abanner-cap .ablab{
	align-self:flex-start;
	font-family:var(--mono,monospace);font-size:var(--fs-2xs);letter-spacing:.14em;
	text-transform:uppercase;color:rgba(255,255,255,.7);
	text-shadow:0 1px 5px rgba(18,20,26,.7)}
.blueprysm-page .analysis .abanner-cap .abstat{
	align-self:flex-end;text-align:right;
	font-family:var(--mono,monospace);font-size:var(--fs-sm);letter-spacing:.01em;
	font-variant-numeric:tabular-nums;color:rgba(255,255,255,.95);
	text-shadow:0 1px 5px rgba(18,20,26,.8)}

@media (max-width:640px){
	.blueprysm-page .analysis>.abanner{margin-bottom:1.4rem;border-radius:8px}
	.blueprysm-page .analysis .abanner-cap{padding:.7rem .8rem}
	.blueprysm-page .analysis .abanner-cap .ablab{font-size:var(--fs-3xs);letter-spacing:.12em}
	.blueprysm-page .analysis .abanner-cap .abstat{font-size:var(--fs-xs)}
}

/* The series index. It had no heading at all until a pre-launch read caught it. */
.blueprysm-page .aindex{margin-top:2.4rem}
.page-analysis .kick{font-family:var(--mono,monospace);font-size:var(--fs-2xs);
	letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3,#5F6472);margin:0 0 1rem}
