/* V657 — Weather. Scoped to .wx-*; every colour is a site token from
   line_escape.css so light/dark track the site with no per-tool theme.

   V658 rewrote the top of this file. His note was
     *"this should be the main section (all the tabs).exactly pls"*
   with the reference panel attached, and then two that changed it further:
     *"location , then degrees details, then time and other details"*
     *"can we remove top tow and mention the value in the tab headers"*
   so the facts row that used to sit under the temperature is gone and the two
   numbers it carried are in the tab labels. Nothing in this file draws a
   scrollbar and nothing embosses a calendar cell -- both were asked for and
   then withdrawn, and the reasons are in v658-shipped.md. */

.wx-wrap{max-width:1040px;margin:0 auto;padding:0 14px 40px;
  /* The rail fade has to start at the page ground, and the page ground is a
     different colour per theme. `transparent` is not the answer: it means
     transparent BLACK, which draws a grey smear across a white page. */
  --wx-fade0:rgba(11,46,34,0);
  /* V660: Samaya's weekend wash, stated per theme like every other colour here. */
  --wx-wknd:rgba(255,156,138,.10)}
html:not([data-dark]) .wx-wrap{--wx-fade0:rgba(255,255,255,0);--wx-wknd:rgba(179,38,30,.06)}

/* search */
.wx-search{position:relative;max-width:500px;margin:10px auto 16px;display:flex;
  align-items:center;gap:4px}
.wx-field{position:relative;flex:1;min-width:0}
.wx-search input{width:100%;padding:12px 46px 12px 40px;border:1px solid var(--line);border-radius:10px;
  font:inherit;font-size:var(--fld-fs,15px);background:var(--panel);color:var(--text)}
.wx-search input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--pad)}
.wx-search input:focus:not(:focus-visible){ outline: none; }
.wx-search input.detecting{color:var(--muted);font-style:italic}
.wx-pin{position:absolute;left:13px;top:50%;transform:translateY(-50%);color:var(--muted);display:flex}
.wx-locate{position:absolute;right:7px;top:50%;transform:translateY(-50%);width:32px;height:32px;min-width:32px;border:none;border-radius:8px;
  background:var(--btn);color:var(--text);cursor:pointer;font-size:15px;line-height:1}
.wx-locate:hover{background:var(--line)}
.wx-locate.on{background:var(--accent);color:var(--accent-fg)}
.wx-locate.busy{opacity:.6}
/* V660: the hint is now the ⓘ popover's body, not a line under the box. Width is
   stated because .idot-pop has none of its own and a one-line popover 460px wide
   would hang off a phone. */
/* V660: the ⓘ IS INKED HARDER HERE THAN THE SITE DEFAULT, and the contrast sweep
   is why. `button.idot` is `--muted2` at 75% opacity, which is fine on `--panel`
   (#f4f4f7) where most of the site's dots sit -- and this one sits on the search
   row, which is `--bg`. On the light theme that is PURE WHITE, and 75% of #66667a
   over white measures 3.30:1 against a 4.5 floor. `--muted` at full strength is
   the same family two steps darker and clears it, and the dot is a control rather
   than a decoration, so it should not have been the faintest thing on the row. */
.wx-idot{margin-left:2px}
.wx-idot .idot{color:var(--muted);opacity:1}
.wx-idot .idot:hover,.wx-idot .idot[aria-expanded="true"]{color:var(--text)}
.wx-hint{font-size:12.5px;color:var(--muted);width:min(280px,calc(100vw - 40px))}
/* V658: the hint used to claim device location whatever had actually happened.
   It has states now, and this is the one that says a permission was refused. */
.wx-hint.warn{color:var(--bad)}
/* The dot itself goes amber when what is behind it is a warning, so a folded-away
   failure still has a mark on the page. */
.idot.warn{color:var(--bad);opacity:1}
.wx-hint b{color:var(--text);font-weight:600}
.wx-suggest{position:absolute;top:52px;left:0;right:0;background:var(--panel);border:1px solid var(--line);
  border-radius:10px;overflow:hidden;z-index:15;display:none}
.wx-suggest.open{display:block}
.wx-suggest button{display:flex;width:100%;justify-content:space-between;gap:8px;padding:10px 14px;background:none;
  border:none;border-bottom:1px solid var(--line);font:inherit;font-size:14px;text-align:left;cursor:pointer;color:var(--text)}
