/* tokens.css */
/* ============================================================
   TOKENS: one palette for the whole site, word for word.
   No page invents a palette of its own: it is the same house.
   ============================================================ */
/* ============================================================
   THE DISPLAY TYPEFACE
   ============================================================
   Gunship, by Daniel Zadorozny (Iconian Fonts). Squared, all caps in
   the way we use it: titles and headings, NEVER running text. Five
   thousand words of the safeguarding document set this way would not
   be readable.

   IT IS OURS AND IT LIVES IN HERE: no typeface comes from outside,
   just as no script and no map does. 37 KB that travel as 14, and they
   download only if something really uses them.

   THE LICENCE IS FOR NON COMMERCIAL USE and the club is a non profit
   ASD (confirmed by the club, 18 August 2026). The licence text
   travels next to the file, in assets/font/, because that is what the
   licence itself asks.

   swap: text shows AT ONCE in the system typeface and changes when the
   file arrives. The alternative is half a second of invisible titles
   on a slow connection in a gym. */
@font-face{
  font-family:"Gunship";
  /* The CONDENSED cut and not the round one: round, in caps and
     letterspaced, pulls words wide until they look stretched. This
     says the same thing in less room. */
  src:url("/font/gunship-cond.147f7ded.ttf") format("truetype");
  font-weight:400;
  font-style:normal;
  font-display:swap;
}

:root{
  /* The display typeface is named HERE and used by name: the day it
     changes, it changes in one place. The fallback is not "some sans
     or other" but the system stack the site already uses, so until the
     file arrives the page stays the same. */
  --titoli:"Gunship",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;
  /* THE HEADER HEIGHT AND THE CREST HEIGHT, in one place only.
     The drawer MUST be as tall as the strip it covers, or opening the
     menu makes the mark jump. One number instead of several kept in
     agreement by hand, each one an occasion to get it wrong.
     The crest sits seven pixels below the top edge and seven above the
     bottom one, and that air is what makes it read as a mark rather
     than a plug forced between two edges. Seven and not fourteen: at
     fourteen the strip becomes a tall header, and a tall header takes
     a band of page away from every screen of every page.
     ONE MEASURE FOR BOTH SCREENS, with no phone exception: an
     exception that distinguishes nothing is just one more place to
     remember to look.
     The width comes from the height: 1.356 is the proportion of the
     file as the pipeline produces it, white rule included. */
  --testa:70px;
  --stemma:56px;
  /* --pad IS THE PAGE MARGIN, --gap THE STEP BETWEEN PANELS, and they
     are the same number. Equal, the page reads as filled instead of
     framed, and the width goes back to the content, which is what the
     dense pages need: home, calendar, results.
     TWO TOKENS AND NOT ONE because they say two different things: the
     day the page margin has to be wider than the step, this one
     changes and the other does not. */
  --pad:13px;
  --gap:13px;
  --ground:#D3E4EF;
  --head:#FFFFFF;
  --head-fg:#0B1A22;
  --head-dim:#54697A;
  --head-line:#C2D8E5;
  --menu-line:#E2ECF2;
  --chrome-btn:rgba(4,26,40,.06);
  --chrome-btn-h:rgba(4,26,40,.13);
  --brand-dim:#02629B;
  /* THE CHROME AMBER: the menu item that stands apart (safeguarding).
     Not a highlight. A bright colour at the end of the row would read
     as the main button, the opposite of what this is. It is picked as
     LIGHT as the other items (--head-dim) and differs only in tint: it
     shows as belonging to another group, not as shouting. */
  --head-nota:#7A5F1E;
  /* The veil of that same item when its page is open. It is the amber
     itself, barely laid on the ground: "you are here" said with the
     colour that item already has, instead of borrowing the blue of all
     the others, which would fold it back into the group it stays out
     of the rest of the time.
     In rgba and not in hex because there are two grounds, the white
     header and the black one, and one veil follows both. */
  --head-nota-fill:rgba(122,95,30,.15);
  --chrome-sel:#DCEDF7;
  --chrome-sel-fg:#0377BD;
  --panel:#FFFFFF;
  --bar:#E8F2F8;
  --bar-fg:#0B1A22;
  --bar-dim:#54697A;
  --bar-line:#CFE0EB;
  --zebra:#EBF2F7;
  --sunken:#DCE7EF;
  --line:#B7CBD9;
  /* THE COUNTDOWN BOXES, one tone for both screens. The phone sheet
     redefines --line and --zebra to something much softer: right for
     its own furniture, wrong here, since these four boxes are the same
     object on both and would come out outlined in fog on the phone and
     drawn on the desk. Declared here and NOT overridden in
     tel/tokens.css, which is what makes them match. */
  --cd-fill:#EBF2F7;
  --cd-line:#B7CBD9;
  --tratteggio:#B7CBD9;
  --line-2:#95B0C3;
  --edge:#8FADC0;
  --ink:#020909;
  --ink-2:#2B3C45;
  --muted:#475965;
  --faint:#647987;
  --brand:#0377BD;
  --brand-2:#02547F;
  --accent:#52B2D0;
  --on-brand:#FFFFFF;
  /* Won / lost: the only two "semantic" colours of the house. They do
     not flip between the two themes. Green and red hold on both
     grounds, and changing them would look like two different clubs. */
  --up:#12885A;
  --down:#C6412F;
  /* THE LIGHT GREEN AND RED. They are --up and --down thinned into the
     ground, and they serve where the outcome is a PATCH and not a thin
     word: the block of a calendar cell and the win/loss label in the
     match card. The saturated full shouts there. In a grid of forty
     cells it turns into a green and red chessboard, and next to two
     lines of text it pulls the eye off the names. Full --up or --down
     goes on top and stays the semantic colour of the house: the tone
     changes, the meaning does not.
     WRITTEN IN HEX AND NOT IN rgba(): a transparent veil leans on
     whatever is under it, and here there are three different grounds
     (panel, weekday cell, weekend cell). With a solid colour the
     contrast is a single number and can be measured, and tests/theme.js
     does measure it, in both themes: 3,4:1 green and 3,7:1 red in the
     light, 3,4:1 and 3,3:1 in the dark.
     A DRAW has no token of its own: it is neutral, and the neutral is
     already there (--line-2). A third colour for "neither one nor the
     other" would say something happened, and nothing did. */
  --up-fill:#C9E7D8;
  --down-fill:#F6D6D0;
  /* THE AMBER: neither won nor lost, but "look here". It serves in one
     place only: the list of warning signs in the safeguarding
     document, which neither forbids nor obliges but asks to notice.
     Like green and red it does not flip between the two themes. It is
     a semantic colour, and changing it in the dark would mean two
     meanings for the same sign. */
  --warn:#A8730A;
  /* The veil that marks Silea: in the table, in the match list row, in
     the chosen item of the selector. Always this one, never a solid
     brand fill: in the dark, white text over light cyan sits at 2,3:1
     and does not read. */
  --me-fill:rgba(164,210,230,.46);
  /* The neutral twin of --me-fill: where --me-fill says "this is
     ours", this one says "this is not". It grounds the left half of a
     calendar cell, which for an away match cannot be brand. Not a new
     colour but --muted veiled, so it follows the theme without chasing
     it, and it stays transparent: a solid ground would disappear over
     the weekend cell, which already has a ground of its own. */
  --via-fill:rgba(71,89,101,.14);
  --scrim:rgba(2,9,9,.55);
  /* Height of the result panel body: FIXED, the same for a played
     match, a countdown and a bye. One number, and one only: without
     it the panel changes size at every change of matchday and the
     whole column flickers. */
  --hero-h:270px;
  --shadow:0 16px 40px -18px rgba(6,30,46,.28);
  --bird-op:.40;
  /* THE SPARROW HAS TWO VERSIONS, one for light grounds and one for
     dark, and the choice happens HERE because it appears in three
     different sheets (the three shapes of the result card) and
     choosing in three places means forgetting in one.
     On light goes the DARK version and the other way round: the file
     name says what colour the drawing is, not what ground it goes on.
     Two files and not a filter computed on screen: the sparrow is made
     of thin strokes, the open wing is all feathers, and any tint
     inversion smears them. These two were drawn by whoever made the
     mark. */
  --passero:url("/icona-dark.1a2459a0.png");
  /* THE 5x1000 SHAPES, watermarked inside the panel.
     The file is white on nothing (three solid shapes, not a line
     drawing) and white as a watermark works only on the dark: on the
     light board the panel lets the pale blue of the page through, and
     on the phone it has the paper ground, where white on white is
     nothing. So the file is used not as an image but as a MASK: it
     gives the shape, this line gives the colour, and one single file
     tints the watermark as needed on any ground.
     The alpha sits inside the colour instead of in a separate opacity:
     one thing to tune, not two.
     Lower than the sparrow (--bird-op, .40) because these are solid
     surfaces and not feathers: at the same opacity they would not be a
     watermark, they would be an illustration behind the text. */
  --sagome:rgba(3,119,189,.11);
  /* THE VEIL. A ground that lightens what sits under it instead of
     covering it: for where a panel rests over a watermark and must not
     erase it. White and not a solid tone, because it has to work over
     whatever ends up behind it. */
  --velo:rgba(255,255,255,.34);
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    --ground:#010506; --panel:#04090C; --bar:#0E1D26; --bar-fg:#E6F1F7;
    --bar-dim:#8CA3B0; --zebra:#0A141A; --sunken:#0F1E27; --line:#182831;
    --line-2:#2A404E; --tratteggio:#425768; --cd-fill:#0A141A; --cd-line:#22343E; --edge:#395666; --ink:#F4FAFC; --ink-2:#BFCFD8;
    --muted:#90A5B1; --faint:#6E8490; --brand:#52B2D0; --brand-2:#8AD0E4;
    --on-brand:#03151C;
    /* --up and --down never flip, but the ground they are thinned into
       does: in the dark "light" means a very dark green and red, or a
       light theme patch inside a black page turns into a lightbulb.
       Declared in all three states, or at night they would sit at the
       light value by accident and not by choice. */
    --up-fill:#0E2A20;
    --down-fill:#33170F;
    --me-fill:rgba(82,178,208,.16);
    --via-fill:rgba(144,165,177,.14);
    /* in the dark the scrim and the shadow go strong: on a dark ground
       the soft ones of the light theme would not show */
    --scrim:rgba(0,0,0,.66);
    --shadow:0 24px 60px -18px rgba(0,0,0,.6);
    --head:#020909; --head-fg:#FFFFFF; --head-dim:#9FB1BC; --head-line:#122029;
    --menu-line:#16232A;
    --chrome-btn:rgba(255,255,255,.10); --chrome-btn-h:rgba(255,255,255,.22);
    --chrome-sel:rgba(255,255,255,.14); --chrome-sel-fg:#FFFFFF;
    --brand-dim:#75C1D9;
    /* In the dark the amber lightens like everything else: dim gold,
       at the same lightness as --head-dim. */
    --head-nota:#BFA671;
    --head-nota-fill:rgba(191,166,113,.17);
    --bar-line:#16262F;
    --bird-op:.10;
    --passero:url("/icona.e2a83984.png");
    --sagome:rgba(255,255,255,.06);
    --velo:rgba(255,255,255,.04);
  }
}
:root[data-theme="dark"]{
  --ground:#010506; --panel:#04090C; --bar:#0E1D26; --bar-fg:#E6F1F7;
  --bar-dim:#8CA3B0; --zebra:#0A141A; --sunken:#0F1E27; --line:#182831;
  --line-2:#2A404E; --tratteggio:#425768; --cd-fill:#0A141A; --cd-line:#22343E; --edge:#395666; --ink:#F4FAFC; --ink-2:#BFCFD8;
  --muted:#90A5B1; --faint:#6E8490; --brand:#52B2D0; --brand-2:#8AD0E4;
  --on-brand:#03151C;
  --up-fill:#0E2A20;
  --down-fill:#33170F;
  --me-fill:rgba(82,178,208,.16);
  --via-fill:rgba(144,165,177,.14);
  --scrim:rgba(0,0,0,.66);
  --shadow:0 24px 60px -18px rgba(0,0,0,.6);
  --head:#020909; --head-fg:#FFFFFF; --head-dim:#9FB1BC; --head-line:#122029;
  --menu-line:#16232A;
  --chrome-btn:rgba(255,255,255,.10); --chrome-btn-h:rgba(255,255,255,.22);
  --chrome-sel:rgba(255,255,255,.14); --chrome-sel-fg:#FFFFFF;
  --brand-dim:#75C1D9;
    /* In the dark the amber lightens like everything else: dim gold,
       at the same lightness as --head-dim. */
    --head-nota:#BFA671;
    --head-nota-fill:rgba(191,166,113,.17);
  --bar-line:#16262F;
  --bird-op:.10;
  --passero:url("/icona.e2a83984.png");
  --sagome:rgba(255,255,255,.06);
  --velo:rgba(255,255,255,.04);
}

/* scorrimento.css */
/* ============================================================
   SCROLLBARS, ONCE AND FOR EVERYTHING
   ============================================================
   No selector list here: the bare pseudo-element covers everything
   that scrolls, the page included. A new panel has nothing to
   remember, which is the only way this stays consistent.

   The trap that rules a list out: with a LIST of selectors the
   pseudo-element attaches only to the last one.

   The phone wants it thinner (tel/base.css): 8 pixels instead of 10,
   because there the screen is 390 wide and a 10 pixel bar takes a
   hundredth of the usable width.
   ============================================================ */
*{scrollbar-width:thin;scrollbar-color:var(--line-2) transparent}

::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{
  background:var(--line-2);border-radius:6px;
  border:3px solid transparent;background-clip:content-box;
}
::-webkit-scrollbar-thumb:hover{background:var(--muted);background-clip:content-box}
::-webkit-scrollbar-corner{background:transparent}

/* app/base.css */
@media (min-width:900px){
/* ============================================================
   THE GROUND OF THE BOARD
   This is not base.css: that one is the ground of the pages that
   SCROLL, where the body has automatic height and the focus ring is
   the brand one. Here the page does not scroll, it is a screen fixed
   inside the window, and the body is a flexible column. Two pages of
   two different natures: putting both things in the same stylesheet
   means switching scrolling off on the sponsor page too.
   ============================================================ */
*{box-sizing:border-box;margin:0;padding:0}

html,body{height:100%;overflow:hidden}

/* The container of the layout: the place where either the board or
   the phone screen is mounted. It has to be INVISIBLE to the
   geometry: it takes what is left over under the header and hands it
   to its children identical, so .shell behaves as if it were still a
   child of the body. */
#schermo{flex:1;min-height:0;display:flex;flex-direction:column}
body{
  display:flex;flex-direction:column;
  background:var(--ground);color:var(--ink);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  font-size:17px;line-height:1.5;font-weight:400;
  -webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;
}
/* With the match list behind a button, the fixed-screen board holds
   down to much smaller windows. */


button,a{font:inherit;color:inherit;background:none;border:0;cursor:pointer;text-decoration:none}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:5px}
.u-num{font-variant-numeric:tabular-nums}

/* The scrollbars live in styles/scorrimento.css, with no lists of
   classes: they hold for everything that scrolls. */

}

/* header.css */
/* ============================================================
   HEADER: stitched to the top, full width, as on the other pages.
   The --gap/--pad rhythm starts here and runs downward.
   ============================================================ */
/* THE HEADER HEIGHT IS --testa, RULE INCLUDED, and it is written here
   because this is where the header is defined. A correction living in
   the sheet of an accessory component only covers the pages that have
   that component.
   box-sizing is already border-box from the reset: the height contains
   the rule instead of adding to it. */
.top{background:var(--head);border-bottom:1px solid var(--head-line);
  height:var(--testa);
  position:sticky;top:0;z-index:20}
.top-in{max-width:1840px;margin:0 auto;height:100%;padding:0 var(--pad);
  display:flex;align-items:center;gap:28px}
.brand{display:flex;align-items:center;gap:11px;flex:none;color:inherit;text-decoration:none}
/* THE WHOLE CREST, AND THE SAME ONE ON EVERY SCREEN.
   The crest settles the balance between bird and lettering inside
   itself, which is what makes a crest a crest. So there is ONE of it,
   identical everywhere, and only its size changes between board and
   phone. 48px tall inside a 64px header: the lettering inside the
   crest stays readable and there is air above and below, so it reads
   as a mark and not as a plug.
   Background and not <img>: see chrome.js. */
.brand .mark{display:block;flex:none;
  height:var(--stemma);width:calc(var(--stemma) * 1.356);
  background:url("/logo-volley-silea.ff7b3ca6.png") center/contain no-repeat}
/* The written name stays in the markup and off the screen: the crest
   already carries it, and the link aria-label says it to anyone who
   cannot see. */
.brand .wm{display:none}
/* Between 900 and ~1050px the eight items do not fit next to the mark:
   instead of breaking the page they scroll inside their own strip.
   min-width:0 because a flex container, left alone, will not be
   squeezed below its own content. */
.nav{display:flex;gap:3px;margin-left:auto;min-width:0;
  overflow-x:auto;scrollbar-width:none}
.nav::-webkit-scrollbar{display:none}
.nav a{padding:9px 15px;border-radius:8px;font-size:15px;font-weight:400;
  color:var(--head-dim);white-space:nowrap;transition:color .15s,background .15s}
.nav a:hover{color:var(--head-fg);background:var(--chrome-btn)}
.nav a.on{color:var(--chrome-sel-fg);font-weight:600;background:var(--chrome-sel)}
/* AN ITEM APART, NOT AN ITEM SINGLED OUT: safeguarding.
   A document the law requires to be published. It sits at the end and
   reads as "another thing", not as the most important one: whoever
   comes for the results does not need the eye pulled over there.

   NO FRAME. In a row of links a frame is an invitation to press, and
   it would make this look like the header main button.
   A RULE IN THE GAP instead: the mark a navigation bar has always used
   to say "from here on it is another group", and it asks nothing of
   anyone. It sits in the margin and not on the link, so the hover veil
   stays one whole shape.
   DIM AMBER, as light as the other items. The tint alone says another
   family; raising the brightness too would be shouting. In the dark it
   lightens along with everything else (--head-nota).

   THE RULE IS THE SAME AMBER and stays one pixel. The frame grey
   (--head-line) is made to detach from a white header and vanishes on
   a black one, while amber shows on both and says the same thing as
   the word it divides. One pixel because it is a mark of separation:
   thicker, it becomes a bar that calls. */
.nav a.bordata{position:relative;margin-left:20px;color:var(--head-nota)}
.nav a.bordata::before{content:"";position:absolute;left:-11px;top:50%;
  transform:translateY(-50%);width:1px;height:18px;
  background:var(--head-nota)}
.nav a.bordata:hover{color:var(--head-nota);background:var(--chrome-btn)}

