:root {
	/* Dark theme (default) — warm palette from doc/red mockup. */
	--bg-primary:        #15120F;
	--bg-secondary:      #1E1A16;
	--bg-tertiary:       #241F1A;
	--bg-hover:          #2B251E;
	--border:            #332C25;
	--border-2:          #3F372E;
	/* The boundary of a control, where the boundary is the ONLY cue.
	   `--border` is a divider: it separates two things that are both visible
	   without it, and it is drawn quietly on purpose. But every text field in
	   this app is `background: var(--bg-tertiary); border: 1px solid
	   var(--border)`, and the fill inside it sits 1.06-1.24 from the panel
	   outside it -- so on a field that line is not a divider, it is the entire
	   edge of the control, and it measured 1.02-1.26 against the surfaces it
	   was supposed to separate, on all eleven palettes. WCAG 2.2 SC 1.4.11
	   asks 3.0 of it.
	   Lifting `--border` itself would have given every panel in the app a hard
	   rule and changed the whole look, so this is a second token, used only
	   where nothing else says where the control is. Every value clears 3.01-3.08
	   against every surface of its own palette; `dev/verify_theme.mjs` holds
	   them there. */
	--border-strong:     #756F69;
	--text-primary:      #ECE6DC;
	--text-secondary:    #A79E92;
	/* The muted rung, matched across the three palettes. At #736A5F this cleared
	   only 3.1:1 on the tertiary surface -- fine by the audit's floor, but once
	   the light and candy palettes were lifted to ~4.5 the dark theme became the
	   hardest of the three to read, which is the incoherence the other way.
	   #877D70 then measured 4.04 on `--bg-tertiary` and 4.28 on `--bg-secondary`.
	   That cleared the audit's own 4.0 for this rung, but the rung is drawn at
	   11-12px -- `.dview-btn`, `.pop-note`, `.cfg-fieldnote`, `.sys-note` -- and
	   11px is small text, which WCAG 2.2 SC 1.4.3 asks 4.5 of. This was the
	   worst of the eleven and is now the last to clear it: 5.16/4.78/4.52 on the
	   three stable surfaces, 4.19 on hover. */
	--text-muted:        #908577;
	--accent:            #D2604F;
	--accent-hover:      #E07A67;
	--accent-soft:       #3A211B;
	--accent-text:       #E9A392;
	--ok:                #66B98C;
	--ok-bg:             #1C3227;
	--warn:              #D6A24A;
	--warn-bg:           #33260F;
	--danger:            #E07A67;
	--success:           #66B98C;
	/* The chip a tag filter is being held by. One neutral pair per INK -- not per
	   palette. A tag's hue already says which tag it is, so the state saying
	   "this one is working" must not also vary by tag; and it must not vary by
	   palette either, or eleven of them become eleven different states. But it
	   cannot be a single pair across both inks: a mid grey reads 6.17 against a
	   paper ground and 1.13 against a near-black one, where the only thing left
	   distinguishing a filtered tag was that its hue had gone -- and hue alone is
	   not a signal. The ink axis is the smallest thing it can key on that is not
	   a palette's name. */
	--tag-on-bg:         #4A4A4A;
	--tag-on-hover:      #5C5C5C;
	--tag-on-fg:         #FFFFFF;

	/* What letters a FILLED control -- a button whose ground is --accent, --ok
	   or --danger. White is right on a light palette, where those fills are deep
	   reds and greens. On a dark palette they are light mints and salmons, and
	   white on them measured 2.15-3.46: a label close to invisible on the one
	   control the eye is meant to go to. The rule is the same one the rest of the
	   app follows -- dark lettering on a light ground -- so a dark palette's
	   filled button letters in its own darkest surface. */
	--on-fill:           #FFFFFF;
	--radius:            8px;
	--radius-sm:         6px;
	--radius-lg:         12px;
	--font:              system-ui, -apple-system, 'Segoe UI', Roboto, Helvetica, Arial, var(--font-cjk, sans-serif), sans-serif;
	--font-mono:         ui-monospace, 'SF Mono', 'Cascadia Code', 'Fira Code', Consolas, monospace;

	/* ── The safe area ───────────────────────────────────────────────
	   What the hardware has already taken: the notch or the status bar at the
	   top, the home indicator at the foot, and in landscape a notch down one
	   side. In a browser tab these are all zero, because the browser's own
	   chrome is standing in that space. Installed on a home screen there is no
	   chrome, the page owns the whole screen, and anything laid out to the
	   viewport's edge lands under the hardware.

	   Named once here rather than written as `env(...)` at each use, for two
	   reasons: a stylesheet that says `var(--safe-t)` reads as a decision
	   rather than a browser quirk, and one that says it can be TESTED --
	   Chrome reports zero insets on every desktop, so dev/verify_pwa.mjs sets
	   these four to an iPhone's real numbers and looks at what moved. */
	--safe-t:            env(safe-area-inset-top, 0px);
	--safe-r:            env(safe-area-inset-right, 0px);
	--safe-b:            env(safe-area-inset-bottom, 0px);
	--safe-l:            env(safe-area-inset-left, 0px);

	/* ── The type scale ──────────────────────────────────────────────
	   Every font size in the app comes from here, so that text can be made
	   larger without the frame growing with it: the user's choice moves
	   --fs-scale, and only the type responds. Padding, icons and panel
	   widths are deliberately left alone -- this is a reading control, not
	   a zoom.

	   The steps are anchored on --fs-base, which is the body size, and the
	   px values are exactly what the stylesheets used before the scale
	   existed, so at scale 1 nothing moves by a pixel. */
	--fs-scale:          1;
	--fs-4xs:            calc(9px  * var(--fs-scale));
	--fs-3xs:            calc(10px * var(--fs-scale));
	--fs-2xs:            calc(11px * var(--fs-scale));	/* section headers, chips */
	--fs-xs:             calc(12px * var(--fs-scale));	/* meta lines, the commonest */
	--fs-sm:             calc(13px * var(--fs-scale));	/* secondary prose, controls */
	--fs-base:           calc(14px * var(--fs-scale));	/* body */

	/* Half steps. The dense monospace furniture -- tile meters, model chips,
	   artefact kinds, the Web panel's mode pill, the mail rows -- was drawn on
	   a rung between these sizes, consistently enough that it is plainly a
	   choice rather than an accident. Rounding them away moved the pill and
	   shifted its neighbours, so the rungs are kept. */
	--fs-3xs-2xs:        calc(10.5px * var(--fs-scale));
	--fs-2xs-xs:         calc(11.5px * var(--fs-scale));
	--fs-xs-sm:          calc(12.5px * var(--fs-scale));
	--fs-sm-base:        calc(13.5px * var(--fs-scale));
	--fs-lg:             calc(15px * var(--fs-scale));
	--fs-xl:             calc(16px * var(--fs-scale));
	--fs-xl-2xl:         calc(17px * var(--fs-scale));
	--fs-2xl:            calc(18px * var(--fs-scale));
	--fs-3xl:            calc(20px * var(--fs-scale));
	--fs-4xl:            calc(22px * var(--fs-scale));
	--fs-5xl:            calc(26px * var(--fs-scale));
	--fs-6xl:            calc(34px * var(--fs-scale));

	--header-h:          44px;
	--logo-h:            24px;
	/* ── The attachment footer's cap, and why it is six ──────────────
	   ATTACH_CONTRACT.md §5 asks for "a cap on the stack, after which the
	   footer scrolls, visibly", because it "currently grows without limit and
	   pushes the composer up the screen".

	   The number is measured, not chosen for being round. One tile is 32px
	   tall at `--fs-scale: 1` -- the tallest thing on it is the Note/Read pill
	   at 23px, plus the row's 8px of padding and its rule -- which is what
	   `--attach-row-h` states, and what `.arte-row` is held to as a minimum.
	   The chat panel at a 1500x950 window is 884px; an empty composer takes
	   76px, leaving the conversation 762px. Six tiles is 192px: a quarter of
	   the reading area, leaving 570px of conversation, which is still most of
	   the panel. Seven crosses a third of it, and the panel is for the
	   conversation.

	   Six is also, to a fraction of a tile, the accidental cap that was
	   already here: `max-height: 22vh` came to 209px at that height, or 6.4
	   tiles. That cap was invisible, cut the seventh tile at an arbitrary
	   place, and moved with the window instead of with the tiles. This one is
	   stated in the unit a person counts in.

	   Measured without any cap: at 22 attachments the footer stands 713px and
	   the conversation above it is 43px, one line. It is the reading area the
	   stack eats, the panel being a column anchored at the bottom.

	   `--attach-peek` leaves the seventh tile showing by 14px. A stack cut
	   mid-tile is the plainest statement that there is more below, and it is
	   there as well as the scrollbar, not instead of it. */
	--attach-row-h:      calc(23px * var(--fs-scale) + 9px);
	--attach-cap:        6;
	--attach-peek:       14px;
	/* One icon cell, sized so two rows of them come to the same 192px that six
	   tiles do: one cap, one footer height, whichever view is showing. */
	--attach-icon-h:     84px;
	--attach-icon-w:     88px;
	/* Default panel widths (user-pullable, persisted). */
	--rail-w:            220px;
	--agents-w:          240px;
	--work-w:            260px;
	/* The phone's bottom bar, WITHOUT the home indicator's inset, which the bar
	   adds to its own padding. It was 54px here and 58px in fact, and nothing
	   read it: css/mobile.css and js/mobile.js each carried their own copy of the
	   real number, and the sheet's foot is placed from one and its height from the
	   other. Both read this now, and mobile.js measures the bar rather than
	   trusting any of the three. 62 is a 44px chip -- the AAA target the row of
	   destinations before it met -- plus the strip's own 8 and 9 and the bar's
	   1px rule. */
	--mnav-h:            62px;
}