.wx-suggest button:last-child{border-bottom:none}
.wx-suggest button:hover{background:var(--btn)}
.wx-suggest .r{color:var(--muted);font-size:12px}

/* ---------------- the main section (V658) ---------------- */
.wx-hero{background:var(--panel);border:1px solid var(--line);border-radius:14px;
  margin:0 0 18px;overflow:hidden}
.wx-hero-in{display:flex;gap:18px;padding:14px 16px;flex-wrap:wrap;align-items:flex-start}
.wx-hero-l{flex:1;min-width:0}
.wx-hero-r{text-align:right;margin-left:auto}
.wx-place{font-size:19px;font-weight:800;letter-spacing:-.01em;margin:0;color:var(--text)}
.wx-temprow{display:flex;gap:12px;align-items:center;margin-top:10px}
.wx-ico{font-size:40px;line-height:1}
.wx-deg{font-size:52px;font-weight:300;letter-spacing:-.03em;line-height:1;
  font-variant-numeric:tabular-nums;color:var(--text)}
.wx-when{font-size:12.5px;color:var(--muted)}
.wx-cond{font-size:13.5px;color:var(--text);margin-top:1px}
.wx-extra{font-size:12.5px;color:var(--muted);margin-top:6px}
.wx-unit{display:inline-flex;flex-direction:column;line-height:1.35}
.wx-ubtn{border:none;background:none;color:var(--muted);cursor:pointer;font:inherit;
  font-weight:700;font-size:12px;line-height:1.35;padding:2px 4px;min-height:20px}
.wx-ubtn.active{color:var(--accent);text-decoration:underline}
/* V671: 44x20 measured -- wide enough, a third of a fingertip tall. The
   `min-height: 20px` above is deliberate and stays; this adds the reach only on a
   touch screen, and the negative margin keeps the row beside the temperature the
   height it is today. */
@media (pointer: coarse) {
  .wx-ubtn { min-height: 44px; padding: 0 10px; margin: -12px 0;
             display: inline-flex; align-items: center; }
}
/* HIS ORDER SURVIVES THE WRAP. On a wide screen the right column sits beside the
   temperature and reads after it; at phone width the two columns are side by side
   at the SAME height, so "Sunday 5:00 PM" lands level with the place and the
   degrees end up third -- the opposite of *"location , then degrees details, then
   time and other details"*. Stacked, the reading order is the one he asked for. */
@media(max-width:560px){
  .wx-hero-in{flex-direction:column;gap:8px}
  .wx-hero-r{text-align:left;margin-left:0}
}

/* The tabs carry the live value -- his "clear some real estate". */
.wx-tabs{display:flex;gap:2px;padding:0 10px;border-bottom:1px solid var(--line);overflow-x:auto;
  scrollbar-width:none;-ms-overflow-style:none}
.wx-tabs::-webkit-scrollbar{display:none}
.wx-tab{background:none;border:none;border-bottom:2px solid transparent;color:var(--muted);
  padding:10px 13px;font:inherit;font-weight:600;font-size:13px;line-height:1;cursor:pointer;
  min-height:42px;white-space:nowrap}
.wx-tab b{font-weight:800;color:var(--text);font-variant-numeric:tabular-nums;margin-left:5px}
.wx-tab[aria-selected="true"]{color:var(--accent);border-bottom-color:var(--accent)}
.wx-tab[aria-selected="true"] b{color:var(--accent)}
.wx-chart-wrap{padding:12px 8px 2px}
#wx-chart{display:block;width:100%;height:108px;color:var(--text)}
.wx-hours{display:flex;justify-content:space-between;padding:0 12px 10px;font-size:11px;color:var(--muted)}
/* V660: TWO LINES PER READING -- the hour, and the date under it. His ask, and it
   became necessary the moment the window started rolling into tomorrow: half these
   labels are now a different day from the one in the heading, and "3 AM" alone does
   not say which. `.turn` is the first label of a new date -- inked rather than
   muted, so the day change is legible in the row as well as on the rule above it. */
.wx-hours span{font-variant-numeric:tabular-nums;display:flex;flex-direction:column;
  align-items:center;line-height:1.25;min-width:0}