/* ON ITS OWN PAGE IT STAYS AMBER. "You are here" is the same pill as
   every other item, tinted with the colour this item already has:
   borrowing the blue would fold it back into the group it stays out of
   the rest of the time, exactly while it is open.
   AND THE RULE STAYS. It divides two groups, and the two groups are
   there even from inside the second one. */
.nav a.bordata.on{background:var(--head-nota-fill);color:var(--head-nota);font-weight:600}
.tema{flex:none;width:38px;height:38px;border-radius:9px;border:0;cursor:pointer;
  display:grid;place-items:center;color:var(--head-dim);background:transparent;
  transition:color .15s,background .15s}
.tema:hover{color:var(--head-fg);background:var(--chrome-btn)}
.tema svg{grid-area:1/1;width:19px;height:19px;transition:opacity .2s,transform .2s}
.tema .ico-sole{opacity:0;transform:rotate(-60deg) scale(.7)}
.tema.scuro .ico-sole{opacity:1;transform:none}
.tema.scuro .ico-luna{opacity:0;transform:rotate(60deg) scale(.7)}

/* The hamburger exists only on the narrow layout */
.ham{display:none;width:44px;height:44px;place-items:center;border:0;cursor:pointer;
  background:transparent;color:var(--head-dim);transition:color .15s}
.ham:active{color:var(--head-fg)}
.ham svg{width:20px;height:20px;display:block}

/* Below 900px the header becomes the app one: hamburger on the left,
   mark in the middle, theme on the right. It is the same point where
   the phone shell drops its frame, so moving from page to page the top
   does NOT change under the fingers. */
@media (max-width:899px){
  .top-in{padding:0 4px;gap:0;
    display:grid;grid-template-columns:44px 1fr 44px;align-items:center}
  .ham{display:grid}
  .nav{display:none}
  /* On the phone the WHOLE crest and no lettering: the name is inside
     it, and in a 56px header between hamburger and theme button the
     bird alone with the lettering beside it does not fit without
     shrinking both below the size where they read.
     The crest is THE SAME as the board one, same size: here it just
     sits between two 44px buttons instead of left of a menu. --stemma
     states that size once for both.
     The last pixels at the top and bottom of the crest are the white
     rule the file carries with it (pipeline/tools/trasparenza.js). It
     is part of how the mark is made, and on the near black header it
     is also the only thing detaching its shape from the ground. */
  .brand{justify-content:center}
  .tema{width:44px;height:44px;border-radius:0}
}

/* drawer.css */
/* --- drawer menu, the same one on every page -----------------
   Same measures, weights and wording throughout. Two different menus
   would make moving from one page to another feel like changing
   site. */
.menu{position:fixed;inset:0;z-index:80;
  background:var(--head);color:var(--head-fg);
  display:flex;flex-direction:column;
  opacity:0;pointer-events:none;transition:opacity .2s;
  padding-bottom:env(safe-area-inset-bottom,0px)}
.menu.on{opacity:1;pointer-events:auto}
.menu-top{height:var(--testa);flex:none;display:flex;align-items:center;
  justify-content:space-between;padding:0 4px 0 16px}
/* The whole crest, as in the header this drawer covers: the menu
   opens and the mark stays where it was, at the same size. */
.menu-top .marchio{display:block;flex:none;
  height:var(--stemma);width:calc(var(--stemma) * 1.356);
  background:url("/logo-volley-silea.ff7b3ca6.png") center/contain no-repeat}
.menu .icon{width:44px;height:44px;display:grid;place-items:center;border:0;
  cursor:pointer;background:transparent;color:var(--head-dim)}
.menu .icon svg{width:20px;height:20px;display:block}
/* THE ITEMS ARE THE SCROLLING PART, and flex:1 with min-height:0 is
   what makes that true. Without them a child with overflow does not
   shrink inside a flex column: it grows and spills past its container,
   and on a short screen the footer rule cuts the last item in half. */
/* THE ITEMS SIT IN TWO COLUMNS. Eleven items fit in six rows and all
   land on screen together: the drawer opens and the whole site is
   there, with nothing to drag to reach Contatti.

   EVERY ITEM IS A CELL, all the same size. The grid makes them equally
   wide by construction, and align-items:stretch (the default, so it is
   not written) makes them as tall as the tallest of their row. The
   minimum is sixty-four pixels, above the forty-four a finger needs.

   THE TYPE IS 17. At half the screen width "Calendario" does not fit
   at 24 bold, and a word wrapping inside a cell undoes the grid the
   cell is there to build. */
.menu nav{flex:1;min-height:0;
  padding:18px;overflow-y:auto;
  display:grid;grid-template-columns:1fr 1fr;gap:10px;align-content:start}
.menu nav a{color:var(--head-fg);
  font-size:17px;font-weight:700;letter-spacing:-.02em;
  min-height:64px;padding:12px 14px;
  border:1px solid var(--menu-line);border-radius:12px;
  display:flex;align-items:center;gap:10px}
/* THE ITEM OF THE OPEN PAGE is tinted in three places: text, border
   and a veil of background. Among eleven identical cells one blue word
   between ten white ones is a detail that gets lost, while a tinted
   cell is found without looking for it. */
.menu nav a.on{color:var(--brand);border-color:var(--brand);
  background:color-mix(in srgb, var(--brand) 13%, transparent)}
.menu nav a small{font-size:9px;font-weight:700;letter-spacing:.09em;
  text-transform:uppercase;color:var(--head-dim);
  border:1px solid var(--menu-line);border-radius:4px;padding:2px 5px}
/* THE DRAWER FOOTER: who this club is.
   On the board it sits in a strip at the bottom of the screen. Here it
   cannot: below 900px the bottom belongs to the sponsor bar and the
   page does not scroll. So it sits where people look for what the
   screen does not show.

   TRULY AT THE BOTTOM: margin-top:auto pushes it to the last row of
   the column even when few items would leave it hanging halfway. The
   rule separates it from the items, which are large and made to be
   touched; this text is small and made to be read, and with no line
   between them it would read as the last menu item.
   The bottom safe margin already belongs to .menu. */
.menu-piede{
  margin-top:auto;flex:none;
  padding:10px 22px 12px;
  border-top:1px solid var(--menu-line);
  font-size:10.5px;line-height:1.45;color:var(--head-dim);
}
.menu-piede p{margin:0}
.menu-piede p + p{margin-top:3px}
.menu-piede .sep{margin:0 .5em;opacity:.5}

/* SHORT SCREENS. On a 360x640, still around, six rows plus header plus
   footer overflow by twenty pixels and the drawer starts scrolling.
   Everything tightens: shorter cells, less air between them, one pixel
   less type. Fifty-six pixels of cell remain, above the forty-four a
   finger needs. */
@media (max-height:700px){
  .menu nav{padding:14px;gap:8px}
  .menu nav a{min-height:56px;padding:10px 12px;font-size:16px}
}
/* One step further down for the shortest of all: a 360x560, or an
   ordinary phone turned sideways. Fifty pixels are still above the
   forty-four of a finger. It goes no lower: if more room is ever
   needed it scrolls, which by then is the right answer. */
@media (max-height:600px){
  .menu nav{padding:12px;gap:7px}
  .menu nav a{min-height:50px;padding:8px 12px;font-size:15.5px}
}

@media (min-width:900px){ .menu{display:none} }

.toast{position:fixed;left:50%;bottom:30px;z-index:90;
  transform:translate(-50%,10px);
  background:var(--ink);color:var(--panel);
  font-size:13px;font-weight:500;padding:10px 16px;border-radius:10px;
  opacity:0;pointer-events:none;transition:opacity .2s,transform .2s}
.toast.on{opacity:1;transform:translate(-50%,0)}

/* Safeguarding stands apart down here too, in the dim amber of the
   header. It takes the whole grid width, and its weight stays that of
   the other items: a different item, not a more important one.

   AMBER, not the grey of the chrome: that grey is made to detach from
   a light ground and disappears on the black drawer.
   ON ITS OWN PAGE IT STAYS AMBER: the other selected items turn brand,
   this one already has its colour. */
.menu nav a.bordata{grid-column:1 / -1;
  color:var(--head-nota);border-color:var(--head-nota)}
.menu nav a.bordata.on{color:var(--head-nota);border-color:var(--head-nota);
  background:color-mix(in srgb, var(--head-nota) 13%, transparent)}

/* piede.css */
/* ============================================================
   THE FOOTER: ONE LINE, AT THE BOTTOM OF THE SCREEN
   ============================================================
   Who this club is, by law and by manners: full name, registered
   office, tax code, VAT number and federation code. On one line, in
   small type, in a grey that does not call. This is not text to read,
   it is text to find when looked for: catching the eye would steal
   attention from what the page exists for.

   IT IS FIXED, and that is not an aesthetic choice. On the board most
   pages are window-tall screens that do not scroll (app/base.css:
   html,body{overflow:hidden}), so "the bottom of the page" is not a
   place there. The only page that really scrolls is sponsor, and a
   fixed bar is what that one needs anyway: the footer is not a reward
   for reaching the end of fifteen brands.

   THE BODY GIVES UP THE SPACE, not the footer. A fixed element leaves
   the flow and would pass OVER the content, so the body shortens by
   the same amount and both cases hold: the fixed screen tightens, the
   scrolling page ends higher up. The height lives in a token because
   the footer declares it and the body uses it. Written twice, a change
   to the type size would show up as a covered line or a finger of
   emptiness.

   ON THE PHONE IT IS NOT THERE. Down here the bottom of the screen
   already belongs to the sponsor bar, and a second strip under the
   first would eat screen from a view that has little. The phone footer
   is still to be decided: see the note at the end.
   ============================================================ */

:root{ --piede-h:30px; }

.piede{
  position:fixed;left:0;right:0;bottom:0;z-index:6;
  height:var(--piede-h);
  display:flex;align-items:center;justify-content:center;
  padding:0 16px;
  background:var(--bar);
  border-top:1px solid var(--bar-line);
  /* Not text to read: text to find. Small, in a grey that stays back,
     and never wrapping. One line that on a narrow window shortens with
     an ellipsis instead of becoming two and breaking the strip. */
  /* LINE HEIGHT CANNOT BE 1. At line height one the line is as tall as
     the type, and the descenders (the p of "Sportiva", the g, the q)
     fall OUTSIDE the line: with overflow:hidden above, they get cut in
     half. A comfortable line height keeps them in, and centring the
     line in the strip is the job of align-items, not of the text
     height. */
  font-size:11.5px;line-height:1.45;letter-spacing:.01em;
  color:var(--bar-dim);
  white-space:nowrap;overflow:hidden;
}
.piede p{
  max-width:100%;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
/* The separator dots: lighter than the text, because all they do is
   separate. The space around them comes from margins, not from two
   spaces written in the markup, which at the end of a line would add
   themselves to the ellipsis. */
.piede .sep{margin:0 .55em;opacity:.5}

/* The body shortens by the height of the footer.
   On fixed screens this tightens the column and nothing ends up under
   the strip; on the scrolling page it is the last piece of document
   that stops higher up. */
body{padding-bottom:var(--piede-h)}

/* ------------------------------------------------------------------
   ON THE PHONE, FOR NOW, NOTHING.
   The bottom of the screen belongs to the sponsor bar, and below 900px
   the page does not scroll (tel/base.css says so in words: "niente
   scorre a livello di pagina"), so there is no "bottom" to put a
   footer in flow. It would go at the end of the scrolling strip,
   inside .scroll, and that strip is mounted by the phone layouts one
   by one: a job to do calmly and in one pass.
   Meanwhile the footer does not show and steals no room: absent beats
   wrong. The natural exception is the sponsor page, a document that
   below 900 really scrolls, where a trailing footer would work on its
   own. Keeping it on one page and not the others would be the worst of
   the three.
   ------------------------------------------------------------------ */
@media (max-width:899px){
  .piede{display:none}
  body{padding-bottom:0}
}

/* THE ONLY ITEM THAT LEADS ANYWHERE. It sits among text nobody
   touches, so it must not shout but must still be recognisable: same
   colour as the rest, underlined on hover. */
.piede a{color:inherit;text-decoration:none}
.piede a:hover,.piede a:focus-visible{text-decoration:underline}

/* app/griglia.css */
@media (min-width:900px){
/* ============================================================
   THE GRID
   ============================================================ */
.shell{
  flex:1;min-height:0;overflow:hidden;
  max-width:1840px;width:100%;margin:0 auto;
  /* above it is a gap between panels, below it is the frame of the
     page: this way the bottom margin matches the side ones */
  padding:var(--gap) var(--pad) var(--pad);
  display:grid;grid-template-columns:284px minmax(0,1fr) 400px;gap:var(--gap);
}
.side{min-height:0;min-width:0;display:flex;flex-direction:column}
.side .panel{flex:1}
/* the hero is as tall as its content (constant), the rest goes to the list */
.centre{display:grid;grid-template-rows:auto minmax(0,1fr);gap:20px;min-height:0;min-width:0}
.aside{display:grid;grid-template-rows:minmax(0,1fr);min-height:0;min-width:0}
/* Below 1400px the centre would drop under the ~594px the box score
   needs, and the names would break one letter at a time. Better to
   take the table away and call it back from a button in the bar. */
@media (max-width:1399px){
  .shell{grid-template-columns:284px minmax(0,1fr)}
  .aside{display:none}
  .side-links .side-tbl{display:flex}
}
@media (max-width:960px){
  .shell{grid-template-columns:minmax(0,1fr);padding-bottom:26px}
  .aside{display:grid}      /* in a single column there is room for it again */
  .side-links .side-tbl{display:none}
}

.panel{background:var(--panel);border:1px solid var(--edge);border-radius:14px;
  display:flex;flex-direction:column;min-height:0;overflow:hidden}
/* dark bar */
/* THE BAR IS 38 HIGH, everywhere. Every extra pixel of dark band is
   paid four times over on a board with four panels: sixteen more each
   are sixty pixels of screen spent on frame instead of on content.
   It is a MINIMUM, not a height: a bar with something taller inside
   (the matchday buttons, which are 38 round) grows by itself. */
.p-head{flex:none;background:var(--bar);color:var(--bar-fg);
  border-bottom:1px solid var(--bar-line);
  padding:0 20px;min-height:38px;display:flex;align-items:center;justify-content:space-between;gap:14px}
/* THE PANEL TITLE IS IN THE SAME FACE AS EVERYTHING ELSE. The brand
   face looks good on a sign, but at 13px in spaced uppercase its
   squared letters read one character at a time instead of one word at
   a time, and a panel title is read in passing: it is the thing that
   says WHERE YOU ARE, and if it costs attention it has already
   failed.
   The brand face, on this site, lives inside the crest. */
.p-head .t{font-size:13px;font-weight:600;letter-spacing:.1em;text-transform:uppercase}
.p-head .t.dim{color:var(--bar-dim);font-weight:400}

}

/* app/iscriviti.css */
@media (min-width:900px){
/* ============================================================
   THE SIGN-UP: the board
   ============================================================
   Two columns like /safeguarding/: on the left where you are, on the
   right what you have to do. It is the same shape because it is the
   same problem (a long document to be crossed in order) and using
   two different grammars for the same thing is like changing language
   halfway through a sentence.

   THE FORM COLUMN IS NOT AS WIDE AS THE SHEET. A text field a
   thousand pixels long does not help in writing a name: it helps in
   losing the thread between the label and the box. It stops where it
   reads, and the rest is air.
   ============================================================ */

/* THE HEIGHT OF THE WINDOW, as on every other board. The body is a
   flexible column as tall as the screen (app/base.css), but the .app
   in between is not declared anywhere in common: every page writes it
   in its own tail (palasilea.css, safeguarding.css) and without
   this line the chain breaks there, the two panels stop at the height
   of the content and half a screen of bare page ground is left
   below. */
.app{flex:1;min-height:0;display:flex;flex-direction:column}

/* flex:1 and min-height:0 come with .shell from app/griglia.css, and
   declaring display:grid here does not wipe them out: they stay. What
   is needed on top of that is for the grid to take the whole height,
   otherwise the two panels stop at the height of the content and the
   bare page ground is left below. */
.shell.isc{display:grid;grid-template-columns:300px minmax(0,1fr);gap:var(--gap);
  align-items:stretch;align-content:stretch;min-height:0}
/* THE CHOICE AND THE DOOR HAVE NO INDEX: there is no path to show,
   there is one single question. With the two-column grid they end up
   squashed into the index column, three hundred pixels wide in the
   middle of an empty screen.

   AND THEY STAND IN THE MIDDLE OF THE SCREEN. One single question
   propped up at the top left, with half a metre of emptiness below
   it, looks like a piece of page that has not finished loading. In
   the middle it reads as what it is: the only thing there is to do on
   this screen.

   CENTRED LIKE THE CONTACTS ONE, and with the same line. The optical
   centre (a minimum height worked out by hand and a bottom padding
   as tall as the header, to raise the panel above the centre of the
   usable area) is a theory that applied to one page alone sets two
   twin panels twenty-eight pixels out of step: the same shape, in the
   same frame, one entry apart in the menu. Between twins that gap
   shows; the optical centre of one of the two does not.
   If one day the optical centre is wanted, it goes to both together,
   and it is written in one single place. */
.shell.isc.sola{display:flex;align-items:center;justify-content:center;
  padding:var(--gap) var(--pad) var(--pad)}

/* A HIDDEN STEP HAS TO DISAPPEAR FOR REAL. The hidden attribute is
   worth display:none, but it is an author rule with specificity zero:
   any display declared in a stylesheet beats it. The parent stage has
   display:flex, so it stays in the list even for an athlete of age:
   visible in the row with the others while the counter says "1 di
   5". */
/* HIDDEN MEANS HIDDEN, and here it takes !important.
   The hidden attribute is worth display:none with specificity zero,
   so it loses against any stylesheet rule; but even rewritten as
   .is-passo[hidden] it weighs (0,2,0), exactly as much as
   .is-passo[data-passo="dati"] below it, which wins on position. The
   result: the data step never hides and the athlete's form appears
   under the first question.
   So it is closed with the one declaration that no order and no
   specificity can overturn. */
.is-tappa[hidden],.is-passo[hidden],.bl[hidden]{display:none !important}

/* ---- the index, which is also the progress ---- */
.is-lato{display:flex;flex-direction:column;min-height:0}
.is-tappe{flex:1;min-height:0;overflow-y:auto;padding:12px 12px 6px;
  display:flex;flex-direction:column;gap:2px}
.is-tappa{display:flex;align-items:center;gap:12px;width:100%;padding:11px 12px;
  border-radius:10px;text-align:left;font-size:14.5px;color:var(--ink-2);
  background:none;border:0;cursor:pointer;transition:background .14s,color .14s}
.is-tappa:hover:not([disabled]){background:var(--zebra)}
/* The stage reached lights up like the chosen entry in the tree of
   competitions: a faint veil, a bar on the left, brand-coloured
   text. */
.is-tappa.on{background-image:linear-gradient(var(--me-fill),var(--me-fill));
  box-shadow:inset 3px 0 0 var(--brand);color:var(--brand-2);font-weight:600}
.is-tappa[disabled]{color:var(--faint);cursor:default}
.is-tappa .n{flex:none;width:24px;height:24px;border-radius:50%;display:grid;
  place-items:center;background:var(--sunken);color:var(--muted);
  font-size:11px;font-weight:600}
.is-tappa.on .n{background:var(--brand);color:var(--on-brand)}
/* THE TICK: what is settled already. It serves to know how far one
   has got without having to go back over it to check. */
.is-tappa.fatto .n{background:var(--up-fill);color:var(--up)}
.is-tappa.fatto{color:var(--ink-2)}
.is-tappa[disabled] .n{background:transparent;border:1px solid var(--line)}
.is-nota{flex:none;padding:14px 16px 16px;border-top:1px solid var(--line);
  font-size:12px;line-height:1.5;color:var(--muted)}
.is-nota b{color:var(--ink-2)}

/* ---- the form column ---- */
.is-corpo{display:flex;flex-direction:column;min-height:0}
.is-scorre{flex:1;min-height:0;overflow-y:auto;padding:22px 28px 24px;
  scrollbar-width:thin;scrollbar-color:var(--line-2) transparent}
/* The step that is READ stays narrow (a line of text a thousand
   pixels long cannot be followed) but the step that is FILLED IN
   does not: there the width is needed, because fourteen fields set
   two by two make seven rows and half a screen of scrolling exactly
   when one would like to see how much is left. */

/* THE FORM TAKES THE WHOLE COLUMN. A text to be read is kept narrow,
   but a form is not: choked to a thousand pixels inside a panel of
   fifteen hundred it leaves half a metre of emptiness on the right
   and in exchange pushes the last field under the border. The
   emptiness on the right and the scrolling at the bottom are the same
   mistake seen from two sides. */
/* EVERY SCREEN TAKES THE WIDTH, except the first question, which is
   two buttons and a line of text. A width ceiling meant for text,
   applied to the forms and to the documents as well, is where the
   emptiness on the right comes from. */
.is-passo{max-width:none}
.is-passo[data-passo="chi"]{max-width:680px}
.is-passo h2{font-size:23px;font-weight:600;letter-spacing:-.02em;color:var(--ink)}
.is-guida{margin:8px 0 22px;font-size:15px;line-height:1.55;color:var(--ink-2)}
.is-guida b{color:var(--ink-2);font-weight:600}

/* ---- the fields ---- */
/* THE THREE GROUPS. They are not decoration: they are the three
   questions the fields answer (who you are, where you live, how you
   are reached) and a form that keeps them apart is filled in without
   rereading the labels. The box is barely hinted at, the heading sits
   on its own hairline: it has to divide, not to frame. */
.gr{border:0;padding:0;margin:11px 0 0}
.gr legend{padding:0 0 7px;font-size:11px;font-weight:600;letter-spacing:.12em;
  text-transform:uppercase;color:var(--brand-2)}
.gr + .gr{margin-top:13px;padding-top:13px;border-top:1px solid var(--line)}

/* TWO GROUPS ON THE SAME ROW: Recapiti takes eight columns and
   Certificato medico the four that are left, on the same twelve-column
   grid as the fields.

   THE HAIRLINE SITS ON THE TWO GROUPS, NOT ON THE ROW THAT HOLDS
   THEM, and it is not a detail: the legend of a fieldset is drawn
   INSIDE its top border and opens a gap in it, and that is why
   ANAGRAFICA and RESIDENZA sit on their line instead of under it.
   With the border moved onto the container, the two legends have
   nothing left to fit into and fall under a whole line, unlike every
   other one in the form. Two hairlines, one per group, are also the
   right drawing: they are two sections, and each carries its own
   title. */
.gr-riga{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));
  gap:0 16px;margin-top:13px}