/* Lollypop — an inviting candy theme. A soft multicolour glow (pink, lavender, mint) washes the
   frame, while the panels stay white so text stays crisp and readable; the accent is a raspberry
   sweet, and the state colours are deliberately varied (mint, amber, cherry) so the whole thing
   reads as colourful without ever fighting the words. The gradient itself is applied to the body
   in app.css, where the background shorthand lives. */
:root[data-theme="lollypop"] {
	--bg-primary:        #FDEFF7;
	--bg-secondary:      #FFFFFF;
	--bg-tertiary:       #FBE6F2;
	--bg-hover:          #F7D8EC;
	--border:            #F3D3E6;
	--border-2:          #E7B4D3;
	--border-strong:     #967589;
	--text-primary:      #3A1E3E;
	--text-secondary:    #7C5578;
	/* Same reasoning as the light theme's muted rung: #B08AAA read at 2.5-3.0:1
	   on the candy surfaces. #8A5E85 kept the mauve and cleared 4.40 on
	   `--bg-tertiary`, which is under the 4.5 that 11px text asks for; two units
	   darker clears it at 4.53 and does not visibly change the hue. */
	--text-muted:        #885C83;
	--accent:            #C42B7C;
	--accent-hover:      #D13988;
	--accent-soft:       #FBDDEF;
	--accent-text:       #AE1E6E;
	/* Dark enough to read AS TEXT on the candy surfaces (4.5:1 on tertiary);
	   the brighter #12B26E sat at 2.3:1, fine for a dot but not for words. */
	--ok:                #0C7A4C;
	--ok-bg:             #DAF6EA;
	--warn:              #9A5C04;
	--warn-bg:           #FCEDD1;
	--danger:            #C62B48;
	--success:           #0C7A4C;
}

