/* Only the CD names remain (grids.postcss:25-54); the portal aliases grid--2/3/4
   were removed after migration completed (Design Review C17). */
.grid--responsive-cols-2, .grid--responsive-cols-3, .grid--responsive-cols-4 { grid-template-columns:minmax(0,1fr); }
/* min(260px,100%) instead of 260px: nested in a narrow column (or below a 320px
   viewport), a fixed minimum would make the track wider than its container.
   This is the same safeguard used by the home-page tile grid. */
/* (Dead rules removed in the 2026-08 code review, F-S30 — no emitter in any template.) */
.grid--items-4 { grid-template-columns:minmax(0,1fr); }
@media (min-width:768px) {
  .grid--responsive-cols-2, .grid--responsive-cols-3, .grid--responsive-cols-4 { grid-template-columns:repeat(2,minmax(0,1fr)); }
  /* CD curated four-card layout: the primary destination spans the first row,
     followed by three equal siblings (grids.postcss:248-258). */
  .grid--items-4 { grid-template-columns:repeat(3,minmax(0,1fr)); }
  .grid--items-4 > :first-child { grid-column:1 / -1; }
}
@media (min-width:1024px){
  .grid--responsive-cols-3 { grid-template-columns:repeat(3,minmax(0,1fr)); }
  .grid--responsive-cols-4 { grid-template-columns:repeat(4,minmax(0,1fr)); }
}
/* Other .grid--items-N variants remain deferred until they gain a consumer. */

/* .ratio--* (ratio.postcss:5-33) was excised: zero consumers (Design Review C10). */

/* ---- Icons (monochrome SVGs via CSS mask -> currentColor) ---- */
/* CD keeps width:auto because SvgIcon renders an intrinsic SVG. Mask spans have
   no intrinsic box, so the portal deliberately uses a square box. The eighth-em
   baseline correction optically centres the default 16px icon in body text;
   flex/grid contexts ignore vertical-align and retain their own alignment. */
.icon { display:inline-block; width:var(--sp-4); height:var(--sp-4); vertical-align:-.125em;
  background-color:currentColor; -webkit-mask-repeat:no-repeat; mask-repeat:no-repeat;
  -webkit-mask-position:center; mask-position:center; -webkit-mask-size:contain; mask-size:contain; flex:none; }
.icon--sm   { width:var(--sp-3);  height:var(--sp-3); }
.icon--base { width:var(--sp-4);    height:var(--sp-4); }
.icon--md   { width:var(--sp-5); height:var(--sp-5); }
.icon--lg   { width:var(--sp-6);  height:var(--sp-6); }
.icon--xl   { width:var(--sp-7); height:var(--sp-7); }
.icon--2xl  { width:var(--sp-9); height:var(--sp-9); }
@media (min-width:768px){
  .icon--md { width:var(--sp-6); height:var(--sp-6); } .icon--lg { width:var(--sp-7); height:var(--sp-7); }
  .icon--xl { width:var(--sp-8); height:var(--sp-8); }     .icon--2xl{ width:var(--sp-10); height:var(--sp-10); }
}
@media (min-width:1024px){
  .icon--xl { width:var(--sp-9); height:var(--sp-9); } .icon--2xl{ width:var(--sp-12); height:var(--sp-12); }
}
/* icon--full/3xl/4xl/5xl (CD icons.postcss:15-53) will arrive with the first
   consumer above 3rem; until then they would be dead rules. */
/* C.loading() renders Spinner.svg with icon--spin; the reduced-motion escape
   is in the shared block below. */
@keyframes spin { to { transform:rotate(360deg); } }
.icon--spin { animation:spin var(--duration-spin) linear infinite; }

/* Masked icons are dropped by forced-colors; repaint them with a system colour */
@media (forced-colors: active) {
  /* currentColor follows the context's FORCED color (ButtonText/LinkText/
     CanvasText), like CD's fill-current (icons.postcss:5-13). A static
     LinkText painted button icons differently from their labels. */
  .icon { forced-color-adjust:none; background-color:currentColor; }
  /* Checkboxes are NOT handled here, but directly after their base rule (see
     "Checkboxes in high contrast" below): both rules have equal specificity;
     here the correction would occur 1,000 lines too early and lose. */
  /* A pressed view switch needs a shape, not only a filled surface.
     `--active` = the marker on link toggles (news page), same treatment. */
  .view-switch__btn[aria-pressed="true"],
  .view-switch__btn--active { outline:var(--stroke-2) solid CanvasText; outline-offset:calc(-1 * var(--stroke-2)); }
}