.gr-riga > .gr{margin:0;padding-top:13px;border-top:1px solid var(--line)}
.gr-riga .gr-come{grid-column:span 8}
.gr-riga .gr-salute{grid-column:span 4}

/* TWELVE COLUMNS, AND EVERY ROW CLOSES EXACTLY ON THE TWELVE. Added
   up at random, every row ends wherever it happens to and the form
   reads like a spilled glass.
     anagrafica  cognome 4 · nome 4 · nascita 4      (the parent: 3+3+3+3)
                 luogo 4 · cittadinanza 4 · codice 4
     residenza   via 5 · n. 1 · comune 4 · CAP 2      ALL ON ONE ROW
     recapiti    telefono 6 · e-mail 6
   The residence stands on a single row because it is ONE piece of
   data: street, number, town and postcode are one address broken into
   four boxes for the convenience of whoever writes it. On two rows
   they read as two different pieces of information. */
.campi{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));
  gap:12px 16px;align-content:start}
/* EVERYTHING IN ANAGRAFICA MEASURES THE SAME: a third of a row. Two
   forms that ask for the same things set out in two different ways
   read as two forms from two different offices, so the athlete and
   the parent share the widths even though the parent has one field
   more. The parent's extra field wraps, and that is perfectly
   fine. */
.cmp{grid-column:span 4}
/* THE SECOND ROW OF THE ATHLETE'S ANAGRAFICA IS OF FOUR. The identity
   card number sits beside the tax code, which is where whoever checks
   looks for it: they are the two codes of the same person, and the
   only way the second row keeps them together is with four boxes of
   three columns. The first row stays of three and the two rows do not
   line up with each other: they both close exactly on the twelve,
   which is the rule that counts.
   The parent's card has no such field and stays of three: the number
   is needed for the CAMP3, and it is the athletes who go on the
   CAMP3. */
[data-blocco="atleta"] .gr-chi .f-luogoNato,
[data-blocco="atleta"] .gr-chi .f-cittadinanza,
[data-blocco="atleta"] .gr-chi .f-cf,
[data-blocco="atleta"] .gr-chi .f-documento{grid-column:span 3}
.f-via{grid-column:span 4}
/* Two columns and not one: a street number is "12/B", not "12". */
.f-civico{grid-column:span 2}
.f-comune{grid-column:span 4}
.f-cap{grid-column:span 2}
.f-cell,.f-cellAtleta,.f-email{grid-column:span 6}
/* The expiry date is alone inside its group, and the group is narrow
   already: it takes all twelve columns of its own grid, which are the
   four of the row. With the standard span it would take a third of
   them and the box would come out as wide as "gg/n". */
.f-scadCert{grid-column:span 12}

/* BIGGER THAN IT LOOKS RIGHT TO WHOEVER WRITES THE CODE. This form is
   filled in by a parent, often in the evening, often without the
   glasses they should be wearing.
   THE LABEL IS INK: in uppercase and small, the grey of the subtitles
   disappears. The faint tone stays on "facoltativo". */
.cmp label{display:block;font-size:12px;font-weight:600;letter-spacing:.05em;
  text-transform:uppercase;color:var(--ink-2)}
.cmp label small{font-weight:400;letter-spacing:.02em;text-transform:none;color:var(--muted)}
/* THE BOX HAS TO BE SEEN. With the hairline of the separators on a
   ground the same colour as the panel, the boxes disappear: barely
   so on the light theme, entirely on the dark one. A box is a hole in
   the sheet: a sunken ground and a stronger outline, like every other
   surface this site asks anybody to write on. */
.cmp input{width:100%;margin-top:5px;padding:11px 13px;border-radius:9px;
  border:1px solid var(--line-2);background:var(--sunken);color:var(--ink);
  font-size:17px;font-family:inherit;transition:border-color .14s,box-shadow .14s}
.cmp input:hover{border-color:var(--brand-dim)}
.cmp input:focus{outline:0;border-color:var(--brand);background:var(--panel);
  box-shadow:0 0 0 3px var(--me-fill)}
.cmp input.male{border-color:var(--down)}
/* THE PLACE FOR THE ERROR IS ALWAYS THERE, empty too: appearing only
   when needed, it would make the row below jump while somebody is
   typing. */
.err{min-height:14px;margin-top:2px;font-size:12.5px;line-height:1.2;color:var(--down)}

/* ---- the blocks: athlete, parent, second parent ----
   SIDE BY SIDE AS LONG AS THEY FIT. Athlete and parent are two forms
   of twelve fields: stacked they make twelve hundred pixels and there
   is no choice but to scroll, side by side they make six hundred and
   both fit in the window. Below 560 pixels per column they go back
   into a file, which is the point where setting them side by side
   would mean boxes of a hundred and twenty pixels.
   The third block (the second parent, when there is one) wraps on
   its own: at that point one scrolls, but one scrolls because there
   really is a lot of data, not because the space was wasted. */
/* THE PARENTS' STEP: two blocks side by side if they fit, in a file
   if they do not. The athlete's step has one single block and takes
   the whole width. */
.bl{min-width:0}
.bl h2{display:flex;align-items:center;gap:0;font-size:20px;font-weight:600;
  letter-spacing:-.015em;color:var(--brand-2);margin-bottom:2px}
.bl h2 .t{flex:none}
/* THE ROLE SITS INSIDE THE TITLE, on the same line. Put underneath it
   is one more grid row, eighty-six pixels. Here it costs nothing:
   the title takes that row anyway.
   The label stays in the document for whoever reads by voice, and
   disappears to the eyes: beside the word "genitore" a box with
   "Madre" inside it needs no explaining. */
.bl-testa{display:inline-flex;margin-left:14px}
.bl-testa .cmp{margin:0}
.bl-testa label{position:absolute;width:1px;height:1px;overflow:hidden;
  clip-path:inset(50%);white-space:nowrap}
.bl-testa select{margin:0;width:200px;padding:7px 30px 7px 12px;font-size:14.5px;
  border-radius:8px;border:1px solid var(--line-2);background:var(--sunken);
  color:var(--ink);font-family:inherit;cursor:pointer;
  /* THE STYLESHEET DRAWS THE ARROW ITSELF. Left to the system, a
     dropdown is indistinguishable from a text box on half the
     browsers: and that is exactly what hides this field, which sits
     in a title row and not in the middle of the form. */
  appearance:none;-webkit-appearance:none;
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27%230377BD%27 stroke-width=%272.4%27 stroke-linecap=%27round%27%3E%3Cpath d=%27M6 9l6 6 6-6%27/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 9px center;background-size:15px}
.bl-testa select:focus{outline:0;border-color:var(--brand);box-shadow:0 0 0 3px var(--me-fill)}
/* WHEN IT IS MISSING IT SHOWS FROM A DISTANCE. It sits in a title
   row, where the eye does not look for fields to fill in: without a
   strong mark one reaches the end of the form without having noticed
   it. */
.bl-testa select.male{border-color:var(--down);background-color:var(--down-fill);
  box-shadow:0 0 0 3px var(--down-fill)}
.bl-testa .err{display:none}

.bl-via{margin-left:auto;padding:10px 16px;border-radius:10px;cursor:pointer;
  border:1px solid var(--line-2);background:transparent;font-family:inherit;
  font-size:14.5px;font-weight:500;color:var(--muted)}
.bl-via:hover{border-color:var(--down);color:var(--down)}

/* ---- the field that searches a long list ---- */
/* The box is the same as all the others: the arrow sits inside it,
   not alongside, otherwise the field narrows and no longer adds up in
   the grid. */
.combo{position:relative}
.combo input{padding-right:38px}
.combo-giu{position:absolute;right:1px;top:5px;bottom:1px;width:34px;
  display:grid;place-items:center;border:0;border-radius:0 8px 8px 0;
  background:transparent;color:var(--brand);cursor:pointer}
.combo-giu svg{width:17px;height:17px}
.combo-giu:hover{color:var(--brand-2)}
/* THE LIST FLOATS ABOVE EVERYTHING. Inside the flow it would push the
   row below down at every letter typed, and the form would dance
   under the fingers. */
/* Above everything and in window coordinates: inside the form, which
   scrolls, the border of the panel cuts it off. */
.combo-lista{position:fixed;z-index:60;
  overflow-y:auto;overscroll-behavior:contain;
  /* Scrolling with the finger is driven by combo.js: the gesture is
     taken away from the browser, because it is the same
     preventDefault that keeps the focus in the box. The mouse wheel
     has nothing to do with it and works. */
  touch-action:none;margin:0;padding:5px;list-style:none;
  background:var(--panel);border:1px solid var(--line-2);border-radius:10px;
  box-shadow:var(--shadow)}
.combo-lista[hidden]{display:none}
.combo-lista li{display:flex;align-items:baseline;gap:9px;padding:9px 11px;
  border-radius:7px;font-size:15.5px;color:var(--ink);cursor:pointer}
.combo-lista li:hover,.combo-lista li.su{background:var(--me-fill);color:var(--brand-2)}
/* The short form of the province tells the four Cavallino and the
   three San Donato apart: without it the list asks one to guess. */
.combo-piu{margin-left:auto;font-size:12px;font-weight:600;letter-spacing:.06em;
  color:var(--muted)}
.combo-lista li.su .combo-piu{color:var(--brand)}
.combo-vuoto{color:var(--muted);font-size:13.5px;cursor:default}
.combo-vuoto:hover{background:none;color:var(--muted)}

/* The "abroad" tick, in the label row of its own field */
.cmp label{display:flex;align-items:center;gap:7px}
/* ATTACHED TO THE NAME OF THE FIELD, not pushed to the right: "Luogo
   di nascita [x] estero" reads as one single sentence, and it is one
   single sentence. Pushed to the other end of the row it looks as if
   it belonged to the field alongside.
   No pill: the outline makes it look like a button, and it is not a
   button: it is one more word in the label, with its own box. */
.eti-estero{display:inline-flex;align-items:center;gap:5px;margin-left:2px;
  font-size:11px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;
  color:var(--muted);cursor:pointer}
.eti-estero:hover{color:var(--brand)}
.eti-estero input{width:14px;height:14px;margin:0;accent-color:var(--brand);cursor:pointer}
.eti-estero:has(input:checked){color:var(--brand-2)}

/* ---- the two choices, never one alone ---- */
.is-due{display:flex;gap:10px;flex-wrap:wrap}
.is-due button{flex:1 1 220px;display:flex;align-items:center;gap:10px;
  padding:13px 15px;border-radius:11px;border:1px solid var(--line);
  background:var(--panel);color:var(--ink-2);font-size:14.5px;font-family:inherit;
  text-align:left;cursor:pointer;transition:border-color .14s,background .14s}
.is-due.grande button{padding:18px;font-size:16px}
.is-due button:hover{border-color:var(--line-2);background:var(--zebra)}
/* The round mark is empty until a choice is made: neither of the two
   starts lit, because a consent already given on somebody's behalf is
   not a consent. */
.is-due .seg{flex:none;width:18px;height:18px;border-radius:50%;
  border:2px solid var(--line-2);transition:border-color .14s,box-shadow .14s}
.is-due button.on{border-color:var(--brand);background:var(--me-fill);
  color:var(--brand-2);font-weight:600}
.is-due button.on .seg{border-color:var(--brand);box-shadow:inset 0 0 0 4px var(--brand)}

/* ---- the notices ---- */
/* THREE DOCUMENTS, THREE PANELS, side by side as long as they fit:
   they are three distinct acts (one to be read, two to be consented
   to) and stacked at full width they make a page where it is no
   longer clear where one ends and the next begins. */

/* ONE SINGLE SCROLLBAR, and it is the panel's. A text inside a little
   window of its own, scrolling inside a page that scrolls in turn,
   makes two nested bars, and the finger or the wheel never knows
   which of the two it is moving. The document is as long as it is,
   and what scrolls it is the panel that holds it, like every other
   page of this site. */
/* The document is not a box: it is the content of the panel. */
.is-doc{min-width:0}
.is-doc.male{border-color:var(--down)}
.is-doc-cima{padding:0 0 14px;border-bottom:1px solid var(--line)}
.is-doc-cima h3{font-size:16px;font-weight:600;line-height:1.3;color:var(--brand-2)}
.is-norma{margin-top:4px;font-size:11.5px;color:var(--faint)}
/* THE TEXT IS SCROLLED INSIDE ITS OWN PANEL and does not lengthen the
   page: three notices in full in a single flow make a page of twelve
   screens, and whoever only has to tick two boxes never crosses it.
   Held in a window as tall as a screen, the document stays readable
   and it also stays evident that it is readable. */
.is-testo{padding:16px 0 0}
.is-sez + .is-sez{margin-top:14px}
.is-sez h4{display:flex;gap:8px;font-size:13px;font-weight:600;color:var(--brand-2)}
.is-sez h4 .n{color:var(--brand)}
.is-sez p{margin-top:5px;font-size:13px;line-height:1.6;color:var(--ink-2)}
.is-elenco{margin-top:5px;padding-left:18px;list-style:disc}
.is-elenco li{font-size:13px;line-height:1.6;color:var(--ink-2);margin-top:3px}
.is-elenco li::marker{color:var(--brand)}

/* THE BAND THAT STAYS STILL AT THE BOTTOM. It sits between the part
   that scrolls and the buttons, so the question is always under the
   eyes while one reads, and not at the end of ten screens, where
   only whoever scrolls to the last line finds it. */
.is-fisso{flex:none;border-top:1px solid var(--line);background:var(--zebra)}
.is-consenso{padding:14px 28px}
.is-consenso[hidden]{display:none !important}
/* The two answers side by side: they are a choice between two, and
   set in a column the second one ends up under the border of the
   panel. */
.is-scelte{display:flex;flex-wrap:wrap;gap:10px 18px;margin-top:9px}
/* THE TWO COLUMNS LINE UP AT THE BOTTOM. The a) and b) labels are of
   different lengths (one wraps, the other does not) and with the
   buttons stuck under the text the two files end at two different
   heights. Pushed to the foot of the column, the four buttons stand
   on a single line whatever the labels above them say. */
.is-scelta{flex:1 1 320px;min-width:0;display:flex;flex-direction:column}
.is-scelta .is-due{margin-top:auto;padding-top:6px}
.is-scelta .err{min-height:0}
.is-formula{font-size:13.5px;line-height:1.6;color:var(--ink-2)}
.is-eti{margin:14px 0 8px;font-size:13.5px;font-weight:600;color:var(--ink)}
.is-scelta + .is-scelta{margin-top:6px}
.is-scelta .is-due{margin-top:8px}
.is-visto{display:flex;align-items:flex-start;gap:11px;cursor:pointer;
  font-size:13.5px;line-height:1.55;color:var(--ink-2)}