/* ── Skin axis ───────────────────────────────────────────────────────
   The skin is ORTHOGONAL to the theme (palette). The theme decides the
   colours; the skin decides the shape -- corners, typeface, spacing and
   how loud the furniture is. "sharp" (no data-skin, or data-skin="sharp")
   is the original precise, dense, developer-facing look. "warm" is an
   approachable skin in the manner of Google or Canva: rounder, a friendly
   rounded typeface, more room to breathe, and the dense telemetry calmed.

   Only the shape tokens live here; the density and the calmer chrome are in
   skin-warm.css, all of it scoped to :root[data-skin="warm"], so the sharp
   skin is not touched by a single rule. Type SIZE is left to the reading
   control (--fs-scale is the user's, set inline) and is not moved here. */
:root[data-skin="warm"] {
	--radius:            14px;
	--radius-sm:         10px;
	--radius-lg:         22px;
	/* A rounded, friendly sans. Nunito (self-hosted, OFL) leads; ui-rounded
	   gives Apple platforms SF Pro Rounded even before the webfont lands, and
	   the rest fall back to the cleanest available system sans. */
	--font:              'Nunito', ui-rounded, 'Segoe UI Variable Display', 'Segoe UI', system-ui, -apple-system, Roboto, var(--font-cjk, sans-serif), sans-serif;
	/* How much the warm skin loosens spacing. skin-warm.css multiplies its
	   paddings and gaps by this, so the whole skin can breathe more or less
	   from one number. 1 would match the sharp skin; 1.4 is a clear loosening. */
	--space-scale:       1.4;
	/* Soft, diffuse shadows replace some of the hard 1px borders, the way an
	   approachable UI lifts a card off the page rather than ruling a line. */
	--shadow-1:          0 1px 2px rgba(17, 12, 8, 0.04), 0 3px 10px rgba(17, 12, 8, 0.06);
	--shadow-2:          0 2px 6px rgba(17, 12, 8, 0.06), 0 12px 30px rgba(17, 12, 8, 0.10);
}