.wx-hours span b{font-weight:600}
.wx-hours span i{font-style:normal;font-size:9.5px;color:var(--muted2);opacity:.85}
.wx-hours span.turn i{color:var(--text);font-weight:700;opacity:1}
/* The board flip, V660. His pick of three was *"C. Morph"*, and the labels are the
   half of it CSS can own: the values are interpolated in weather.js because a path
   `d` cannot be transitioned, but a label just turns over. The stagger is set as an
   inline animation-delay per span so the row reads left to right. */
@keyframes wx-flip{from{transform:scaleY(.08);opacity:.15}to{transform:scaleY(1);opacity:1}}
.wx-hours span.flip{animation:wx-flip 260ms ease both}
@media(prefers-reduced-motion:reduce){.wx-hours span.flip{animation:none}}
/* Three tabs carrying three values need every pixel of a 360px phone; without
   this the Wind tab was clipped by the scroll edge and read as missing. */
@media(max-width:560px){
  .wx-tabs{padding:0 4px}
  .wx-tab{padding:10px 7px;font-size:12px}
  .wx-tab b{margin-left:3px}
}
.wx-meta{font-size:12px;color:var(--muted);margin:0;padding:0 16px 12px}

/* ---------------- this-week strip ---------------- */
/* V658, his note: a rail you scroll by touch or trackpad, and NO scrollbar
   either way. A permanent bar under eight cards is a control almost nobody
   drags, taking a row of height on the screen that has the least of it. */
.wx-railwrap{position:relative;margin-bottom:20px}
.wx-railwrap::after{content:"";position:absolute;top:2px;right:0;bottom:8px;width:30px;
  pointer-events:none;background:linear-gradient(90deg,var(--wx-fade0),var(--bg))}
.wx-week{display:flex;gap:10px;overflow-x:auto;padding:2px 2px 8px;
  scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch;
  scrollbar-width:none;-ms-overflow-style:none}
.wx-week::-webkit-scrollbar{display:none}
/* ================================================= V660: THE OVERFLOW, FOUND
   His note, twice: *"this is still overflowing"* -- with a photograph of the four
   lines in a card coming out SIDE BY SIDE and spilling into the neighbours.

   THE CAUSE IS AN ASSUMPTION, NOT A WIDTH. This rule never said which way the
   card's children stack; it relied on the browser's default for a <button>, and
   several mobile engines lay a button's children out in a ROW (the legacy WebKit
   button box, which Blink on the desktop does not use). Desktop Chrome stacked
   them, which is exactly why the same page looked right on his laptop and wrong
   on his phone, and why no amount of re-measuring the card found it.

   So the direction is STATED. `overflow:hidden` plus `nowrap` on the children is
   the belt: a card can now clip its own long value instead of reaching into the
   card beside it, whatever a future engine decides a button is. */
.wx-dcell{flex:0 0 82px;min-height:44px;text-align:center;background:var(--panel);scroll-snap-align:start;
  border:1px solid var(--line);border-radius:12px;padding:12px 6px;font:inherit;color:var(--text);cursor:pointer;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;overflow:hidden}