.is-visto input{flex:none;width:19px;height:19px;margin-top:1px;accent-color:var(--brand)}

/* ---- review: the data on the left, the document on the right ----
   THE PDF STAYS, because here it really is seen: it is the real
   document, composed now with the signature lines still empty, that
   is exactly what is about to be signed.
   BESIDE IT THERE ARE THE DATA AS WRITTEN: the document in a panel
   six hundred pixels tall reads badly, and correcting a postcode
   means hunting for it inside eight pages. This way one checks on the
   left and corrects from the button of its own section, with the
   document under the eye all the while. The column of data sits where
   the emptiness would otherwise be: the board is wide, the PDF has
   the proportions of an A4 sheet and past a certain point it does not
   widen. */
.is-passo[data-passo="rivedi"]{display:flex;flex-direction:column;height:100%}
.is-passo[data-passo="rivedi"] h2{margin-bottom:0}
#riepilogo{flex:1;min-height:0;display:grid;margin-top:12px;gap:14px;
  grid-template-columns:minmax(280px,360px) 1fr;
  grid-template-rows:auto minmax(0,1fr)}
.ri-testa{grid-column:1/-1;display:flex;align-items:center;gap:16px}
.ri-testa p{margin:0;flex:1;font-size:13px;line-height:1.5;color:var(--ink-2)}
.ri-apri{flex:none;display:inline-flex;align-items:center;gap:8px;
  padding:8px 14px;border-radius:999px;border:1px solid var(--line-2);
  background:var(--panel);color:var(--brand);font-size:13px;font-weight:700;
  cursor:pointer}
.ri-apri:hover{border-color:var(--brand);background:var(--zebra)}
.ri-apri svg{width:15px;height:15px}

.ri-dati{min-height:0;overflow-y:auto;padding-right:4px;
  display:flex;flex-direction:column;gap:10px}
.ri-sez{border:1px solid var(--line);border-radius:11px;background:var(--velo)}
.ri-sez h3{display:flex;align-items:center;justify-content:space-between;gap:8px;
  margin:0;padding:9px 11px;border-bottom:1px solid var(--line);
  font-size:10.5px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;
  color:var(--ink-2)}
.ri-sez h3 button{flex:none;padding:4px 10px;border-radius:999px;cursor:pointer;
  border:1px solid var(--line-2);background:var(--panel);color:var(--brand);
  font-family:inherit;font-size:11.5px;font-weight:700;text-transform:none;
  letter-spacing:0}
.ri-sez h3 button:hover{border-color:var(--brand);background:var(--zebra)}
.ri-sez dl{margin:0;padding:3px 11px 9px}
.ri-sez dl > div{display:flex;gap:10px;padding:5px 0;border-top:1px solid var(--line)}
.ri-sez dl > div:first-child{border-top:0}
.ri-sez dt{flex:none;width:42%;font-size:12px;color:var(--muted)}
.ri-sez dd{flex:1;margin:0;font-size:13px;font-weight:600;color:var(--ink);
  word-break:break-word}

.ri-pdf{min-height:0;width:100%;height:100%;border:1px solid var(--line);
  border-radius:12px;background:var(--sunken)}


/* ---- the signature ---- */
.is-firme{margin-top:20px;display:flex;flex-direction:column;gap:16px;max-width:640px}
.fi-box{border:1px solid var(--line);border-radius:12px;background:var(--panel);
  overflow:hidden}
.fi-cima{display:flex;align-items:center;justify-content:space-between;
  padding:10px 14px;border-bottom:1px solid var(--line);
  font-size:12px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;
  color:var(--muted)}
.fi-pulisci{border:0;background:none;cursor:pointer;font-family:inherit;
  font-size:12px;color:var(--brand);letter-spacing:0;text-transform:none}
/* touch-action:none, or the finger that signs scrolls the page
   instead of leaving a mark. */
.fi-tela{display:block;width:100%;height:150px;touch-action:none;cursor:crosshair}
.fi-riga{height:1px;margin:0 22px 18px;background:var(--line-2)}

.is-invio{margin-top:22px}
.is-invia{padding:14px 26px;border:0;border-radius:11px;cursor:pointer;
  background:var(--brand);color:var(--on-brand);font-family:inherit;
  font-size:16px;font-weight:600;transition:background .14s,opacity .14s}
.is-invia:hover:not([disabled]){background:var(--brand-2)}
.is-invia[disabled]{opacity:.45;cursor:default}

/* THE WHOLE WIDTH OF THE PANEL. A ceiling of 640px comes from the
   readability rule for long prose, but here there are two lines of
   prose: what it gives is a thin column of text in a panel twice as
   wide, with half the panel empty on the right. */
.is-fatto{max-width:none}
.is-fatto h2{font-size:23px;font-weight:600;color:var(--up)}
.is-fatto p{margin-top:10px;font-size:15px;line-height:1.6;color:var(--ink-2)}
.is-scarica{display:inline-block;margin-top:18px;padding:11px 18px;border-radius:10px;
  border:1px solid var(--brand);color:var(--brand);font-size:14.5px;
  text-decoration:none}

/* WHEN THE SENDING FAILS. The green title of "iscrizione inviata"
   becomes an ordinary title and this panel appears: the same red as
   the warnings about the fees, because it says the same thing: read
   this before closing the page.
   Two roads, not one: trying again (a home connection drops and comes
   back) and sending it by mail (if the service is down, trying again
   is no use at all). With one road only, whoever finds it closed is
   stuck. */
.is-guaio{margin-top:16px;padding:14px 16px;border-radius:11px;
  border:1px solid var(--down);background:var(--down-fill)}
.is-guaio p{margin:0;color:var(--ink);font-size:15px;line-height:1.5}
.is-guaio p + p{margin-top:7px}
.is-guaio-tasti{display:flex;align-items:center;gap:10px;margin-top:12px;flex-wrap:wrap}
.is-riprova{padding:10px 18px;border-radius:10px;border:0;cursor:pointer;
  background:var(--brand);color:var(--on-brand);
  font-family:inherit;font-size:14.5px;font-weight:600}
.is-riprova:disabled{opacity:.6;cursor:default}
.is-perposta{padding:10px 18px;border-radius:10px;
  border:1px solid var(--line);color:var(--ink-2);
  font-size:14.5px;text-decoration:none}

/* ---- the foot, which leads forward and back ---- */
.is-piede{flex:none;display:flex;align-items:center;gap:16px;
  padding:14px 28px;border-top:1px solid var(--line);background:var(--panel)}
.is-piede .err{flex:1;min-height:0;text-align:center}
.is-indietro,.is-avanti{padding:11px 22px;border-radius:10px;cursor:pointer;
  font-family:inherit;font-size:15px;font-weight:600;transition:background .14s}
.is-indietro{border:1px solid var(--line);background:transparent;color:var(--ink-2)}
.is-indietro:hover{background:var(--zebra)}
.is-avanti{border:0;background:var(--brand);color:var(--on-brand);margin-left:auto}
.is-avanti:hover{background:var(--brand-2)}

/* ---- the date: an ordinary box, a calendar on request ----
   On the board too the date is typed: it is faster than any calendar,
   and whoever wants the calendar has the icon. The real picker sits
   under the button, invisible, and opens only from there. */
.cal{position:relative}
.cal input[type="text"]{padding-right:44px}
.cal-apri{position:absolute;right:4px;top:calc(50% + 2.5px);transform:translateY(-50%);
  display:grid;place-items:center;width:34px;height:34px;padding:0;cursor:pointer;
  border:0;border-radius:8px;background:transparent;color:var(--muted)}
.cal-apri:hover{background:var(--zebra);color:var(--brand)}
.cal-apri svg{width:18px;height:18px}
.cal-vero{position:absolute;right:4px;top:calc(50% + 2.5px);transform:translateY(-50%);
  width:34px;height:34px;opacity:0;pointer-events:none}

/* ---- the browser's autofill ----
   The browser paints the boxes it fills in itself, and its light
   ground knows nothing of the dark theme. The ground cannot be
   changed, but an inner shadow as tall as the box covers it. */
.cmp input:-webkit-autofill,
.cmp input:-webkit-autofill:hover{
  -webkit-text-fill-color:var(--ink);caret-color:var(--ink);
  -webkit-box-shadow:0 0 0 60px var(--sunken) inset;
  box-shadow:0 0 0 60px var(--sunken) inset;
  transition:background-color 9999s ease-in-out 0s}
.cmp input:-webkit-autofill:focus{
  -webkit-box-shadow:0 0 0 60px var(--panel) inset;
  box-shadow:0 0 0 60px var(--panel) inset}

/* ---- the list of what is missing, on the send button ---- */
.err-elenco{margin:6px 0 0;padding:0;list-style:none;text-align:left}
.err-elenco li{padding:5px 0;border-top:1px solid var(--line);
  font-size:12.5px;line-height:1.45}
.err-elenco li:first-child{border-top:0}
.err-elenco button{padding:2px 9px;margin-right:2px;border-radius:999px;cursor:pointer;
  border:1px solid var(--down);background:transparent;color:var(--down);
  font-family:inherit;font-size:11.5px;font-weight:700}

/* ---- the Avanti button switched off ----
   Opacity is not enough: a button switched off has to stop looking
   pressable, so it also loses the solid colour and the cursor. */
.is-avanti:disabled{background:var(--line-2);color:var(--muted);
  cursor:not-allowed;box-shadow:none}
.is-avanti:disabled:hover{background:var(--line-2)}

/* ---- the question about the second parent ----
   IT IS WRITTEN OUT IN FULL, including the things a <dialog> would
   have already. This page does not load app/modale.css (the list of
   stylesheets is declared by hand, and that one is not in it) so the
   panel comes with nothing on it: propped up at the top left, with
   the page behind it still in focus. The two lines that put it in the
   middle (inset and margin:auto) are usually given by the browser's
   stylesheet, but the site's normalisation zeroes the margins and
   carries them away. */
.dlg-chiedi{position:fixed;inset:0;margin:auto;
  width:min(440px,92vw);max-width:min(440px,92vw);max-height:88vh;
  padding:0;overflow:hidden;
  border:1px solid var(--edge);border-radius:16px;
  background:var(--panel);color:var(--ink);box-shadow:var(--shadow)}
.dlg-chiedi[open]{display:flex;flex-direction:column}
/* The veil that dims the page behind: without it, it is not clear
   that the rest is waiting for an answer. */
.dlg-chiedi::backdrop{background:var(--scrim)}
.dlg-chiedi .dlg-head{flex:none;padding:16px 24px 0}
.dlg-chiedi .dlg-head b{display:block;font-size:18px;font-weight:800;
  letter-spacing:-.01em;color:var(--ink)}
.dlg-chiedi .dlg-body{padding:10px 24px 4px}
.dlg-chiedi .dlg-body p{margin:0;font-size:14.5px;line-height:1.6;color:var(--ink-2)}
.dlg-azioni{display:flex;gap:10px;justify-content:flex-end;padding:18px 24px 20px}
.dlg-azioni button{padding:11px 18px;border-radius:10px;cursor:pointer;
  font-family:inherit;font-size:14.5px;font-weight:700}
.dlg-no{border:1px solid var(--line-2);background:transparent;color:var(--ink-2)}
.dlg-no:hover{border-color:var(--brand);color:var(--brand)}
.dlg-si{border:0;background:var(--brand);color:var(--on-brand)}

/* The dropdown for the second parent's role is not touched: it is the
   counterpart of the one chosen for the first. Switched off, it shows
   that it is a piece of data, not a question. */
.bl-testa select:disabled{opacity:1;color:var(--ink-2);
  background-color:var(--sunken);background-image:none;
  border-color:var(--line);padding-right:12px;cursor:default}

/* ---- the questions of a consent, one at a time ---- */
.is-scelta[hidden]{display:none !important}
.is-voci{display:flex;align-items:center;gap:7px;margin-bottom:10px}
.is-voce{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;
  border:1px solid var(--line-2);background:transparent;color:var(--muted);
  font-family:inherit;font-size:12px;font-weight:700;cursor:pointer}
.is-voce.fatto{border-color:var(--up);color:var(--up)}
.is-voce.on{border-color:var(--brand);background:var(--me-fill);color:var(--brand)}

/* The question that arrives: it comes in from the right, like a
   screen moving forward. It serves to show that the tap did
   something. */
@keyframes is-entra{from{opacity:0;transform:translateX(16px)}to{opacity:1;transform:none}}
.is-scelta.entra{animation:is-entra .24s cubic-bezier(.2,.7,.3,1)}
@media (prefers-reduced-motion:reduce){
  .is-scelta.entra{animation:none}
}

/* On the board the panel rises only a little and lightens, which is
   enough to make it read as something new and not as a part of the
   page that was there already. */
@keyframes dlg-appare{from{opacity:0;transform:translateY(10px) scale(.98)}to{opacity:1;transform:none}}
@keyframes dlg-velo{from{opacity:0}to{opacity:1}}
.dlg-chiedi[open]{animation:dlg-appare .2s ease-out}
.dlg-chiedi[open]::backdrop{animation:dlg-velo .2s ease}
@media (prefers-reduced-motion:reduce){
  .dlg-chiedi[open],.dlg-chiedi[open]::backdrop{animation:none}
}

/* ---- the card closed until the role is chosen ---- */
.gr input:disabled,.gr select:disabled,.gr button:disabled{
  opacity:.5;cursor:not-allowed;background:var(--sunken)}
.bl-attesa{margin:8px 0 0;font-size:13.5px;line-height:1.5;color:var(--brand);
  font-weight:600}
.bl-attesa[hidden]{display:none}

/* ============================================================
   THE CHOICE OF GROUP, THE DOOR, THE FEES
   ============================================================ */
/* Wider: two cards side by side inside seven hundred pixels stay two
   thin columns of text. At nine hundred and fifty each is wide enough
   to read its line of description without wrapping. */
.sc-scheda,.po-scheda{width:100%;max-width:950px;margin:0 auto;
  max-height:min(85vh, 100%)}
/* THE THREE SCREENS ARE THE SAME HEIGHT. The choice of group and the
   two doors are the same panel at two moments (which group, and then
   the password of that group) and a jump in size on the way across
   reads as "I have ended up somewhere else".

   THE NUMBER IS MEASURED, NOT CHOSEN: 508 is the natural height of
   the tallest of the three, that is the choice with the two cards.
   The doors, which of themselves would make 476, stretch up to it;
   the choice stretches by nothing, and that is why its bottom edge is
   exact.
   IT HAS TO BE MEASURED AGAIN EVERY TIME THE PADDING CHANGES. A
   number left behind by a change of padding shows as pixels of
   emptiness at the foot of a screen that should have none. If one day
   the bottom looks empty again, this is the number to redo. */
/* NEVER MORE THAN 85vh, AND NEVER MORE THAN WHAT IS LEFT.
   ============================================================
   On a short screen (a 1366x620 laptop, a window that is not full
   screen) a panel 560 tall plus the header plus the bar of logos do
   not fit: the panel breaks out below and above, ending up behind the
   menu bar.

   THREE MEASURES, AND THE SMALLEST WINS. Each covers a case the other
   two do not see:
     508px  what the panel wants when there is room;
     85vh   the ceiling asked for: never more than five sixths of the
            screen;
     100%   what is REALLY left inside the board, that is the screen
            minus header, bar of logos and foot.
   The 100% is not a duplicate of the 85vh: at a height of 620 the
   85vh is worth 527, but there is less than that free, and a panel of
   527 centred in 440 spills above and below. With the 85vh alone the
   measure comes out "within the rules" and the panel is cut all the
   same.

   AND A max-height IS NOT ENOUGH. By the rules of CSS the minimum
   wins over the maximum: leaving min-height:508px the panel stays 508
   tall whatever ceiling is put on it. It has to be bent too, with the
   same min(). */
.sc-scheda{min-height:min(508px, 85vh, 100%);max-height:min(85vh, 100%);
  display:flex;flex-direction:column}
/* THE BODY SCROLLS INSIDE THE PANEL, like the contacts one.
   Since the panel has a ceiling (85vh, and in any case no more than
   what is left in the board) the content can be taller than the
   container: at 1366x620 the panel stands at 441 and in here there is
   material for 519, that is seventy-eight pixels ending up under the
   border. And they do not look cut: they disappear, because what cuts
   them is the panel.

   BOTH LINES ARE NEEDED. overflow-y:auto on its own is not enough: in
   a flexible column a child does not go below its natural height
   unless it is told min-height:0, so instead of tightening and
   scrolling it keeps growing and spilling out.
   It is the same pair that makes .ct-corpo scroll, and the same one
   written for the entries of the dropdown. */
.sc-corpo{flex:1;min-height:0;overflow-y:auto}
.sc-corpo{display:flex;flex-direction:column}
/* ONE SINGLE BODY FOR BOTH SCREENS: the door has no .po-corpo of its
   own. Its panel carries both classes (.sc-scheda .po-scheda) but
   inside it there is the same .sc-corpo as the choice of group.

   THE SAME PADDING AS THE CONTACTS BODY, 26/28/22. Two panels of the
   same width, one next to the other in the menu, with two different
   margins inside them move the content by sixteen pixels on the way
   from one to the other. It is the measure that holds the two pages
   together, not a value chosen for this one. */
/* THE TOP PADDING IS 14 AND NOT 26, AND IT MEANS THE SAME THING.
   On the contacts page the first thing inside the body is the border
   of a card, and there the border of the box IS what is seen: 26 of
   padding make 26 of gap. Here the first thing is a title, and above
   the letters of a 31-pixel title there are twelve pixels of nothing
   (half the leading plus the space the face leaves above the
   capitals) which belong to the box but are not seen. With 26 on
   both, the box is even and the eye sees 38 against 26.
   The number that counts is the one of the INK: 26 from the hairline
   to the top of the letters, as on the contacts page. At the bottom
   the same thing the other way round, by three pixels: the letters go
   below the baseline and eat part of the padding, so 19 instead of 22
   to make 23 of real emptiness.
   The twelve pixels do not change with the screen because the title
   stays at 31, so on short screens the same amount is always taken
   away. */
.sc-corpo{--lato:28px;padding:14px var(--lato) 19px;
  /* A body that scrolls vertically must not scroll sideways: the
     figure on the door spills out on purpose, and it is the panel
     that cuts it. */
  overflow-x:hidden}

/* SHORT SCREENS, as on the contacts page: below a certain height the
   padding tightens rather than letting the body be the first thing to
   scroll. */
@media (max-height:780px){
  .sc-corpo{--lato:20px;padding:6px var(--lato) 13px}
}
.sc-corpo h1{margin:0;font-size:31px;font-weight:800;
  letter-spacing:-.025em;color:var(--ink)}