/* Light theme */
:root[data-theme="light"] {
	--bg-primary:        #FBF9F5;
	--bg-secondary:      #FFFFFF;
	--bg-tertiary:       #F4F1EA;
	--bg-hover:          #EDE9E0;
	--border:            #E7E1D6;
	--border-2:          #D6CEBF;
	--border-strong:     #89847A;
	--text-primary:      #211C18;
	--text-secondary:    #6B635A;
	/* Muted is the quietest text in the app, not the least readable: it carries
	   whole explanatory paragraphs (the Prompts note), the section headers and
	   the spend labels. At #9A9187 those sat at 2.75-3.1:1 on these surfaces --
	   below every legibility floor. #787068 lifted them to 4.31-4.87, which is
	   what the note here used to record as "clears 4.3:1 everywhere"; but the
	   figure it clears has to be 4.5, because every one of those paragraphs is
	   set at 11-12px and that is small text. Three units darker per channel
	   reaches 4.83/5.08/4.51 on the stable surfaces and 4.20 on hover, and still
	   reads a rung lighter than --text-secondary (1.16 apart, where Mist has
	   always shipped at 1.13). */
	--text-muted:        #756D65;
	--accent:            #A6322A;
	--accent-hover:      #C24A38;
	--accent-soft:       #F6E7E2;
	--accent-text:       #7E2A20;
	--ok:                #2F7A54;
	--ok-bg:             #E4F1E8;
	--warn:              #9A6410;
	--warn-bg:           #F7ECD6;
	--danger:            #A33227;
	--success:           #2F7A54;
}

/* ── The rest of the palettes ─────────────────────────────────────────
   Each one sets the same tokens and nothing else: no palette may introduce a
   rule, because a rule cannot be chosen from a list. The three above (dark,
   lollypop, light) came first and keep their ids; these seven fill out the
   three bands the picker offers.

   Every one is checked by dev/verify_theme.mjs, which computes the real WCAG
   ratio for each text rung on each surface. The floors are the ones the first
   three were tuned to: 4.5 for primary and secondary, and 4.0 for the muted
   rung, which carries whole explanatory paragraphs and is the one that was
   found sitting at 2.75 when nobody was measuring. */

/* Mist -- a cool light palette: paper with a blue-grey cast, and a slate
   accent. The quietest of the light band. */
:root[data-theme="mist"] {
	--bg-primary:        #F7F9FB;
	--bg-secondary:      #FFFFFF;
	--bg-tertiary:       #EDF1F5;
	--bg-hover:          #E2E8EF;
	--border:            #DCE3EA;
	--border-2:          #C3CDD8;
	--border-strong:     #7F858C;
	--text-primary:      #17202A;
	--text-secondary:    #56636F;
	--text-muted:        #5F6B77;
	--accent:            #26648F;
	--accent-hover:      #3A87BA;
	--accent-soft:       #E1EDF6;
	--accent-text:       #1F5478;
	--ok:                #2C7A54;
	--ok-bg:             #DFF1E7;
	--warn:              #8A5B0C;
	--warn-bg:           #F8ECD4;
	--danger:            #A9302C;
	--success:           #2C7A54;
}

/* Linen -- warm light: unbleached paper, ink brown, a muted terracotta accent.
   The counterpart to Mist at the other end of the light band. */