.wx-dcell>*{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wx-dcell:hover{border-color:var(--accent)}
.wx-dcell.fut{border-style:dashed;border-color:var(--muted2)}
.wx-dcell.today{border:1px solid var(--gold);box-shadow:0 0 0 2px var(--pad)}
.wx-dcell .dow{font-size:12px;font-weight:600}
/* The overflow he photographed: "12 Sep" and "39° 32°" both on one 78px card.
   Nothing here is nowrap, so a narrow card wraps instead of spilling. */
.wx-dcell .dt{font-size:11px;color:var(--muted)}
.wx-dcell .g{font-size:22px;margin:6px 0}
.wx-dcell .hi{font-weight:700;font-variant-numeric:tabular-nums}
.wx-dcell .lo{color:var(--muted);font-variant-numeric:tabular-nums;font-size:13px}
@media(max-width:560px){.wx-dcell{flex:0 0 76px;padding:10px 4px}.wx-dcell .dt{font-size:10.5px}}

/* calendar head + month/year picker */
/* V660: CENTRED, both widths -- his *"month and today to be center aligned-in
   both mobile and desktop"*. One property; `flex-wrap` already handled the phone,
   it was just wrapping to the left. */
.wx-calhead{display:flex;align-items:center;justify-content:center;gap:8px;margin:6px 0 12px;flex-wrap:wrap}
.wx-nav{width:36px;height:36px;min-width:36px;border-radius:9px;border:1px solid var(--line);
  background:var(--panel);color:var(--text);cursor:pointer;font-size:15px}
.wx-nav:hover{border-color:var(--accent)}
/* -------- V660: Samaya's month/year jump panel, copied ---------------------
   Every size below is Samaya's. It is navigation, and "size of these never to
   change" applies to the control you reach the months THROUGH as much as to the
   row you reach it from -- so nothing here scales with anything. */
.mj-wrap{position:relative;display:inline-flex}
.wx-mlabel{font:inherit;font-weight:700;font-size:15px;min-width:170px;min-height:36px;text-align:center;
  background:var(--panel);border:1px solid var(--line);border-radius:9px;padding:7px 12px;cursor:pointer;color:var(--text)}
.wx-mlabel:hover{border-color:var(--accent)}
.wx-today{border:1px solid var(--line);background:var(--panel);color:var(--accent);font:inherit;font-weight:700;
  font-size:13px;border-radius:9px;padding:8px 14px;min-height:36px;cursor:pointer}
.wx-today:hover{border-color:var(--accent);background:var(--btn)}
.mj-pop{position:absolute;top:calc(100% + 8px);left:50%;transform:translateX(-50%);z-index:60;
  width:320px;max-width:calc(100vw - 24px);background:var(--panel);border:1px solid var(--line2);
  border-radius:14px;box-shadow:0 14px 34px rgba(0,0,0,.32);padding:12px;text-align:left}
/* The [hidden] guard, said out loud. `.mj-pop` has a `position` but no `display`,
   so the attribute would in fact win here -- it is stated anyway because the next
   person to give this class a display rule will not re-derive that, and this
   project has now been caught by that exact omission four times. */
.mj-pop[hidden]{display:none}
.mj-yr{display:flex;align-items:center;justify-content:center;gap:10px;margin-bottom:10px}
.mj-yr input{width:92px;text-align:center;font:inherit;font-size:16px;font-weight:700;padding:7px 6px;
  border-radius:9px;border:1px solid var(--line2);background:var(--board);color:var(--text);
  font-variant-numeric:tabular-nums}
.mj-yr input:focus{outline:2px solid var(--accent);outline-offset:1px}
.mj-yb{width:30px;height:30px;flex:0 0 30px;border-radius:50%;border:1px solid var(--line);
  background:var(--board);color:var(--muted);cursor:pointer;display:grid;place-items:center;font-size:15px}
.mj-yb:hover{background:var(--pad);color:var(--text)}
/* ONE MONTH PER ROW -- Samaya V655. Twelve rows is ~456px, which is taller than
   the viewport on a short phone, so the list scrolls inside the panel rather than
   the panel growing past the screen. No scrollbar, same as every other rail here. */
.mj-grid{display:grid;grid-template-columns:1fr;gap:6px;max-height:min(392px,52vh);
  overflow:auto;scrollbar-width:none}
.mj-grid::-webkit-scrollbar{display:none}
.mj-grid button{padding:9px 12px;border-radius:9px;border:1px solid var(--line);background:var(--board);
  color:var(--muted);font:inherit;font-size:12.5px;font-weight:600;cursor:pointer;line-height:1.25;
  display:flex;align-items:baseline;gap:8px;text-align:left}
/* Samaya gives this slot the other calendar's month name. There is no other
   calendar here, so it carries the month's own high/low band -- the fact somebody
   picking a month by weather is after, in a slot that already existed. */
.mj-grid button small{font-size:9.5px;color:var(--muted2);font-weight:600;font-variant-numeric:tabular-nums}
.mj-grid button:hover{background:var(--pad);color:var(--text);border-color:var(--accent)}
.mj-grid button.cur{background:var(--accent);color:var(--accent-fg);border-color:var(--accent)}
.mj-grid button.cur small{color:var(--accent-fg);opacity:.78}
.mj-foot{display:flex;justify-content:space-between;align-items:center;margin-top:10px}
.mj-foot button{font:inherit;font-size:12px;font-weight:600;border:0;background:transparent;
  color:var(--accent);cursor:pointer;padding:5px 2px}
.mj-foot button:hover{text-decoration:underline}

/* ---------------- calendar grid ---------------- */
/* ==================================== V660: SAMAYA'S GRID, COPIED NOT ECHOED
   His ask: *"use same the calendar design as samaya (the flat card design) no
   other change"*. V658 had already been told "FLAT CARD IS FINE" and built one,
   but it built its OWN flat card -- a hairline border on every cell, the date
   tucked top-left, and today marked three times over. Samaya's cell is a
   different set of decisions, each one written down in nepali_calendar.html:

     THE BORDER IS TRANSPARENT. The gap separates one day from the next; a
     hairline round every cell turns a month into a spreadsheet. (V608)

     THE DATE IS CENTRED, not tucked into a corner.

     GOLD MEANS TODAY AND NOTHING ELSE, said ONCE -- a filled disc on the number.
     Samaya V610 removed the cell wash and the cell border for exactly this
     reason: three marks for one fact, and the wash also created a contrast pair
     that then had to be defended. The disc states its own ink and ground on one
     element, so it retires that pair instead of adding one.

     A BLANK CELL IS NOT DRAWN AT ALL. (V523)

     THE WEEKEND CARRIES SAMAYA'S SOFT RED, which is what pays for the Monday
     start: Saturday and Sunday are adjacent now, so the tint reads as one block
     at the end of the row rather than two stripes at both edges.

   WHAT IS *NOT* COPIED, AND WHY. Samaya has no opinion about a FORECAST day,
   because Samaya has no forecasts. V659 drew one with a dashed border -- and a
   dashed border is the one border Samaya's cell does not have. So the
   distinction survives as a faded date number instead of a dashed edge: the same
   information, said in the vocabulary of the grid he asked for. "No other
   change" is honoured by keeping the glyph and the high/low, which are the
   content, and changing only the design, which is what he named. */
.wx-cal{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:10px;overflow:hidden}
.wx-cal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}
.wx-dow{text-align:center;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;
  color:var(--muted2);padding:2px 0 4px}