/* No ceiling on the line: the card is nine hundred and fifty pixels
   wide and wrapping halfway leaves a hole on the right that looks
   like a layout mistake. It wraps when the room runs out. */
.sc-guida{margin:11px 0 0;font-size:16px;line-height:1.65;
  color:var(--ink-2)}
.sc-guida b{font-weight:700;color:var(--ink)}

/* Two cards, not two list entries: the choice is between two
   different things and it shows before it is read. */
/* The line that introduces the two cards: it stays attached to them,
   not to the paragraph above, because it is the question the cards
   answer. */
.sc-chiedi{margin:26px 0 12px;font-size:16px;font-weight:700;color:var(--ink)}
.sc-carte{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:0}
.sc-carta{position:relative;overflow:hidden;
  display:flex;flex-direction:column;gap:9px;padding:26px 24px;
  border:1px solid var(--line-2);border-radius:14px;background:var(--velo);
  text-decoration:none;transition:border-color .14s,background .14s}
.sc-carta:hover{border-color:var(--brand);background:var(--zebra)}

/* THE PLAYER IN WATERMARK, in the right-hand half of the card.
   The same job as the shapes of the 5x1000 (app/home.css) and for the
   same reason: the two files are WHITE ON NOTHING, solid silhouettes
   and not line drawings, and white in watermark shows only on the
   dark. Used as images they would disappear on the light theme. Used
   as a MASK it is they that give the shape and the colour is put
   there by --sagome, which is already tuned to sit under the text on
   both grounds.
   Only on the board: this sheet is already inside (min-width:900px),
   and on the phone the card is as tall as its own text: a figure
   would have nowhere to stand there.
   TALLER THAN THE CARD and cut by the edge, like the watermark of the
   homepage and the sparrow behind the result card: a figure that fits
   whole looks laid on top, a cut one looks like the ground the text
   is written on.
   The text has to be lifted: a positioned layer covers content in
   flow, and without the last line the words would end up
   underneath. */
.sc-carta::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:var(--sagome);
  -webkit-mask-repeat:no-repeat; mask-repeat:no-repeat;
  -webkit-mask-position:right -18px bottom -14px;
          mask-position:right -18px bottom -14px;
  -webkit-mask-size:auto 132%; mask-size:auto 132%;
}
.sc-minivolley::before{
  -webkit-mask-image:url("/volleysilea-iscrizioni-s3-minivolley.f4d9387d.png");
          mask-image:url("/volleysilea-iscrizioni-s3-minivolley.f4d9387d.png");
}
.sc-agonistico::before{
  -webkit-mask-image:url("/volleysilea-iscrizioni-settore-agonistico.46beea70.png");
          mask-image:url("/volleysilea-iscrizioni-settore-agonistico.46beea70.png");
}
.sc-carta > *{position:relative}

/* THE PAIR OF BUTTONS ON THE DOOR: one goes back on the left, forward
   on the right. It is the same pair as the foot of the form
   (.is-indietro / .is-avanti) and it takes its measures and colours:
   whoever passes through here sees the same gesture twice, and the
   second time recognises it.
   The way back is a link and not a button (it leads to another
   address) but it dresses as a button, because from there one goes
   back as from anywhere else in the form. */
/* THE SAME HEIGHT AND AS WIDE AS THE BOX ABOVE. Two buttons side by
   side with different paddings come out three pixels apart in height,
   which shows perfectly well; and a pair narrower than the field
   above looks propped up there instead of in a column with it.
   The height is evened out by stretch (which hides it from the sum
   of the paddings, that with a border on one side only would never
   add up) and the width is filled by the main button, which takes
   what is left over. */
.po-tasti{display:flex;align-items:stretch;gap:12px;margin-top:18px}
.po-indietro{flex:none;display:inline-flex;align-items:center;justify-content:center;
  gap:7px;padding:0 22px;border-radius:11px;
  border:1px solid var(--line);background:transparent;color:var(--ink-2);
  font-size:15.5px;font-weight:700;text-decoration:none;
  transition:background .14s}
.po-indietro svg{width:16px;height:16px;transition:transform .16s ease-out}
.po-indietro:hover{background:var(--zebra)}
.po-indietro:hover svg{transform:translateX(-3px)}
.po-tasti .po-entra{flex:1;margin-top:0}
.sc-nome{font-size:22px;font-weight:800;letter-spacing:-.015em;color:var(--brand)}
.sc-che{display:flex;flex-direction:column;gap:5px;font-size:14.5px;
  line-height:1.5;color:var(--ink-2)}
.sc-che span{position:relative;padding-left:15px}
.sc-che span::before{content:"";position:absolute;left:0;top:.58em;
  width:5px;height:5px;border-radius:50%;background:var(--brand)}
.sc-vai{display:inline-flex;align-items:center;gap:7px;margin-top:6px;
  align-self:flex-start;font-size:13.5px;font-weight:700;color:var(--brand)}
/* THE ARROW MOVES, NOT THE WORDS. Under the mouse the whole entry
   sliding to the right carries its margin with it: two words that
   move are a text that dances. Moving the sign of direction alone
   says the same thing (that way lies forward) and it costs an
   element nobody is reading.
   Four pixels: enough to be seen, not so much that the card looks as
   if it were breaking. */
.sc-vai svg{width:16px;height:16px;transition:transform .16s ease-out}
.sc-carta:hover .sc-vai svg{transform:translateX(4px)}
/* THE HAIRLINE SITS IN THE MIDDLE, really: the same space above and
   below. It is not hung on the bottom of the panel with an automatic
   margin, which would push it far from the content and glue it to its
   own text, two different distances where the eye looks for one. */
/* THE DOOR HANDS OUT THE SPARE ROOM, and so its hairline falls where
   the one of the choice of group falls.
   ============================================================
   The two screens are the same height (508) but the door has less
   inside it: thirty-two pixels are left free at the bottom, and the
   hairline ends up thirty-one pixels higher than on the other one.
   Crossing from one to the other, the line moves, and that is the
   thing most noticed between two screens that have to look like the
   same one.

   space-between and not an automatic margin on the note: that would
   put all thirty-two pixels in one single hole, above the hairline.
   This way the spare room divides between the four gaps (eight
   pixels each) and what breathes is the subtitle, the benefits, the
   field and the buttons together.

   IT HOLDS FOR BOTH SCREENS. Below 780 pixels of window the padding
   of the body tightens and frees some thirty pixels on the other one
   too; with the rule on one of the two only, at that height the two
   hairlines part again by fourteen pixels. On both, the last child
   leans on the bottom of both and the hairlines stay together at
   every size. */
.sc-corpo{justify-content:space-between}

.sc-nota{margin:30px 0 0;padding-top:30px;border-top:1px solid var(--line);
  font-size:13.5px;line-height:1.6;color:var(--muted)}
.sc-nota a{color:var(--brand);font-weight:600}

/* THE PLAYER ON THE DOOR TOO, in the emptiness on the right.
   The password screen has one single question and a field four
   hundred and sixty wide: to its right four hundred pixels of white
   are left that say nothing. The same figure as the group card fills
   them, and whoever arrives recognises that they are still on their
   own road.
   IT IS ATTACHED TO THE HAIRLINE, not to a distance from the bottom.
   The hairline is the top border of the note, so the figure hangs
   from the note and grows upwards: if one day that line wrapped once
   more, the hairline moves and the figure follows it by itself.
   The height is the one measured between the hairline and the top of
   the title: the ball ends where "Iscrizione" begins, which is the
   point where the emptiness begins. Wide enough to hold it without
   cutting it and anchored to the right, where the panel cuts it. */
.po-scheda{position:relative;overflow:hidden}
.po-scheda .sc-nota{position:relative}
/* THE OVERHANG IS THE PADDING, taken from the variable and not
   written out by hand. A number written by hand falls behind the day
   the padding changes: the figure then sticks out past the panel by
   the difference, and with a body that scrolls those pixels are not
   cut: they become a horizontal scrollbar. Tied to the variable, the
   figure follows the padding even when it tightens on short
   screens. */
.po-scheda .sc-nota::before{
  content:"";position:absolute;bottom:100%;right:calc(var(--lato) * -1);
  width:430px;height:351px;pointer-events:none;
  background:var(--sagome);
  -webkit-mask-repeat:no-repeat; mask-repeat:no-repeat;
  -webkit-mask-position:right bottom; mask-position:right bottom;
  -webkit-mask-size:auto 100%; mask-size:auto 100%;
}
.po-scheda.sc-minivolley .sc-nota::before{
  -webkit-mask-image:url("/volleysilea-iscrizioni-s3-minivolley.f4d9387d.png");
          mask-image:url("/volleysilea-iscrizioni-s3-minivolley.f4d9387d.png");
}
.po-scheda.sc-agonistico .sc-nota::before{
  -webkit-mask-image:url("/volleysilea-iscrizioni-settore-agonistico.46beea70.png");
          mask-image:url("/volleysilea-iscrizioni-settore-agonistico.46beea70.png");
}

/* ---- the door ----
   ONE SINGLE QUESTION, with air around it. Whoever arrives here has
   just read on the page before what the fee covers, and the fees in
   full arrive right after, at the first step, where they have to be
   accepted: here they would only be filling. */
.po-form{margin-top:34px;max-width:460px}
.po-form label{display:block;margin-bottom:9px;font-size:16px;
  font-weight:700;color:var(--ink)}
.po-form input{width:100%;padding:13px 14px;border-radius:10px;
  border:1px solid var(--line-2);background:var(--sunken);color:var(--ink);
  font-size:16px;font-family:inherit;letter-spacing:.02em}
.po-form input:focus{outline:0;border-color:var(--brand);background:var(--panel);
  box-shadow:0 0 0 3px var(--me-fill)}
.po-entra{margin-top:18px;padding:14px 30px;border:0;border-radius:11px;
  background:var(--brand);color:var(--on-brand);cursor:pointer;
  font-family:inherit;font-size:15.5px;font-weight:700}

/* ---- the fees: the document laid out ----
   The same words as the circular, each with the weight of what it
   says. See src/pages/iscriviti.js for the why. */
.qt{margin-top:18px;display:flex;flex-direction:column;gap:34px}

/* THE FEE AND WHAT COMES WITH IT, in one single box: how much, what
   it is made of, and that it is owed in full even by withdrawing in
   November. Three things about the same figure, so they stay
   together. */
.qt-testa{padding:20px;border:1px solid var(--line-2);
  border-radius:14px;background:var(--velo)}
.qt-eti{display:block;font-size:11.5px;font-weight:800;letter-spacing:.08em;
  text-transform:uppercase;color:var(--ink-2)}
.qt-riga-cifra{margin:8px 0 0;display:flex;align-items:baseline;
  flex-wrap:wrap;gap:11px}
.qt-cifra{font-size:38px;font-weight:800;letter-spacing:-.03em;
  line-height:1.05;color:var(--brand)}
/* The composition stands on the same line as the figure and smaller:
   it is a qualification, not a second amount. */
/* THE PARENTHESIS STANDS ON THE LINE OF THE FIGURE. With a
   line-height of 1.4 against the 1.05 of the big figure, the small
   text falls below the baseline and looks like a paragraph of its
   own. Same leading and alignment on the baseline: it is a
   qualification beside the number, which is what it is. */
.qt-dentro{font-size:16px;line-height:1;color:var(--ink-2)}

.qt-avviso{display:flex;align-items:flex-start;gap:10px;
  margin:16px 0 0;padding:13px 15px;
  border-radius:11px;border:1px solid var(--down);background:var(--panel);
  font-size:15.5px;line-height:1.45;font-weight:700;color:var(--ink)}
.qt-avviso svg{flex:none;width:19px;height:19px;margin-top:1px;color:var(--down)}

.qt-sez h3{margin:0 0 14px;font-size:13px;font-weight:800;
  letter-spacing:.07em;text-transform:uppercase;color:var(--brand)}

/* The two ways of paying, numbered: one chooses between two things,
   one does not read a paragraph that names them both. */
.qt-modo{display:flex;align-items:center;gap:11px}
.qt-num{flex:none;width:24px;height:24px;border-radius:50%;display:grid;
  place-items:center;background:var(--me-fill);color:var(--brand);
  font-size:12.5px;font-weight:800}
.qt-modo-t{font-size:15.5px;font-weight:700;color:var(--ink)}
.qt-oppure{margin:9px 0 9px 35px;font-size:15px;color:var(--ink-2)}

.qt-rate{display:grid;grid-template-columns:1fr 1fr;gap:14px;
  margin-top:12px}
/* The two cards have the same rows: label, figure, deadline. With one
   row more on one side they look like two different things. */
.qt-rata{display:flex;flex-direction:column;padding:16px;
  border:1px solid var(--line-2);border-radius:12px;background:var(--velo)}
.qt-rata .qt-riga-cifra{margin:5px 0 0;gap:7px}
.qt-rata .qt-cifra{font-size:23px;color:var(--ink)}
.qt-rata .qt-dentro{font-size:14px}
.qt-quale{font-size:11.5px;font-weight:800;letter-spacing:.07em;
  text-transform:uppercase;color:var(--ink-2)}
/* THE DEADLINE IS NOT A FOOTNOTE: "how much" and "by when" are the
   two halves of the same instruction. */
.qt-quando{margin-top:8px;font-size:15.5px;color:var(--ink)}
.qt-quando b{font-weight:800;white-space:nowrap}

/* WHERE TO SEND THE RECEIPT. The same shape as the warning about the
   fee (box, sign on the left, text alongside) but in the brand colour
   and not in red: it is an instruction to follow, not a clause to
   fear, and two red calls on the same page cancel each other out. */
.qt-manda{display:flex;align-items:center;gap:10px;
  margin:16px 0 0;padding:13px 15px;
  border-radius:11px;border:1px solid var(--line-2);background:var(--velo);
  font-size:15.5px;line-height:1.45;color:var(--ink)}
.qt-manda svg{flex:none;width:19px;height:19px;color:var(--brand)}
.qt-manda a{font-weight:800;color:var(--brand);word-break:break-word}

.qt-lista{margin:0;padding:0;list-style:none;display:flex;
  flex-direction:column;gap:10px}
.qt-lista li{position:relative;padding-left:26px;font-size:15.5px;
  line-height:1.5;color:var(--ink)}
.qt-lista li::before{content:"";position:absolute;left:2px;top:.3em;
  width:12px;height:6px;border-left:2px solid var(--up);
  border-bottom:2px solid var(--up);transform:rotate(-45deg)}

.qt-conto{margin:0;display:flex;flex-direction:column;gap:1px;
  border:1px solid var(--line-2);border-radius:12px;overflow:hidden}
.qt-conto-riga{display:grid;grid-template-columns:140px minmax(0,1fr);gap:18px;align-items:baseline;padding:13px 16px;
  background:var(--velo)}
.qt-conto-riga dt{font-size:11.5px;font-weight:800;letter-spacing:.08em;
  text-transform:uppercase;color:var(--ink-2)}
.qt-conto-riga dd{margin:0;font-size:15.5px;line-height:1.45;color:var(--ink)}
.qt-iban dd code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  font-size:18px;font-weight:700;letter-spacing:.05em;color:var(--ink);
  user-select:all;word-break:break-all}
.qt-riga{margin:0;font-size:15.5px;line-height:1.6;color:var(--ink)}

/* ---- what the fee covers, on the door ----
   IN A ROW, not in a column: they are three short entries and the
   line is nine hundred pixels wide. In a column they would take three
   rows to say what fills one, and would push the password box (the
   only thing to do here) sixty pixels away for nothing. */
.po-compreso{display:flex;flex-wrap:wrap;gap:6px 24px;
  margin:14px 0 0;padding:0;list-style:none}
.po-compreso li{position:relative;padding-left:15px;font-size:14.5px;
  line-height:1.5;color:var(--ink-2)}
.po-compreso li::before{content:"";position:absolute;left:0;top:.58em;
  width:5px;height:5px;border-radius:50%;background:var(--brand)}

/* A HIDDEN SHELL HAS TO DISAPPEAR FOR REAL. hidden is worth
   display:none, but it is a browser rule with specificity zero:
   anything that declares display on .shell.isc beats it, and the door
   stays on top of the form once it has been opened. It is the same
   trap as on the steps, and it is closed the same way. */
.shell.isc[hidden]{display:none !important}

/* The "scorri fino in fondo" notice: it stands beside the disabled
   tick and says why it is disabled. A disabled box with no
   explanation is a dead end. */
.is-scorri{display:flex;align-items:center;gap:8px;margin:8px 0 0;
  font-size:13.5px;font-weight:600;color:var(--brand)}
.is-scorri svg{width:16px;height:16px}
.is-scorri[hidden]{display:none}
.is-visto input:disabled{opacity:.45}

/* THE DECLARATION BEING TICKED IS NOT A FOOTNOTE: it is the sentence
   with which a family takes on five hundred euros of commitment, so
   it does not stand in the smallest size on the screen. */
.is-consenso[data-consenso=quote] .is-visto span{font-size:15.5px;
  line-height:1.5;color:var(--ink)}
.is-guida .qt-quando-che{display:block;font-weight:700;color:var(--ink)}
.is-guida span{display:block}

/* The two ways out of here: carrying the copy away, or leaving. The
   form is no longer reachable (the index is switched off) so a
   declared door is needed, otherwise all that is left is the
   browser's back button, which here would reopen a screen that no
   longer holds. */
.is-fatto-tasti{display:flex;align-items:center;gap:12px;margin-top:18px;flex-wrap:wrap}
.is-fatto-tasti .is-scarica{margin-top:0}
.is-torna{padding:11px 18px;border-radius:10px;border:1px solid var(--line);
  color:var(--ink-2);font-size:14.5px;text-decoration:none}
.is-torna:hover{background:var(--zebra)}

/* WHEN SOMETHING IS MISSING AT THE REVIEW. In place of the document
   the list of what is missing appears: the same shape as the warning
   that comes out on pressing Invia, because it is the same question
   asked one step earlier. */
.ri-manca{margin:0;padding:18px 20px;border-radius:12px;
  border:1px solid var(--down);background:var(--down-fill)}
.ri-manca strong{display:block;margin-bottom:8px;color:var(--ink);font-size:15px}

}