:root[data-theme="linen"] {
	--bg-primary:        #FAF6EF;
	--bg-secondary:      #FFFDF9;
	--bg-tertiary:       #F2EBDF;
	--bg-hover:          #E8DFCF;
	--border:            #E3DACB;
	--border-2:          #CDC0AB;
	--border-strong:     #857D6F;
	--text-primary:      #241E16;
	--text-secondary:    #635849;
	--text-muted:        #726655;
	--accent:            #9C4A22;
	--accent-hover:      #B85E32;
	--accent-soft:       #F5E5DA;
	--accent-text:       #7A3818;
	--ok:                #33704A;
	--ok-bg:             #E3EFE4;
	--warn:              #8A5B0C;
	--warn-bg:           #F6EBD3;
	--danger:            #A03A2A;
	--success:           #33704A;
}

/* Sage -- intermediate, dark ink: a green-grey study, low chroma, restful for
   long reading without going pale. */
:root[data-theme="sage"] {
	--bg-primary:        #EAEEE7;
	--bg-secondary:      #F5F7F3;
	--bg-tertiary:       #DFE5DA;
	--bg-hover:          #D2DACB;
	--border:            #CFD8C8;
	--border-2:          #B4C0AA;
	--border-strong:     #737B6D;
	--text-primary:      #1B2118;
	--text-secondary:    #4E5A48;
	--text-muted:        #5C6855;
	--accent:            #3F6B4A;
	--accent-hover:      #4F8A5E;
	--accent-soft:       #DCEADF;
	--accent-text:       #2F5439;
	--ok:                #2F6B48;
	--ok-bg:             #DAEBDF;
	--warn:              #7E570D;
	--warn-bg:           #F0E6CC;
	--danger:            #99332B;
	--success:           #2F6B48;
}

/* Dusk -- intermediate, LIGHT ink: a blue slate that is neither paper nor
   night. This is the palette the tone/ink split exists for; it sits in the
   middle band and still needs light lettering. */
:root[data-theme="dusk"] {
	--bg-primary:        #222A34;
	--bg-secondary:      #29323D;
	--bg-tertiary:       #2F3946;
	--bg-hover:          #384352;
	--border:            #46525F;
	--border-2:          #5A6879;
	--border-strong:     #838E9B;
	--text-primary:      #EDF1F6;
	--text-secondary:    #BCC7D4;
	--text-muted:        #A4B1C0;
	--accent:            #5AA6E4;
	--accent-hover:      #79BEF5;
	--accent-soft:       #33455A;
	--accent-text:       #A9CDEC;
	--ok:                #6FC194;
	--ok-bg:             #263D33;
	--warn:              #DFB059;
	--warn-bg:           #3D3421;
	--danger:            #EC8578;
	--success:           #6FC194;
}

/* Midnight -- cool deep dark: near-black with a blue cast, an ice accent. */
:root[data-theme="midnight"] {
	--bg-primary:        #0E1218;
	--bg-secondary:      #151B23;
	--bg-tertiary:       #1B222C;
	--bg-hover:          #232C38;
	--border:            #262F3B;
	--border-2:          #333E4C;
	--border-strong:     #6E7680;
	--text-primary:      #E4EAF2;
	--text-secondary:    #9BA8B8;
	--text-muted:        #808E9F;
	--accent:            #3082C0;
	--accent-hover:      #3B93D2;
	--accent-soft:       #16293A;
	--accent-text:       #8FC4EA;
	--ok:                #56BE8C;
	--ok-bg:             #12301F;
	--warn:              #D7A54F;
	--warn-bg:           #33280F;
	--danger:            #E8776B;
	--success:           #56BE8C;
}

/* Forest -- deep dark green, a moss accent. Warmer than Midnight, darker than
   Sage, and no relation to either. */
:root[data-theme="forest"] {
	--bg-primary:        #0F1511;
	--bg-secondary:      #161E18;
	--bg-tertiary:       #1C251E;
	--bg-hover:          #253026;
	--border:            #27322A;
	--border-2:          #354437;
	--border-strong:     #707A71;
	--text-primary:      #E6EDE6;
	--text-secondary:    #A0AFA1;
	--text-muted:        #86968A;
	--accent:            #4E9C55;
	--accent-hover:      #63B36B;
	--accent-soft:       #1B2E1D;
	--accent-text:       #A2CFA4;
	--ok:                #5FBE85;
	--ok-bg:             #143020;
	--warn:              #D2A052;
	--warn-bg:           #33290F;
	--danger:            #E38377;
	--success:           #5FBE85;
}