.wx-dow.wknd{color:var(--bad)}
.wx-cell{background:var(--board);border:1px solid transparent;border-radius:9px;min-height:62px;
  padding:4px 2px 2px;text-align:center;font:inherit;color:var(--text);
  display:flex;flex-direction:column;align-items:center;gap:1px;overflow:hidden;
  transition:background .15s,border-color .15s,transform .15s}
button.wx-cell{cursor:pointer}
button.wx-cell:hover{border-color:var(--line2);transform:translateY(-1px)}
@media(prefers-reduced-motion:reduce){button.wx-cell:hover{transform:none}}
.wx-cell.empty{background:transparent;border-color:transparent}
.wx-cell.wknd{background:var(--wx-wknd)}
.wx-cell.wknd .n{color:var(--bad)}
/* The forecast marker, in Samaya's vocabulary: the number is lighter, and that is
   all. See the note above for why it is not the dashed edge V659 used. */
.wx-cell.fcast .n{opacity:.62}
.wx-cell.beyond{opacity:.42}
/* GOLD MEANS TODAY AND NOTHING ELSE -- said once, on the number. */
.wx-cell.today .n{background:var(--accent);color:var(--accent-fg);border-radius:50%;
  width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;
  font-weight:700;opacity:1}
.wx-cell.today.wknd .n{color:var(--accent-fg)}
/* `.picked` -- the day you are LOOKING at, a different fact from today -- is
   declared once further down, for the rail and the grid together. */
.wx-cell .n{font-size:12px;font-weight:650;line-height:1.15;color:var(--text)}
.wx-cell .cg{font-size:15px;line-height:1}
.wx-cell .ct{font-size:10.5px;font-variant-numeric:tabular-nums;color:var(--muted)}
.wx-cell .ct b{font-weight:700;color:var(--text)}
.wx-cell .ct span{color:var(--muted)}
@media(max-width:560px){.wx-cell .cg{display:none}.wx-cell{min-height:50px}.wx-cal-grid{gap:4px}}

/* trend */
.wx-blk{font-size:13px;text-transform:uppercase;letter-spacing:.03em;color:var(--muted);font-weight:700;margin:0}
.wx-trend-title{margin:22px 0 6px}
.wx-trend-wrap{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:10px 12px}
#wx-trend{width:100%;height:auto;display:block}

.wx-src{font-size:11.5px;color:var(--muted);margin-top:16px}