/* tel/tokens.css */
@media (max-width:899px){
/* ============================================================
   THE PHONE PALETTE: the one for showing, not another house.
   ============================================================
   These values are NOT the ones in tokens.css. The two screens tune
   their greys differently: the board keeps rules and secondary text
   stronger (--line #B7CBD9) because it has to carry large panels and
   dense tables, while the phone keeps them much fainter
   (--line #E2ECF2) because at 390px a dark rule becomes a cage.
   Tipping one onto the other is not a tidy up, it is a redesign.

   The WAY the ground is named changes too. The board says --panel and
   --ground, the phone says --paper and --surface. Different names for
   the same idea, listed in docs/DIVERGENZE.md: until the club picks
   one, both stay.

   THREE STATES, as everywhere: bare :root is the light one, the block
   inside prefers-color-scheme is for whoever has a dark system and has
   not chosen, :root[data-theme="dark"] is for whoever has chosen. A
   token declared in the light and forgotten in one of the two darks
   stays light at night, which is the classic unreadable page defect:
   tests/css.js checks this sheet too.

   The (max-width:899px) band is not written here: build/build.js adds
   it, together with the order.                                       */

:root{
  --ink:      #020909;
  --ink-2:    #40525C;
  --brand:    #0377BD;
  --on-brand: #FFFFFF;
  --accent:   #52B2D0;

  --paper:    #FFFFFF;
  --surface:  #F4F8FB;
  --sunken:   #EAF1F6;
  --line:     #E2ECF2;
  --line-2:   #D3E1EA;
  /* THE TONE OF THE DOTTED RULE. A dotted rule does not show like a
     solid one: fewer than half its pixels are lit, so at equal colour
     it comes out lighter than it is. This tone is one step stronger
     than --line-2 in both themes, which is the amount that makes a
     dotted line weigh as much as a solid --line-2 one. */
  --tratteggio: #BACDDA;
  /* DARK ENOUGH TO READ: --faint stays above 4.5:1 and --muted above
     7:1, the two AA thresholds for text. A grey under 3:1 on light
     paper is not "readable with effort", it is not there at all, and
     the phone is the screen that needs more contrast and not less:
     outdoors, with the display dimming itself. */
  --muted:    #4C5E6A;
  --faint:    #5F7280;

  /* Header and drawer follow the theme like everything else. The rule
     under the header is lighter than on the board: there it separates
     two panels, here it only separates the top from the content. */
  --head:      #FFFFFF;
  --head-fg:   #0B1A22;
  --head-dim:  #54697A;
  --head-line: #DCE8F0;
  --menu-line: #E2ECF2;

  --up:       #12885A;
  --down:     #C6412F;
  /* The LIGHT green and red, for the win/loss label in the agenda
     card. Same idea as the board (styles/tokens.css), and in the light
     theme the same values too, because the starting green and red are
     the same here. In the dark they are not: there the phone lightens
     --up and --down and the patch under them has to follow. Solid and
     not veiled, since a veil leans on what is under it and here there
     are two different grounds (the paper and the day strip).
     Measured contrast of the text on top: 3,4:1 green and 3,7:1 red in
     the light, 5,4:1 and 4,7:1 in the dark, better in the dark because
     there the phone lightens --up and --down.
     CAREFUL: tests/theme.js resolves the tokens from the BOARD
     palette, so nothing measures these four lines on its own. They are
     computed by hand, and have to be redone by hand if anyone touches
     --up or --down above. */
  --up-fill:   #C9E7D8;
  --down-fill: #F6D6D0;

  --silea-fill: rgba(164,210,230,.16);
  --set-win:    rgba(164,210,230,.55);
  --bird-op:  .40;
  /* MINIMUM height of the Silea card: the same with a result, with a
     countdown and with a bye. Left to itself the card comes out ~206px
     with a result, ~187px waiting and ~150px on a bye, so changing
     matchday makes it dance and the whole list below with it. On the
     board the same number is 270px, because the five column box score
     fits in there as well. */
  --hero-h:   212px;
  --scrim:    rgba(2,9,9,.45);
  /* The ground the app rests on. It never shows, since the screen
     covers all of it, but if one day something did not reach the
     bottom, what lies under is this and not the white of the
     browser. */
  --stage:    #DCE7EE;
}

@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    --ink:      #EFF6F9;
    --ink-2:    #BCCAD2;
    --brand:    #52B2D0;
    --on-brand: #03151C;
    --accent:   #52B2D0;

    --paper:    #0B1317;
    --surface:  #050C0F;
    --sunken:   #101B21;
    --line:     #182831;
    --line-2:   #22343E;
    --tratteggio: #3E525F;
    --muted:    #7F949F;
    --faint:    #5D717C;

    --head:      #020909;
    --head-fg:   #FFFFFF;
    --head-dim:  #7E939F;
    --head-line: #122029;
    --menu-line: #16232A;

    /* In the dark the green and red of the board would disappear into
       the ground: here they gain brightness. It is the only point
       where the two layouts disagree even on semantic colours. */
    --up:       #2AAE74;
    --down:     #E0604D;
    /* In the dark "light" means dark: the patch has to stay under the
       green and red lightened above, not over them. */
    --up-fill:   #0F2A21;
    --down-fill: #2E1A15;

    --silea-fill: rgba(82,178,208,.10);
    --set-win:    rgba(82,178,208,.20);
    --bird-op:  .10;
    --scrim:    rgba(0,0,0,.62);
    --stage:    #04090C;
  }
}

:root[data-theme="dark"]{
  --ink:      #EFF6F9;
  --ink-2:    #BCCAD2;
  --brand:    #52B2D0;
  --on-brand: #03151C;
  --accent:   #52B2D0;

  --paper:    #0B1317;
  --surface:  #050C0F;
  --sunken:   #101B21;
  --line:     #182831;
  --line-2:   #22343E;
  --tratteggio: #3E525F;
  --muted:    #7F949F;
  --faint:    #5D717C;

  --head:      #020909;
  --head-fg:   #FFFFFF;
  --head-dim:  #7E939F;
  --head-line: #122029;
  --menu-line: #16232A;

  --up:       #2AAE74;
  --down:     #E0604D;
  --up-fill:   #0F2A21;
  --down-fill: #2E1A15;

  --silea-fill: rgba(82,178,208,.10);
  --set-win:    rgba(82,178,208,.20);
  --bird-op:  .10;
  --scrim:    rgba(0,0,0,.62);
  --stage:    #04090C;
}

}

/* tel/base.css */
@media (max-width:899px){
/* ============================================================
   THE GROUND OF THE PHONE SCREEN
   ============================================================
   There is no frame around the screen: the ground and the clipping are
   shared between the body of the page and #schermo.

   NOTHING SCROLLS AT PAGE LEVEL. Only the middle strip scrolls, inside
   the app, and that is what makes the screen feel like an application
   and not a document. With a scrolling body the sheets rising from the
   bottom would drag the page along under them, and the sponsor bar at
   the foot would slide away.

   This sheet also redoes the reset (*, button, :focus-visible):
   app/base.css does it for the board and is bounded above 900px, so it
   does not reach down here. The four lines are not identical to the
   board ones: the type is 16px at line height 1,4, not 17 and 1,5. */

*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%}
html,body{height:100%;overflow:hidden}

body{
  display:flex;flex-direction:column;
  background:var(--stage);
  color:var(--ink);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  font-size:16px;
  line-height:1.4;
  -webkit-font-smoothing:antialiased;
  -webkit-tap-highlight-color:transparent;
}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}
.u-num{font-variant-numeric:tabular-nums}
.lbl{
  font-size:10px;font-weight:700;letter-spacing:.09em;
  text-transform:uppercase;color:var(--muted);
}

/* #schermo takes whatever is left under the header and passes it on
   unchanged to the app. overflow:hidden: a panel that overflows
   overflows inside its own strip and does not lengthen the page. The
   sheets rising from the bottom are untouched, being fixed, so the
   clipping of an ancestor does not reach them. */
#schermo{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}

.app{flex:1;min-height:0;display:flex;flex-direction:column;background:var(--surface)}

.scroll{
  flex:1;min-height:0;
  overflow-y:auto;overflow-x:hidden;
  overscroll-behavior-y:contain;
  -webkit-overflow-scrolling:touch;
  scroll-behavior:smooth;
}
/* One pixel tall and at the top of the scrolling strip: when it leaves
   the view, the header recomposes. One pixel and not zero, because an
   element with no height never intersects anything. */
#sentinel{height:1px}

/* The scrollbar, thinner than on the board: here the screen is 390 and
   ten pixels are a fortieth of the usable width. The rest (colours,
   radius, transparent frame) comes from styles/scorrimento.css and is
   not repeated. */
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-thumb{border-radius:5px;border-width:2px}

}