/* Plum -- deep dark violet, a magenta accent. The loudest of the dark band. */
:root[data-theme="plum"] {
	--bg-primary:        #14101A;
	--bg-secondary:      #1C1725;
	--bg-tertiary:       #231D2E;
	--bg-hover:          #2E2639;
	--border:            #302840;
	--border-2:          #40354F;
	--border-strong:     #777082;
	--text-primary:      #ECE6F2;
	--text-secondary:    #ADA0BC;
	--text-muted:        #9386A2;
	--accent:            #B06BC9;
	--accent-hover:      #C588DC;
	--accent-soft:       #2A1E36;
	--accent-text:       #CFA5E0;
	--ok:                #64BE93;
	--ok-bg:             #16301F;
	--warn:              #D3A257;
	--warn-bg:           #332A0F;
	--danger:            #E88090;
	--success:           #64BE93;
}

/* Amber -- a dark palette for the end of the day.
   Short-wavelength light is what suppresses melatonin, so this palette holds
   its BLUE CHANNEL down everywhere rather than merely wearing a warm accent:
   every surface, every rung of text and every state colour is mixed from red
   and green, with blue kept to the minimum the hue needs. The greens and the
   "ok" state come out olive rather than emerald for exactly that reason -- a
   mint tick would put back at one point on screen what the whole palette is
   avoiding.

   It is a reading palette, not a filter: the contrast floors are the same ones
   every other palette is held to, and verify_theme checks the blue channel as
   well, so a later edit cannot quietly brighten it back. */
:root[data-theme="amber"] {
	--bg-primary:        #16100A;
	--bg-secondary:      #1E1610;
	--bg-tertiary:       #251C13;
	--bg-hover:          #2F2418;
	--border:            #33271A;
	--border-2:          #423220;
	--border-strong:     #796D61;
	--text-primary:      #F2DFC4;
	--text-secondary:    #C6AE88;
	--text-muted:        #A28C6B;
	--accent:            #B86A22;
	--accent-hover:      #D08133;
	--accent-soft:       #33220F;
	--accent-text:       #E6B677;
	--ok:                #A8B457;
	--ok-bg:             #262A10;
	--warn:              #D9A840;
	--warn-bg:           #33280F;
	--danger:            #DC7B55;
	--success:           #A8B457;
}

/* Dark grounds take the selected chip the other way up: light block, dark
   lettering. 4.86 against the chip it replaces, 4.63 against every dark-band
   surface. */
/* What the user agent should assume when it draws something we have not
   styled: a scrollbar, a date picker, a default form control, a link. Without
   it Chromium draws light-mode furniture on a black panel. */
:root[data-ink="dark"]  { color-scheme: light; }
:root[data-ink="light"] { color-scheme: dark; }

:root[data-ink="light"] {
	--tag-on-bg:         #B0B0B0;
	--tag-on-hover:      #C4C4C4;
	--tag-on-fg:         #1A1A1A;
	--on-fill:           var(--bg-primary);
}

/* ── CJK faces ─────────────────────────────────────────────────
   The Latin stacks above name no CJK family, so ideographs fell to the
   browser's generic fallback -- a mismatched face mid-string beside Nunito,
   and Japanese kanji drawn in Chinese glyph forms wherever that fallback is
   an SC face (Han unification). Naming the regional families per language
   makes the glyphs deterministic; the Latin runs keep their own face because
   the Latin families still come first in each stack. `zh-Hans` matches
   `:lang(zh)` by prefix. */
:root:lang(zh) { --font-cjk: 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Noto Sans CJK SC', 'Noto Sans SC'; }
:root:lang(ja) { --font-cjk: 'Hiragino Kaku Gothic ProN', 'Yu Gothic UI', Meiryo, 'Noto Sans CJK JP', 'Noto Sans JP'; }
:root:lang(ko) { --font-cjk: 'Apple SD Gothic Neo', 'Malgun Gothic', 'Noto Sans CJK KR', 'Noto Sans KR'; }

/* A short window is mostly composer and chrome already, so six tiles there
   would be half of what is left. Four. */
@media (max-height: 700px) {
	:root { --attach-cap: 4; }
}