@media(prefers-reduced-motion:reduce){
  .wx-week{scroll-behavior:auto}
}


/* ------------------------------------------------------------------ V659
   The hourly panel's day label, and the month cell that is now a button.

   V660 RETIRED THE BUTTON RESET THAT USED TO SIT HERE. It stripped the cell back
   to `background:transparent; border:0; padding:0; display:block` so a <button>
   would not reflow a grid of <div>s -- correct when the cell's look lived on a
   wrapper, and WRONG the moment the Samaya cell above put ground, border, padding
   and flex on `.wx-cell` itself: the reset ran after it and undid every one of
   them for exactly the cells that have data, which is all of them. The geometry
   it was protecting is now stated on `.wx-cell` for both element types, and
   `button.wx-cell` adds only the cursor. */
.wx-hday-row { display:flex; align-items:baseline; gap:8px; margin:0 0 8px; }
.wx-hday-l { font-size:10px; letter-spacing:.12em; text-transform:uppercase;
  color:var(--muted3); font-weight:800; }
#wx-hday { font-size:13px; font-weight:700; color:var(--text); }

/* The one thing a <button> still needs said: browsers give it their own control
   appearance on some platforms, and `width` so it fills its grid track. */
.wx-cell.pick { margin:0; width:100%; -webkit-appearance:none; appearance:none; }
.wx-cell.picked, .wx-dcell.picked { outline:2px solid var(--accent); outline-offset:-2px;
  border-radius:9px; }
/* The crosshair layer must never eat the pointer, or moving across the chart
   would flicker between the line and its own overlay. */
#wx-chart .wx-hov, #wx-trend .wx-hov { pointer-events:none; }
#wx-chart, #wx-trend { touch-action:pan-y; }

/* ==========================================================================
   V672 — the rest of this tool's tap targets
   ==========================================================================
   V671 fixed `.wx-ubtn` off the mockup he approved; these are the long tail he then
   asked to have cleaned up. Measured on a 390px phone:

     .wx-tab          101x42   two pixels short, on the three chart tabs
     #wx-loc          332x43   ONE pixel short, the place search
     #wx-mlabel       170x36   the month button that opens the picker
     #wx-today         67x36
     #wx-locate        32x44   WIDTH only -- the 📍 button beside the search
     #wx-prev/#wx-next 36x44   WIDTH only -- the month arrows

   TWO SHAPES OF FIX, and which one is used depends on whether the control is alone
   on its line. The four that are short in HEIGHT get the height: each sits in a row
   of its own and 2-8px there costs nothing. The three that are short only in WIDTH
   get padding pulled back by an equal negative margin, because widening them for
   real would push the search box or the month label sideways -- and on the arrows it
   would move the two of them apart, which is the one thing a pair of arrows either
   side of a label must not do. */
@media (pointer: coarse) {
  .wx-tab { min-height: 44px; }
  #wx-loc { min-height: 44px; }
  #wx-mlabel, #wx-today { min-height: 44px; }

  /* THE THREE THAT ARE SHORT IN WIDTH GET THE WIDTH, and the first cut of this got it
     wrong in a way worth writing down. It used padding pulled back by a negative
     margin -- the invisible fix used everywhere else in this release -- and MEASURED NO
     CHANGE: both rules above set an explicit `width` (32px and 36px) and box-sizing is
     border-box site-wide, so the padding was absorbed INSIDE that width and the box
     never grew. That is the same trap as `button.idot` in V671, made twice in two
     releases, which is why the check in test_v672 measures the box rather than reading
     the declaration.

     So they grow for real. What that costs, per control:
       .wx-locate  32 -> 44   Absolutely positioned inside the 44px-tall search field,
                              so it now fills it exactly. Its background is `--btn`, so
                              this IS visible -- a slightly bigger 📍 chip in the same
                              place.
       .wx-nav     36 -> 44   The month arrows. They already measured 36x44 because the
                              site's floor gave them the height, which made a
                              border-radius circle into an ELLIPSE; 44 makes them square
                              again, so this fix takes a shape back rather than costing
                              one. The row is arrow-label-arrow and has the room. */
  .wx-locate { width: 44px; height: 44px; min-width: 44px; }
  .wx-nav { width: 44px; height: 44px; min-width: 44px; }
}