/* tel/testata.css */
@media (max-width:899px){
/* ============================================================
   THE HEADER, ON THE PHONE: corrections and the name that recomposes
   ============================================================
   The header is drawn by header.css, which belongs to every page, and
   below 900px it already draws it nearly as the phone wants: hammer on
   the left, brand in the middle, theme on the right, three columns
   44 · 1fr · 44. Four differences are left, and none of them is taste.

   1. --testa TALL IN ALL, hairline included, and with no padding.
      header.css puts min-height on the CONTENT and 4px of side
      padding: the hairline adds to it (one pixel across the width that
      pushes everything down) and the two icons slide 4px towards the
      middle. With box-sizing:border-box the height on the band takes
      in the hairline and the content stays a pixel lower. The
      min-height goes off with it, or it wins.
   2. NOT sticky. The page does not scroll here, only the middle strip
      does: a sticky would have nothing to follow.
   3. THE WEIGHTS. The shared chrome works on the board scale, where
      the highest declared is 600; the phone writes brand and watermark
      at 800. It is one of the catalogued divergences
      (docs/DIVERGENZE.md): it is not unified, it is reproduced.
   4. The theme button carries the 20px icon like the other two, not
      the 19 of the board. Half a pixel a side, but it is half a pixel
      in the top right corner of every screen.

   The colour is declared on .top so the children inherit it: the
   competition name below sets none of its own, and without this line
   it would inherit --ink, which on the light theme is darker than
   --head-fg.                                                         */
.top{position:static;flex:none;height:var(--testa);color:var(--head-fg);overflow:hidden}
.top-in{height:100%;min-height:0;padding:0;position:relative}
.tema svg{width:20px;height:20px}

/* HALF A PIXEL, AND IT SHOWS.
   THE LINK IS AS BIG AS THE CREST, not as the column. .brand leads to
   the home page and is the middle cell of a 44 · 1fr · 44 grid: as a
   grid item it stretches across the whole middle column and takes the
   full height of the band, so a finger landing anywhere at the top (to
   scroll, or by mistake) leaves the page. A brand is tapped where the
   brand is seen: justify-self tightens it onto the content and the
   height drops to that of the crest. That leaves 76 by 56 pixels of
   target, well over the 44 a tappable thing has to measure.
   The two measurements are EVEN and so is the band: the brand centres
   on a whole pixel and its edges keep their colour. With odd
   measurements it would redraw half a pixel higher, and that is the
   difference the test finds first. */
.brand{height:var(--stemma);justify-self:center}

/* ------------------------------------------------------------------
   THE HEADER THAT RECOMPOSES
   Scrolling, the competition bar leaves the stage and its name
   recomposes in the middle of the header: whoever looks never loses
   sight of what is being read, and the matchday stays stuck below.

   The middle column here is .brand, which comes from the shared
   chrome: wrapping it would change it for the sponsor page too, for a
   piece one page needs. So the second layer overlaps instead, and
   left/right at 44px are exactly the two edges of the middle column.

   The class "collapsed" sits on the BODY: the header is outside
   #schermo, and lighting both layers with a single class takes a
   common ancestor.
   ------------------------------------------------------------------ */
.hdr-comp{
  /* The full height and not "top to bottom": it is the same box, and
     it overruns the content of the band by a pixel. With bottom:0 the
     box would be a pixel shorter and the name would centre half a
     pixel above the brand it replaces. */
  position:absolute;left:44px;right:44px;top:0;height:var(--testa);
  display:flex;align-items:center;justify-content:center;gap:6px;
  opacity:0;transform:translateY(8px);pointer-events:none;
  font-size:13.5px;font-weight:600;letter-spacing:-.005em;
  max-width:100%;padding:0 4px;
  transition:opacity .22s ease, transform .22s ease;
}
/* NEVER wrapping and never wider than the column: the FIPAV names
   carry the sponsor inside, and "3ª Divisione U16 · 25/26" at 13,5px
   barely fits. */
.hdr-comp .txt{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hdr-comp .chev{color:var(--head-dim);font-size:11px}
.brand{transition:opacity .22s ease, transform .22s ease}
body.collapsed .brand{opacity:0;transform:translateY(-8px)}
body.collapsed .hdr-comp{opacity:1;transform:none;pointer-events:auto}

}

/* tel/piede.css */
@media (max-width:899px){
/* ============================================================
   AT THE BOTTOM: SWITCH AND SPONSOR BAR
   ============================================================
   The Results/Table switch sits at the bottom and not at the top
   because the thumb reaches the bottom. For the same reason it is not
   in the drawer: it is the most frequent gesture of the screen.     */
.tabs{
  flex:none;
  background:var(--paper);
  border-top:1px solid var(--line);
  padding:7px 12px;
}
.seg{
  display:grid;grid-template-columns:1fr 1fr;
  background:var(--sunken);border-radius:10px;padding:3px;
  position:relative;
}
/* The pill slides, the two words stay still: it reads as a switch and
   not as two buttons. It sits below (implicit z-index) with the
   buttons above, or it would cover the words. */
.seg .thumb{
  position:absolute;top:3px;left:3px;
  width:calc(50% - 3px);height:calc(100% - 6px);
  background:var(--paper);border-radius:8px;
  border:1px solid var(--line);
  transition:transform .22s cubic-bezier(.4,0,.2,1);
}
.seg button{
  position:relative;z-index:1;
  padding:9px 0;border-radius:8px;
  font-size:12.5px;font-weight:700;letter-spacing:.02em;
  color:var(--muted);transition:color .18s;
}
.seg button.on{color:var(--ink)}
.seg[data-tab="table"] .thumb{transform:translateX(100%)}

/* The sponsor bar: three plates, two below 340px. The layout decides
   the number (shells/phone.js) and writes the columns only when that
   number really changes: rewriting them at every jolt of the window
   would restart the rotation from the beginning. */
.sponsors{
  flex:none;
  background:var(--paper);
  border-top:1px solid var(--line);
  padding:9px 10px calc(9px + env(safe-area-inset-bottom,0px));
  display:grid;gap:8px;
  --h:34px;                /* usable height of the mark inside the plate */
}
/* Plate white at night too: the mark files have a white ground baked
   in (none of them has an alpha channel), and on a dark ground they
   would be fifteen white rectangles. Fixed white means the ground of
   the file disappears into the plate. */
.slot{
  height:40px;border-radius:7px;
  background:#fff;border:1px solid var(--line);
  display:grid;place-items:center;
  overflow:hidden;padding:0 7px;
}
/* --k evens out the AREA between marks of different proportions (here
   from 0.91 to 4.10): without it a long wordmark as tall as a square
   mark would weigh three times as much. object-fit rescales the marks
   wider than the plate, so the proportion never distorts. */
.slot img{
  display:block;width:100%;height:calc(var(--h) * var(--k,1));
  object-fit:contain;object-position:center;
  transition:opacity .42s ease;
}
.slot img.out{opacity:0}
.slot img.scuro{border-radius:3px}

}

/* tel/tendina.css */
@media (max-width:899px){
/* ============================================================
   DRAWER AND TOAST: the two corrections to the shared chrome
   ============================================================
   The drawer is drawn by drawer.css, which belongs to every page:
   measures, weights and wording come from there. Two differences
   remain, both of them measurable.

   1. THE CLOSE BUTTON SITS WHERE THE THEME BUTTON SITS. It is the same
      gesture in the same corner (the menu opens with the hamburger on
      the left and closes with the cross on the right) and the header
      already owns that place: 44px of target against the edge, with
      the icon falling twelve pixels inside. The header wins here,
      being the frame common to every page.
   2. THE UNDERLINE. On the board app/base.css takes it off with a
      reset on a, which does not reach down here (it is bounded above
      900px). Down here it comes off the item instead.              */
.menu-top{padding-right:0}
.menu .icon{width:44px;height:48px}
.menu nav a{text-decoration:none}

/* THE TOAST.
   120px from the bottom, which is above the sponsor bar and above the
   switch, where it covers nothing of what is being looked at. On the
   pages that scroll it sits at 30px, because down there is nothing.
   The colour: --paper is the white of the phone, --panel that of the
   board; at night the two are not the same black. */
.toast{
  position:fixed;bottom:120px;
  background:var(--ink);color:var(--paper);
  padding:10px 16px;border-radius:9px;
  font-size:12.5px;font-weight:600;
  max-width:78%;text-align:center;
}

/* The privacy line inside the drawer: it gets tapped, so it needs a
   target tall enough for a thumb. */
.menu-piede a{display:inline-block;padding:6px 0;color:inherit;text-decoration:underline}

}

/* tel/iscriviti.css */
@media (max-width:899px){
/* ============================================================
   THE ENTRY FORM: phone
   ============================================================
   This is where the form really gets filled in: a parent opens it from
   the team message, standing up, one handed, in the evening.

   THE KEYBOARD EXISTS, and it is what decides this sheet. When it
   rises it takes half the screen, and a layout 100vh tall does not
   notice: the foot with the buttons ends up under the keys and from
   there on the form is filled in blind. The real height comes from
   visualViewport as --vista (ui/tastiera.js); the fallback is 100dvh,
   which at least counts the browser bars.

   THIS SHEET IS COMPLETE, not a list of corrections: the two sheets
   are bounded by width and the board one does not reach below 900px.
   The shared rules are repeated here. That is the price of the
   bounding, which in exchange keeps the board measurements off the
   phone.

   THE INDEX BECOMES A STRIP. Eight steps in a column would eat half a
   screenful; across, they say the same thing in forty pixels, and they
   scroll themselves onto the current step.
   ============================================================ */

.app{flex:1;min-height:0;display:flex;flex-direction:column}
/* WITH THE KEYBOARD OPEN THE PAGE IS WORTH WHAT IS VISIBLE.
   ============================================================
   Without this line no amount of scrolling brings the focused field
   above the keys.

   When the keyboard rises the browser does NOT shrink the page: it
   leaves it as tall as it was and slides the visible window down
   inside it. Measured on the phone: page 649, visible 330, window down
   by 255. The form ends at 650, sixty-five pixels BELOW the top of the
   keyboard, and reaching the field would take scrolling backwards from
   a scrollTop already at zero.

   Giving the page the height of what is visible leaves the window
   nowhere to slide (it goes back to zero), the form ends exactly where
   the keyboard begins, and the scroll has the run it needs.

   Shrinking the page is not enough on its own: the window stays down
   (page 330, window still at 175) and empty ground shows below it.
   What works is PINNING THE FORM TO THE WINDOW: position:fixed, at the
   top where the window starts, as tall as it. The two measurements
   come from ui/tastiera.js and update on every move of it, so the form
   sits over it whether the browser shifts the window or not. And since
   the foot of the form is the top of the keyboard, the focused field
   gets there. */
html.con-tastiera .shell.isc{
  position:fixed;left:0;right:0;z-index:4;
  top:var(--vv-top, 0px);height:var(--vista, 100%)}
.shell.isc{display:flex;flex-direction:column;min-height:0;flex:1}
/* The choice and the door scroll like a normal page: they are not a
   form wedged between a header and a foot. */
.shell.isc.sola{display:block;overflow-y:auto}
.is-tappa[hidden],.is-passo[hidden],.bl[hidden],
.is-consenso[hidden]{display:none !important}

/* ---- the strip of steps ---- */
.is-lato{flex:none;display:flex;flex-direction:column;background:var(--paper);
  border-bottom:1px solid var(--line)}
.is-lato .p-head,.is-nota{display:none}
.is-tappe{display:flex;gap:6px;overflow-x:auto;padding:8px 12px;scrollbar-width:none}
.is-tappe::-webkit-scrollbar{display:none}
.is-tappa{flex:none;display:flex;align-items:center;gap:7px;padding:7px 13px;
  border:1px solid var(--line);border-radius:999px;background:transparent;
  color:var(--muted);font-family:inherit;font-size:12px;white-space:nowrap}
.is-tappa.on{border-color:var(--brand);background:var(--me-fill);
  color:var(--brand);font-weight:700}
.is-tappa.fatto .n{color:var(--up)}
.is-tappa[disabled]{color:var(--faint);opacity:.55}
.is-tappa .n{font-weight:700}
.is-tappa .e{display:none}
.is-tappa.on .e{display:inline}

/* ---- the panel ---- */
.is-corpo{flex:1;min-height:0;display:flex;flex-direction:column;background:var(--paper)}
.is-corpo .p-head{flex:none;display:flex;align-items:center;justify-content:space-between;
  gap:10px;padding:10px 16px;background:var(--bar);color:var(--bar-fg);
  border-bottom:1px solid var(--line)}
.is-corpo .p-head .t{font-size:11px;font-weight:700;letter-spacing:.11em;
  text-transform:uppercase}
.is-corpo .p-head .t.dim{color:var(--bar-dim);font-weight:500;letter-spacing:.05em}
/* AT THE FOOT, ROOM FOR AS MUCH AS THE KEYBOARD TAKES.
   Where the browser does not shrink the page by itself (iPhone), the
   panel carries on BEHIND the keys: the last fields sit under there
   and nothing below them can be pulled up, so the room simply is not
   there. Adding it at the foot creates it: --tastiera is how much is
   covered (ui/tastiera.js) and it is zero where the page has already
   shrunk itself, so on Android nothing changes. */
.is-scorre{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;
  padding:16px 15px calc(22px + var(--tastiera, 0px))}
.is-passo h2{font-size:20px;font-weight:800;letter-spacing:-.02em;color:var(--ink)}
.bl h2{display:flex;flex-wrap:wrap;align-items:center;gap:10px;
  font-size:19px;font-weight:800;color:var(--brand)}
.bl h2 .t{flex:none}
.is-guida{margin:7px 0 16px;font-size:14px;line-height:1.55;color:var(--ink-2)}
.is-guida b{font-weight:700}

/* ---- the groups and the fields ---- */
.gr{border:0;padding:0;margin:14px 0 0}
.gr legend{padding:0 0 6px;font-size:11px;font-weight:700;letter-spacing:.12em;
  text-transform:uppercase;color:var(--brand)}
.gr + .gr{margin-top:14px;padding-top:14px;border-top:1px solid var(--line)}

/* THE SHARED ROW DOES NOT EXIST HERE. On the board Recapiti and
   Certificato medico sit side by side; in a single column there is
   nothing to pair, so the container dissolves and the two groups go
   one under the other, each with its own hairline like all the rest.
   The expiry date so ends up at the foot of the screen, after the
   e-mail, which is the last field before Avanti. */
.gr-riga{display:block}
.gr-riga > .gr{margin-top:14px;padding-top:14px;border-top:1px solid var(--line)}

/* ONE COLUMN, except the two pairs that share a line on paper as
   well: street with number, town with postcode. Two fields side by
   side at 390px mean boxes of a hundred and sixty pixels: "Silea"
   fits, "Conegliano" does not. */
.campi{display:grid;grid-template-columns:minmax(0,1fr) 88px;gap:11px 10px}
.cmp{grid-column:1 / -1}
.f-via,.f-comune{grid-column:1}
.f-civico,.f-cap{grid-column:2}
.cmp label{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:700;
  letter-spacing:.06em;text-transform:uppercase;color:var(--ink-2)}
.cmp label small{font-weight:500;letter-spacing:.02em;text-transform:none;color:var(--muted)}
/* 16px IS THE THRESHOLD: below it, iOS zooms the page in by itself
   when a box is tapped, and never zooms back out. */
.cmp input,.cmp select{width:100%;margin-top:4px;padding:12px 13px;border-radius:10px;
  border:1px solid var(--line-2);background:var(--sunken);color:var(--ink);
  font-size:16px;font-family:inherit}
.cmp input:focus,.cmp select:focus{outline:0;border-color:var(--brand);background:var(--panel)}
.cmp input.male,.cmp select.male{border-color:var(--down)}
.err{min-height:0;margin-top:3px;font-size:12.5px;line-height:1.3;color:var(--down)}
.err:empty{display:none}

/* The foreign country tick, attached to the field name */
.eti-estero{display:inline-flex;align-items:center;gap:5px;margin-left:2px;
  font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;
  color:var(--muted)}
.eti-estero input{width:16px;height:16px;margin:0;accent-color:var(--brand)}
.eti-estero:has(input:checked){color:var(--brand)}

/* The role dropdown, with its own arrow */
.bl-testa{display:inline-flex}
.bl-testa label{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
.bl-testa select{margin:0;width:auto;min-width:170px;padding:8px 32px 8px 12px;
  font-size:15px;border-radius:9px;appearance:none;-webkit-appearance:none;
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27%2352B2D0%27 stroke-width=%272.4%27 stroke-linecap=%27round%27%3E%3Cpath d=%27M6 9l6 6 6-6%27/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 9px center;background-size:16px}
.bl-testa .err{display:none}

/* ---- the field that searches a long list ---- */
.combo{position:relative}
.combo input{padding-right:40px}
.combo-giu{position:absolute;right:1px;top:5px;bottom:1px;width:38px;
  display:grid;place-items:center;border:0;background:transparent;color:var(--brand)}
.combo-giu svg{width:18px;height:18px}
/* THE LIST FLOATS, and it opens upwards when the keyboard is below:
   ui/combo.js sets the class after asking visualViewport how much room
   there really is. */
/* The list scrolls, not the page under it: without this, at the end
   of the three rows the finger carries on and takes the screen away. */
/* THE LIST IS NOT INSIDE THE PANEL, IT IS ABOVE EVERYTHING.
   Inside the scrolling form anything past the edge of the panel gets
   CLIPPED, and opening upwards (which is what it does whenever the box
   sits low, so always with the keyboard up) one of the three rows
   would show, cut by the step heading. With position:fixed there is no
   edge left to clip, and ui/combo.js passes the coordinates in window
   measurements: the same ones the keyboard is known in. */
.combo-lista{position:fixed;z-index:60;
  overflow-y:auto;overscroll-behavior:contain;
  /* combo.js moves the scroll following the finger: the gesture is
     taken away from the browser, because it is the same
     preventDefault that keeps the focus in the box and the keyboard
     up. */
  touch-action:none;margin:0;padding:5px;list-style:none;
  background:var(--panel);border:1px solid var(--line-2);border-radius:11px;
  box-shadow:0 18px 40px -14px rgba(0,0,0,.5)}
.combo-lista[hidden]{display:none}
/* Tall rows: they are picked with a thumb, not with a mouse. */
.combo-lista li{display:flex;align-items:baseline;gap:9px;padding:13px 12px;
  border-radius:8px;font-size:16px;color:var(--ink)}
.combo-lista li.su{background:var(--me-fill);color:var(--brand)}
.combo-piu{margin-left:auto;font-size:12px;font-weight:700;color:var(--muted)}
.combo-vuoto{color:var(--muted);font-size:13.5px}

/* ---- the two choices, never one ---- */
.is-due{display:flex;flex-direction:column;gap:9px}
.is-due button{display:flex;align-items:center;gap:11px;width:100%;padding:14px;
  border-radius:11px;border:1px solid var(--line);background:var(--panel);
  color:var(--ink-2);font-size:15px;font-family:inherit;text-align:left}
.is-due.grande button{padding:17px;font-size:15.5px}
.is-due .seg{flex:none;width:19px;height:19px;border-radius:50%;
  border:2px solid var(--line-2)}
.is-due button.on{border-color:var(--brand);background:var(--me-fill);
  color:var(--brand);font-weight:700}
.is-due button.on .seg{border-color:var(--brand);box-shadow:inset 0 0 0 4px var(--brand)}

/* ---- the blocks and the second parent ---- */
.bl-via{padding:10px 15px;border-radius:10px;border:1px solid var(--line-2);
  background:transparent;color:var(--muted);font-family:inherit;font-size:14px}

/* ---- the notices ---- */
.is-doc{min-width:0}
.is-doc-cima{padding:0 0 12px;border-bottom:1px solid var(--line)}
.is-doc-cima h3{font-size:15px;font-weight:800;line-height:1.35;color:var(--brand)}
.is-norma{margin-top:4px;font-size:11px;color:var(--faint)}
.is-testo{padding:14px 0 0}
.is-sez + .is-sez{margin-top:13px}
.is-sez h4{display:flex;gap:7px;font-size:12.5px;font-weight:700;color:var(--brand)}
.is-sez p{margin-top:4px;font-size:13px;line-height:1.6;color:var(--ink-2)}
.is-elenco{margin-top:4px;padding-left:17px;list-style:disc}
.is-elenco li{font-size:13px;line-height:1.6;color:var(--ink-2);margin-top:3px}
.is-elenco li::marker{color:var(--brand)}

/* THE BAND OF CHOICES STAYS PUT above the buttons, outside the
   scrolling part: the question stays under the eyes while reading, and
   not at the foot of twenty thumbfuls of screen. */
.is-fisso{flex:none;border-top:1px solid var(--line);background:var(--sunken);
  max-height:44vh;overflow-y:auto}
.is-consenso{padding:13px 15px}
.is-formula{font-size:12.5px;line-height:1.55;color:var(--ink-2)}
.is-eti{margin:11px 0 7px;font-size:13px;font-weight:700;color:var(--ink)}
.is-scelte{display:flex;flex-direction:column;gap:12px;margin-top:8px}
.is-scelta{min-width:0}
.is-scelta .is-due{margin-top:7px}
.is-visto{display:flex;align-items:flex-start;gap:11px;font-size:13px;
  line-height:1.55;color:var(--ink-2)}
.is-visto input{flex:none;width:22px;height:22px;margin-top:1px;accent-color:var(--brand)}

/* ---- review: the data as written, and the PDF one tap away ----
   NOBODY SHOWS A PDF INSIDE THE PAGE ON A PHONE. It is not only iOS:
   Android downloads it, iOS hands it to its own reader, and the page
   is left with an empty box half a screen tall carrying a line of
   apologies. Whoever has to check the data about their daughter before
   signing would face nothing at all.
   So the box does not open here: the data is read on the page, and
   whoever wants the document opens it with the button at the top,
   where the phone knows how to open it. */
.is-passo[data-passo="rivedi"]{display:flex;flex-direction:column;height:100%}
#riepilogo{flex:1;min-height:0;display:flex;flex-direction:column;margin-top:10px}
.ri-pdf{display:none}

.ri-testa{flex:none}
.ri-testa p{margin:0 0 10px;font-size:13px;line-height:1.5;color:var(--ink-2)}
.ri-apri{display:flex;align-items:center;justify-content:center;gap:9px;
  padding:13px;border-radius:11px;border:1px solid var(--brand);
  background:var(--me-fill);color:var(--brand);font-size:14.5px;font-weight:700}
.ri-apri svg{width:17px;height:17px}

/* The data scrolls, the button that opens the PDF stays put. */
.ri-dati{flex:1;min-height:0;overflow-y:auto;margin-top:12px;
  display:flex;flex-direction:column;gap:10px;
  -webkit-overflow-scrolling:touch}
.ri-sez{border:1px solid var(--line);border-radius:12px;background:var(--velo)}
.ri-sez h3{display:flex;align-items:center;justify-content:space-between;gap:8px;
  margin:0;padding:10px 12px;border-bottom:1px solid var(--line);
  font-size:11px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;
  color:var(--ink-2)}
.ri-sez h3 button{flex:none;padding:5px 11px;border-radius:999px;
  border:1px solid var(--line-2);background:var(--panel);color:var(--brand);
  font-family:inherit;font-size:12px;font-weight:700;text-transform:none;
  letter-spacing:0}
.ri-sez dl{margin:0;padding:4px 12px 10px}
/* Label and value on the same line, with the colon implied: in three
   hundred pixels one definition under the other doubles the height and
   sets a card scrolling that should be read at a glance. */
.ri-sez dl > div{display:flex;gap:10px;padding:6px 0;
  border-top:1px solid var(--line)}
.ri-sez dl > div:first-child{border-top:0}
.ri-sez dt{flex:none;width:44%;font-size:12.5px;color:var(--muted)}
.ri-sez dd{flex:1;margin:0;font-size:13.5px;font-weight:600;color:var(--ink);
  word-break:break-word}

/* ---- the signature ---- */
.is-firme{margin-top:16px;display:flex;flex-direction:column;gap:13px}
.fi-box{border:1px solid var(--line);border-radius:12px;background:var(--panel);
  overflow:hidden}
.fi-cima{display:flex;align-items:center;justify-content:space-between;
  padding:10px 13px;border-bottom:1px solid var(--line);font-size:11px;
  font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.fi-pulisci{border:0;background:none;font-family:inherit;font-size:12px;
  color:var(--brand);letter-spacing:0;text-transform:none}
/* touch-action:none or the signing finger scrolls the page instead of
   leaving a mark. */
.fi-tela{display:block;width:100%;height:140px;touch-action:none}
.fi-riga{height:1px;margin:0 20px 16px;background:var(--line-2)}
.is-invio{margin-top:18px}
.is-invia{width:100%;padding:16px;border:0;border-radius:12px;
  background:var(--brand);color:var(--on-brand);font-family:inherit;
  font-size:16px;font-weight:700}
.is-invia[disabled]{opacity:.45}

.is-fatto h2{font-size:20px;font-weight:800;color:var(--up)}
.is-fatto p{margin-top:9px;font-size:14.5px;line-height:1.6;color:var(--ink-2)}
.is-scarica{display:inline-block;margin-top:16px;padding:13px 18px;border-radius:11px;
  border:1px solid var(--brand);color:var(--brand);font-size:15px;text-decoration:none}

/* The send that fails. Here the two buttons sit in a column and full
   width: side by side at 390px they become two half buttons, and they
   are the two moves to make right after something has gone wrong, the
   wrong moment to ask for aim. */
.is-guaio{margin-top:14px;padding:13px 14px;border-radius:11px;
  border:1px solid var(--down);background:var(--down-fill)}
.is-guaio p{margin:0;color:var(--ink);font-size:15px;line-height:1.5}
.is-guaio p + p{margin-top:7px}
.is-guaio-tasti{display:flex;flex-direction:column;gap:9px;margin-top:12px}
.is-riprova{padding:13px;border-radius:11px;border:0;
  background:var(--brand);color:var(--on-brand);
  font-family:inherit;font-size:15px;font-weight:700}
.is-riprova:disabled{opacity:.6}
.is-perposta{padding:13px;border-radius:11px;text-align:center;
  border:1px solid var(--line);color:var(--ink-2);
  font-size:15px;text-decoration:none}

/* ---- the foot ----
   AT THE FOOT OF THE PANEL, which is as tall as the visible part: with
   the keyboard open the panel shortens and the foot rises with it,
   staying above the keys. No fixed position and no arithmetic: the
   right height is enough. */
.is-piede{flex:none;display:flex;align-items:center;gap:10px;
  padding:10px 14px calc(10px + env(safe-area-inset-bottom));
  border-top:1px solid var(--line);background:var(--paper)}
/* WITH THE KEYBOARD OPEN THE FOOT GETS OUT OF THE WAY.
   Indietro and Avanti are worth sixty pixels, and while typing in a
   box they are of no use: pressing them closes the keyboard anyway.
   Keeping them in view would push the focused field sixty pixels
   higher to make room, away from the keyboard, and steal from the list
   that opens above the room it needs to show three items instead of
   one.
   When the keyboard goes down, they come back. */
.con-tastiera .is-piede{display:none}
.is-piede .err{flex:1;min-height:0;text-align:center;font-size:12px}
.is-indietro,.is-avanti{flex:none;padding:14px 18px;border-radius:11px;
  font-family:inherit;font-size:15px;font-weight:700}
.is-indietro{border:1px solid var(--line);background:transparent;color:var(--ink-2)}
/* AVANTI TAKES THE WHOLE LINE THAT IS LEFT. On the first screen,
   where there is no Indietro, a capped width leaves a narrow button on
   the left and a third of a line empty on the right: a button that
   looks put there by mistake. When Indietro is there, it takes its own
   space. */
.is-avanti{flex:1;border:0;background:var(--brand);color:var(--on-brand)}

/* ---- the date: a plain box, the calendar on request ----
   The real picker is there but unseen: it sits under the button, as
   tall and as wide as it, so the tap reaches it where the system
   insists on opening it from a visible element. It takes no focus
   (tabindex -1) and nothing reads it (aria-hidden): for whoever fills
   the form and for whoever listens to the page, only the box
   exists. */
.cal{position:relative}
.cal input[type="text"]{padding-right:46px}
.cal-apri{position:absolute;right:5px;top:calc(50% + 2px);transform:translateY(-50%);
  display:grid;place-items:center;width:38px;height:38px;padding:0;
  border:0;border-radius:9px;background:transparent;color:var(--muted)}
.cal-apri svg{width:21px;height:21px}
.cal-vero{position:absolute;right:5px;top:calc(50% + 2px);transform:translateY(-50%);
  width:38px;height:38px;opacity:0;pointer-events:none}

/* ---- the browser autofill ----
   The browser paints the boxes it has filled in itself, and its
   yellow-white knows nothing of the dark theme: the surname comes out
   light on a white ground, unreadable and unlike every other box on
   the card. The ground cannot be changed, but an inner shadow as tall
   as the box covers it whole. */
.cmp input:-webkit-autofill,
.cmp input:-webkit-autofill:hover{
  -webkit-text-fill-color:var(--ink);caret-color:var(--ink);
  -webkit-box-shadow:0 0 0 60px var(--sunken) inset;
  box-shadow:0 0 0 60px var(--sunken) inset;
  /* The endless transition is how the colour does not go back to the
     browser one after a moment. */
  transition:background-color 9999s ease-in-out 0s}
.cmp input:-webkit-autofill:focus{
  -webkit-box-shadow:0 0 0 60px var(--panel) inset;
  box-shadow:0 0 0 60px var(--panel) inset}

/* ---- the list of what is missing, on the send button ---- */
.err-elenco{margin:6px 0 0;padding:0;list-style:none;text-align:left}
.err-elenco li{padding:5px 0;border-top:1px solid var(--line);
  font-size:12.5px;line-height:1.45}
.err-elenco li:first-child{border-top:0}
.err-elenco button{padding:2px 9px;margin-right:2px;border-radius:999px;
  border:1px solid var(--down);background:transparent;color:var(--down);
  font-family:inherit;font-size:11.5px;font-weight:700}

/* ---- the Avanti button switched off ---- */
.is-avanti:disabled{background:var(--line-2);color:var(--muted);box-shadow:none}

/* ---- the question about the second parent ----
   At the foot of the screen, where the thumb is: it answers a button
   just pressed at the foot of the screen. */
/* Everything is written here too: the modal sheet does not reach this
   page, and without its rules the panel would sit in a corner with the
   page behind it still in focus. */
.dlg-chiedi{position:fixed;inset:auto 0 0 0;margin:0;
  width:100%;max-width:100%;max-height:80vh;padding:0;overflow:hidden;
  border:0;border-top:1px solid var(--line);border-radius:16px 16px 0 0;
  background:var(--panel);color:var(--ink)}
.dlg-chiedi[open]{display:flex;flex-direction:column}
.dlg-chiedi::backdrop{background:var(--scrim)}
.dlg-chiedi .dlg-head{flex:none;padding:16px 18px 0}
.dlg-chiedi .dlg-head b{display:block;font-size:17px;font-weight:800;color:var(--ink)}
.dlg-chiedi .dlg-body{padding:16px 18px 2px}
.dlg-chiedi .dlg-body p{margin:0;font-size:14px;line-height:1.6;color:var(--ink-2)}
/* The two buttons equally wide and thumb tall: it is a choice, not a
   confirmation with a small second thought. */
.dlg-azioni{display:flex;gap:9px;padding:16px 18px calc(18px + env(safe-area-inset-bottom))}
.dlg-azioni button{flex:1;padding:14px 10px;border-radius:11px;
  font-family:inherit;font-size:15px;font-weight:700}
.dlg-no{border:1px solid var(--line-2);background:transparent;color:var(--ink-2)}
.dlg-si{border:0;background:var(--brand);color:var(--on-brand)}

/* The role dropdown of the second parent is not touched: it is the
   counterpart of the one picked for the first. Switched off, it reads
   as a fact and not as a question. */
.bl-testa select:disabled{opacity:1;color:var(--ink-2);
  background-color:var(--sunken);background-image:none;
  border-color:var(--line);padding-right:12px;cursor:default}

/* ---- the questions of a consent, one at a time ---- */
.is-scelta[hidden]{display:none !important}
.is-voci{display:flex;align-items:center;gap:7px;margin-bottom:10px}
.is-voce{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;
  border:1px solid var(--line-2);background:transparent;color:var(--muted);
  font-family:inherit;font-size:12px;font-weight:700;cursor:pointer}
.is-voce.fatto{border-color:var(--up);color:var(--up)}
.is-voce.on{border-color:var(--brand);background:var(--me-fill);color:var(--brand)}

/* The question that arrives: it comes in from the right, like a
   screen moving forward. It shows that the tap did something. */
@keyframes is-entra{from{opacity:0;transform:translateX(16px)}to{opacity:1;transform:none}}
.is-scelta.entra{animation:is-entra .24s cubic-bezier(.2,.7,.3,1)}
@media (prefers-reduced-motion:reduce){
  .is-scelta.entra{animation:none}
}

/* THE QUESTION RISES FROM THE BOTTOM, and it is seen rising.
   It appears exactly where the finger has just pressed Avanti:
   appearing at once, it would be hard to tell from "the button did
   nothing and now there is something else". The movement is the only
   thing that links the tap to what happens. */
@keyframes dlg-sale{from{transform:translateY(100%)}to{transform:none}}
@keyframes dlg-velo{from{opacity:0}to{opacity:1}}
.dlg-chiedi[open]{animation:dlg-sale .26s cubic-bezier(.2,.7,.3,1)}
.dlg-chiedi[open]::backdrop{animation:dlg-velo .26s ease}
@media (prefers-reduced-motion:reduce){
  .dlg-chiedi[open],.dlg-chiedi[open]::backdrop{animation:none}
}

/* ---- the card locked until the role is picked ---- */
.gr input:disabled,.gr select:disabled,.gr button:disabled{
  opacity:.5;cursor:not-allowed;background:var(--sunken)}
.bl-attesa{margin:8px 0 0;font-size:13.5px;line-height:1.5;color:var(--brand);
  font-weight:600}
.bl-attesa[hidden]{display:none}

/* ============================================================
   THE SECTOR CHOICE, THE DOOR, THE FEES
   ============================================================ */
.sc-corpo{padding:18px 16px 24px}
.sc-corpo h1{margin:0;font-size:22px;font-weight:800;
  letter-spacing:-.02em;color:var(--ink)}
.sc-guida{margin:8px 0 0;font-size:14px;line-height:1.6;color:var(--ink-2)}
.sc-guida b{font-weight:700;color:var(--ink)}
/* One column: two cards side by side at 390px become two stamps. */
.sc-chiedi{margin:20px 0 11px;font-size:15px;font-weight:700;color:var(--ink)}
.sc-carte{display:flex;flex-direction:column;gap:11px;margin-top:0}
/* ON A SINGLE ROW: the sector name on the left, how to go on at the
   right. Without the list of what the fee covers (on the board it sits
   in between, here it is not shown) the card has two things to say and
   fits a row comfortably, both the same height and centred. */
.sc-carta{display:flex;flex-direction:row;align-items:center;
  justify-content:space-between;gap:14px;padding:18px 16px;
  border:1px solid var(--line-2);border-radius:13px;background:var(--velo);
  text-decoration:none}
.sc-nome{font-size:17.5px;font-weight:800;color:var(--brand)}
.sc-che{font-size:13px;line-height:1.55;color:var(--ink-2)}
.sc-vai{flex:none;display:inline-flex;align-items:center;gap:6px;margin:0;
  font-size:13px;font-weight:700;color:var(--ink)}
.sc-vai svg{width:15px;height:15px}
.sc-nota{margin:18px 0 0;padding-top:14px;border-top:1px solid var(--line);
  font-size:13px;line-height:1.6;color:var(--muted)}
.sc-nota a{color:var(--brand);font-weight:600}

.po-form{margin-top:20px;padding-top:16px;border-top:1px solid var(--line)}
/* It is not the label of a field, it is a sentence: in tracked small
   caps it would read like a table heading. */
.po-form label{display:block;margin-bottom:9px;font-size:15px;
  font-weight:700;color:var(--ink)}
/* 16px: below it, iOS zooms the page in by itself. */
.po-form input{width:100%;margin-top:4px;padding:12px 13px;border-radius:10px;
  border:1px solid var(--line-2);background:var(--sunken);color:var(--ink);
  font-size:16px;font-family:inherit}
.po-form input:focus{outline:0;border-color:var(--brand);background:var(--panel)}
.po-entra{width:100%;margin-top:12px;padding:14px;border:0;border-radius:11px;
  background:var(--brand);color:var(--on-brand);
  font-family:inherit;font-size:15px;font-weight:700}

/* ---- the fees: the document, organised ----
   The same words as the circular, each with the weight of what it
   says. See src/pages/iscriviti.js for why. */
.qt{margin-top:18px;display:flex;flex-direction:column;gap:26px}

/* THE FEE AND WHAT COMES WITH IT, in a single panel: how much, what
   it is made of, and that it is owed in full even leaving in November.
   Three things about the same figure, so they stay together. */
.qt-testa{padding:15px;border:1px solid var(--line-2);
  border-radius:14px;background:var(--velo)}
.qt-eti{display:block;font-size:11px;font-weight:800;letter-spacing:.08em;
  text-transform:uppercase;color:var(--ink-2)}
.qt-riga-cifra{margin:8px 0 0;display:flex;align-items:baseline;
  flex-wrap:wrap;gap:8px}
.qt-cifra{font-size:30px;font-weight:800;letter-spacing:-.03em;
  line-height:1.05;color:var(--brand)}
/* THE BRACKET SITS ON THE LINE OF THE FIGURE: it is a note beside the
   number, not a second amount. Same leading and baseline alignment as
   the figure, or the small text falls below the baseline and reads as
   a paragraph of its own. */
.qt-dentro{font-size:14px;line-height:1;color:var(--ink-2)}

.qt-avviso{display:flex;align-items:flex-start;gap:10px;
  margin:13px 0 0;padding:11px 12px;
  border-radius:11px;border:1px solid var(--down);background:var(--panel);
  font-size:15px;line-height:1.45;font-weight:700;color:var(--ink)}
.qt-avviso svg{flex:none;width:19px;height:19px;margin-top:1px;color:var(--down)}

.qt-sez h3{margin:0 0 12px;font-size:12px;font-weight:800;
  letter-spacing:.07em;text-transform:uppercase;color:var(--brand)}

/* The two ways, numbered: a choice between two things, not a
   paragraph naming them both. */
.qt-modo{display:flex;align-items:center;gap:11px}
.qt-num{flex:none;width:24px;height:24px;border-radius:50%;display:grid;
  place-items:center;background:var(--me-fill);color:var(--brand);
  font-size:12.5px;font-weight:800}
.qt-modo-t{font-size:15px;font-weight:700;color:var(--ink)}
.qt-oppure{margin:9px 0 9px 35px;font-size:13px;color:var(--ink-2)}

.qt-rate{display:grid;grid-template-columns:1fr 1fr;gap:10px;
  margin-top:12px}
/* The two cards carry the same rows: label, figure, due date. With
   one row more on one side they look like two different things. */
.qt-rata{display:flex;flex-direction:column;padding:13px;
  border:1px solid var(--line-2);border-radius:12px;background:var(--velo)}
.qt-rata .qt-riga-cifra{margin:5px 0 0;gap:7px}
.qt-rata .qt-cifra{font-size:19px;color:var(--ink)}
.qt-rata .qt-dentro{font-size:12.5px}
.qt-quale{font-size:11px;font-weight:800;letter-spacing:.07em;
  text-transform:uppercase;color:var(--ink-2)}
/* THE DUE DATE IS NOT A FOOTNOTE: "how much" and "by when" are the
   two halves of one instruction. */
.qt-quando{margin-top:8px;font-size:15px;color:var(--ink)}
.qt-quando b{font-weight:800;white-space:nowrap}

/* WHERE TO SEND THE RECEIPT. Like the fee notice but in brand colour:
   it is an instruction, not a clause. On the phone the mark sits at
   the top and not in the middle, because the address wraps and the
   text becomes two lines. */
.qt-manda{display:flex;align-items:flex-start;gap:10px;
  margin:13px 0 0;padding:11px 12px;
  border-radius:11px;border:1px solid var(--line-2);background:var(--velo);
  font-size:15px;line-height:1.45;color:var(--ink)}
.qt-manda svg{flex:none;width:19px;height:19px;margin-top:1px;color:var(--brand)}
.qt-manda a{font-weight:800;color:var(--brand);word-break:break-word}

.qt-lista{margin:0;padding:0;list-style:none;display:flex;
  flex-direction:column;gap:9px}
.qt-lista li{position:relative;padding-left:26px;font-size:15px;
  line-height:1.5;color:var(--ink)}
.qt-lista li::before{content:"";position:absolute;left:2px;top:.3em;
  width:12px;height:6px;border-left:2px solid var(--up);
  border-bottom:2px solid var(--up);transform:rotate(-45deg)}

.qt-conto{margin:0;display:flex;flex-direction:column;gap:1px;
  border:1px solid var(--line-2);border-radius:12px;overflow:hidden}
.qt-conto-riga{display:flex;flex-direction:column;gap:3px;padding:12px 13px;
  background:var(--velo)}
.qt-conto-riga dt{font-size:11px;font-weight:800;letter-spacing:.08em;
  text-transform:uppercase;color:var(--ink-2)}
.qt-conto-riga dd{margin:0;font-size:15px;line-height:1.45;color:var(--ink)}
.qt-iban dd code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  font-size:15px;font-weight:700;letter-spacing:.05em;color:var(--ink);
  user-select:all;word-break:break-all}

.qt-riga{margin:0;font-size:15px;line-height:1.6;color:var(--ink)}

/* THE HIDDEN SHELL HAS TO GO REALLY AWAY. hidden means display:none,
   but it is a browser rule with zero specificity: anything declaring
   display on .shell.isc beats it, and the door would stay over the
   form once opened. The same trap as on the steps, closed the same
   way. */
.shell.isc[hidden]{display:none !important}

/* ---- the choice and the door, on the phone ----
   NO PANEL. On the phone this site does not put content inside a card
   with a border and a heading band: the board does, where panels
   divide a wide screen into zones. On three hundred and ninety pixels
   there is nothing to divide, and a border around everything is only a
   frame that squeezes.
   So .panel is switched off here (ground, border and band) and the
   content stays on the page, as on every other phone screen. */
.shell.isc.sola .panel{margin:0;border:0;border-radius:0;background:transparent}
.shell.isc.sola .p-head{display:none}

/* THE PAIR OF BUTTONS ON THE DOOR. On the phone the two are not in a
   row: "Inizia la compilazione" is the action of the screen and takes
   the full width, like every main button here; the way back sits under
   it, lighter, which is the order they are needed in. Side by side
   they would be two half buttons, and the more important one would end
   up narrower than the sentence inside it. */
/* ON THE PHONE THE WAY BACK IS NOT A BUTTON, IT IS A LINE OF TEXT.
   Two full width buttons one above the other are two actions of the
   same weight, and these are not: from this screen one goes in, and
   one goes back only after picking the wrong sector. The outline comes
   off, the position holds it (under the solid button, where the thumb
   arrives second) and it stays a line that can be tapped.
   On the board the two sit side by side and there the outline is
   needed: bare wording next to a solid button looks like a caption. */
.po-tasti{display:flex;flex-direction:column-reverse;gap:14px;margin-top:12px}
.po-indietro{align-self:center;display:inline-flex;align-items:center;gap:7px;
  padding:2px;border:0;background:transparent;
  color:var(--brand);font-size:15px;font-weight:700;text-decoration:none}
.po-indietro svg{width:16px;height:16px}
.po-tasti .po-entra{margin-top:0}

/* THE SECTOR BENEFITS DO NOT FIT, AND ARE NOT NEEDED. Three items
   per card, for two cards, are six lines on a screen where the choice
   is between two names whoever arrives knows already: a daughter plays
   minivolley or agonistica, and nobody decides that by reading that
   the match shirt is included. On the board there is room and they
   stay. */
.sc-che{display:none}

/* THE PASSWORD LINE WRAPS WHERE WE DECIDE: the question, the address,
   the number. Left to itself it breaks "segreteria@volleysilea.it" mid
   line, and an address cut in two is neither read nor copied. */
.sc-nota span{display:block}
.sc-nota span + span{margin-top:2px}
/* The address never breaks: if it does not fit, the text tightens,
   not the address. */
.sc-nota a{white-space:nowrap}

/* ---- what the fee covers, on the door ----
   In a column: in a row on three hundred and ninety pixels the items
   wrap wherever they land, and "Presenza alle gare di FIPAV e" with
   "CSI" on the next line is not a list, it is a mess. Vertical room is
   what there is here: three lines on a screen with plenty to spare. */
.po-compreso{display:flex;flex-direction:column;gap:7px;
  margin:14px 0 0;padding:0;list-style:none}
.po-compreso li{position:relative;padding-left:15px;font-size:14px;
  line-height:1.5;color:var(--ink-2)}
.po-compreso li::before{content:"";position:absolute;left:0;top:.55em;
  width:5px;height:5px;border-radius:50%;background:var(--brand)}

/* The question and the instruction on two lines: they are two things. */
.sc-chiedi span{display:block}

/* THE "ISCRIVITI →" IS NOT BLUE ON THE PHONE. On the board the list
   of what the fee covers sits under the sector name and separates
   them; here that list is not shown, and two blue lines touching (the
   sector name and the call to action) read as one block and the button
   stops looking like a button. In the text colour it goes back to
   being something other than the title. */
.sc-vai{color:var(--ink)}

/* The "scorri fino in fondo" notice: it sits next to the switched off
   tick and says why it is off. A disabled box with no explanation is a
   dead end. */
.is-scorri{display:flex;align-items:center;gap:8px;margin:8px 0 0;
  font-size:13.5px;font-weight:600;color:var(--brand)}
.is-scorri svg{width:16px;height:16px}
.is-scorri[hidden]{display:none}
.is-visto input:disabled{opacity:.45}

/* THE DECLARATION BEING TICKED IS NOT A FOOTNOTE: it is the sentence
   with which a family accepts five hundred euros of commitment, so it
   does not go in the smallest size on the screen. */
.is-consenso[data-consenso=quote] .is-visto span{font-size:14.5px;
  line-height:1.5;color:var(--ink)}
.is-guida .qt-quando-che{display:block;font-weight:700;color:var(--ink)}
.is-guida span{display:block}

/* In a column and full width, like every pair of buttons down here. */
.is-fatto-tasti{display:flex;flex-direction:column;gap:9px;margin-top:16px}
.is-fatto-tasti .is-scarica{margin-top:0;text-align:center}
.is-torna{padding:13px;border-radius:11px;text-align:center;
  border:1px solid var(--line);color:var(--ink-2);
  font-size:15px;text-decoration:none}

}

/* motion.css */
/* REDUCED MOTION.
   ================
   Always the last sheet of every page: it has to win over everything
   and media queries add no specificity, so position is its only
   weapon.

   Transitions go off, animations jump to their end. A .01ms duration
   lands the animation on its final state, which is where the content
   is meant to be read.                                               */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    transition:none !important;
    animation-duration:.01ms !important;
  }
  .card:hover{transform:none}
  /* The phone strip jumps to the point instead of gliding there.
     Changing matchday scrolls back to the top, and that glide is
     exactly the unexpected motion to remove. */
  .scroll{scroll-behavior:auto}
  /* On the sparrow the generic rule makes things worse: an infinite
     animation cut to .01ms repeats the flight thousands of times a
     second and the bird flickers. Here it simply stops, still at
     mid flight. */
  .bird{animation:none !important;opacity:var(--bird-op);
        transform:translate3d(calc(50cqw - 50%),-50%,0)}
}
