/* ===========================================================================
   THE PHONE — designed, not squeezed. 5 Oct 2026.

   Loads last. Everything in the first block is for a phone (under 760px); the
   second is for any touch screen and only removes blur. Not one rule here
   touches the wide layout. app.css is her design and is not changed; this file
   uses her tokens, her classes and her materials, and lays them out the way a
   phone is actually used: standing up, one hand, thumb at the bottom.

   WHAT THE RESEARCH SAID, AND WHAT THIS TAKES FROM IT
   · A day's appointments on a phone are one row of days to flick through and
     ONE day's list underneath — time on the left, one row per appointment, one
     tap each. Never several days side by side. (Apple and Google calendars,
     Square's day view, SAP's planning calendar all do exactly this.)
   · A number on a phone is a compact tile: the number, its name, one line of
     context. Five to nine of them, the one that matters most on top, bigger.
   · Secondary controls fold into a bottom sheet behind a scrim rather than
     sharing the bar (Apple's sheets, Material's modal bottom sheet).
   · The primary action and the main navigation sit where the thumb rests: the
     bottom. Destructive or rare things sit further up.
   · Every tap target is at least 44px. No text is under 12px.
   · A text thread is bubbles: theirs on the left, ours on the right, one name
     per run of messages, one time per run, the latest at the bottom.

   HOW EACH SCREEN IS LAID OUT
   Home / Today    the one that needs a person is a full card at the top; the
                   counts are a two-across grid; anything with a preview (the
                   plan, bookings, the number) is a full-width row.
   Ready for you   the video sized to leave the words and the decision on the
                   same screen; the four settings are a strip; Yes / Not this
                   one stick to the bottom, above the tabs.
   Add footage     the drop zone, the library in one line, the five steps as
                   rows.
   Pick the bits   one moment per row, the tick top-right, the decision stuck
                   to the bottom.
   The plan        a strip of days, one day's posts beneath as rows (js/mobile.js
                   builds the strip and shows one day; with no script the days
                   simply stack as an agenda).
   Funnels / Chats a list of rows; open one and it takes the screen, with its
                   own back pill; the list keeps its scroll position.
   Inbox           the channels as a strip, each message a card with its action
                   buttons full width.
   Your brand / What it knows / The number
                   settings rows with a chevron, in the order they are asked
                   about; each opens its sheet.
   Bookings        the same strip-and-day as the plan; the booking systems as a
                   strip above it.
   ======================================================================== */

/* ======================================================= THE PHONE ====== */
@media (max-width:759px){
  html{
    /* a brand writes its own wide gutter (48–72px) inline on <html>; on a phone
       that is a third of the screen */
    --gutter:16px !important;
    /* the bar is sticky and content scrolls under it, so it is painted in the
       world's own colour, solid. A brand whose designer left the bar
       transparent takes this too (themes.css asks for --bar-wash). Solid, not
       a mix: what sits behind the bar's words must be a colour that can be
       read back and checked, and a sticky bar has nothing to show through. */
    --bar-wash:var(--deep);
    /* the bottom tab bar's reach from the bottom of the screen: 50px tall,
       5px padding each side, 10px off the bottom */
    --tabs-h:70px;
  }

  /* ---- nothing under 12px, anywhere ---------------------------------- */
  .th[data-d]::after{font-size:12px;line-height:1.3;padding:1px 4px}
  .m .by,.runs .rs,.aic .free,.tile .week b,.tabs a .n,.mark,.n{font-size:.76rem}
  .label,.ans>.label,.ib .by,.kind,.cv .kind,.ib .draft .label{font-size:.76rem}

  /* ---- the bar: one row, sticky, out of the way ------------------------
     Logo · Social/Assistant · one round button. The account, who is looking,
     text size and day/night fold behind that button (js/mobile.js moves the
     app's own controls into the sheet and back). */
  .bar{position:sticky;top:0;z-index:40;display:flex;flex-wrap:nowrap;align-items:center;gap:8px;
    padding:8px var(--gutter);min-height:60px;border-bottom:1px solid var(--on-world-line)}
  html[lang] .bar{background:var(--bar-wash)}
  .bar .wm{font-size:.95rem;letter-spacing:.22em;padding:0}
  .bar .whose{gap:0;min-height:44px;display:flex;align-items:center;flex:0 0 auto}
  .bar .whose img,.bar .whose .own-mark{height:40px;padding:5px 7px;border-radius:10px}
  .bar .whose .who-t{display:none}
  .bar .whose .mk{width:32px;height:32px;flex:0 0 auto;display:block}
  .bar .whose .wmk b{font-size:.84rem}
  .bar .whose .wmk span{display:none}
  .bar .seg{display:none}
  .bar .prod{margin:0 auto;padding:2px;flex:0 1 auto;min-width:0}
  .bar .prod button{height:44px;padding:0 14px;font-size:.92rem;white-space:nowrap}
  .mb-more{margin-left:auto;flex:0 0 auto;width:44px;height:44px;border-radius:50%;display:grid;place-items:center;
    background:var(--on-world);border:1px solid var(--on-world-line);color:inherit;cursor:pointer;padding:0}
  .mb-more[hidden]{display:none}
  .mb-more svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round}
  .mb-more svg circle{fill:var(--glass);stroke:currentColor}
  .mb-more:focus-visible{outline:2px solid currentColor;outline-offset:2px}
  /* if the script never ran, the controls are still in the bar: let them wrap rather than vanish */
  .bar .mode,.bar .client,.bar .chrome{flex:0 0 auto}
  .bar:has(> .mode, > .client, > .chrome){flex-wrap:wrap}

  /* ---- the folded controls: a bottom sheet in the app's own sheet shape -- */
  .mb-menu{position:fixed;inset:0;z-index:310}
  .mb-menu[hidden]{display:none}
  .mb-menu .veil{position:absolute;inset:0;background:rgba(2,10,14,.55)}
  .mb-menu .pan{position:absolute;left:0;right:0;bottom:0;max-height:88dvh;overflow:auto;color:var(--ink);
    background:var(--glass);border-radius:var(--r2) var(--r2) 0 0;box-shadow:0 -20px 80px rgba(0,0,0,.4);
    padding:0 0 calc(14px + env(safe-area-inset-bottom))}
  .mb-menu .grab{width:44px;height:5px;border-radius:999px;margin:10px auto 0;background:color-mix(in srgb,var(--ink) 18%,transparent)}
  .mb-menu .hd{display:flex;align-items:center;gap:12px;padding:10px 16px 6px}
  .mb-menu .hd h2{flex:1;font-size:1.35rem;font-weight:700;letter-spacing:-.02em;line-height:1.05}
  .mb-menu .x{width:44px;height:44px;border-radius:50%;display:grid;place-items:center;color:var(--ink);background:color-mix(in srgb,var(--ink) 8%,transparent)}
  .mb-menu .x svg{width:20px;height:20px}
  .mb-menu .mrow{display:flex;align-items:center;flex-wrap:wrap;gap:10px 14px;min-height:64px;padding:12px 16px;border-top:1px solid color-mix(in srgb,var(--ink) 9%,transparent)}
  .mb-menu .mrow:not(:has(.mode,.client,.chrome)),.mb-menu .mrow:has(> [hidden]:only-child){display:none}
  .mb-menu .mrow .t{flex:1 1 140px;min-width:0}
  .mb-menu .mrow .t b{display:block;font-weight:600;font-size:1rem;line-height:1.25}
  .mb-menu .mrow .t span{display:block;color:var(--ink-2);font-size:.88rem}
  .mb-menu .mode,.mb-menu .client,.mb-menu .chrome .grp{
    background:color-mix(in srgb,var(--ink) 7%,transparent);border:1px solid color-mix(in srgb,var(--ink) 12%,transparent);
    color:var(--ink);-webkit-backdrop-filter:none;backdrop-filter:none;margin:0}
  .mb-menu .mode button,.mb-menu .chrome button{color:var(--ink);height:44px;min-width:44px}
  .mb-menu .mode button:hover,.mb-menu .chrome button:hover{background:color-mix(in srgb,var(--ink) 8%,transparent)}
  .mb-menu .mode button.on{background:var(--ink);color:var(--glass)}
  .mb-menu .client{height:48px;padding:0 16px 0 10px;font-size:.98rem;max-width:100%}
  .mb-menu .client .name{display:inline;overflow:hidden;text-overflow:ellipsis}
  .mb-menu .client .name-s{display:none}
  .mb-menu .client.locked{opacity:.78}
  /* with the agency row hidden, the business name must not sit on its own subtitle */
  html[data-demo] .mb-menu [data-mb-slot=".client"],
  html[data-preview] .mb-menu [data-mb-slot=".client"]{flex-direction:column;align-items:flex-start}
  html[data-demo] .mb-menu [data-mb-slot=".client"] .client,
  html[data-preview] .mb-menu [data-mb-slot=".client"] .client{max-width:100%}
  .mb-menu .chrome{margin:0;gap:8px;flex-wrap:wrap}

  /* ---- screens: one column, a compact heading, room for the tab bar ----- */
  .screen{padding:8px var(--gutter) calc(var(--tabs-h) + 24px + env(safe-area-inset-bottom));max-width:none}
  .screen>header{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;margin:10px 0 16px}
  .screen>header h1{flex:1 1 auto;min-width:0;font-size:1.85rem;line-height:1.05;letter-spacing:-.02em}
  .screen>header p{flex:1 1 100%;order:9;font-size:.95rem;padding:0;opacity:.84;line-height:1.35}
  .screen>header .info,.screen>header .back{flex:0 0 auto;align-self:center;margin:0}
  .screen>header .back{height:44px;min-width:44px;padding:0 14px 0 10px;font-size:.88rem}
  .back{min-width:44px}
  .screen>header .info{width:44px;height:44px}

  /* ---- buttons and the one text field --------------------------------- */
  .go,.no{height:auto;min-height:48px;padding:10px 18px;font-size:1rem;white-space:normal;text-align:center;line-height:1.2;max-width:100%}
  .go svg{width:20px;height:20px}
  .ask{margin:0 0 16px;gap:6px;grid-template-columns:minmax(0,1fr)}
  .ask>.label{font-size:.78rem}
  .askrow{padding:10px 12px;gap:8px;flex-wrap:wrap}
  .screen .askin{flex:1 1 100%;min-width:0;width:auto;height:44px;font-size:1rem}
  .screen .askrow .go{height:44px;min-height:44px;padding:0 16px;font-size:.92rem;flex:1 1 100%;white-space:nowrap}
  .screen .ask.compact{margin-bottom:12px}
  .screen .ask.compact .askin{height:44px;font-size:1rem}
  .screen .ask.compact .askrow .go{height:44px;padding:0 14px}

  /* ---- the dashboard: Home and Today ------------------------------------
     Two across. The one that needs a person, and anything that carries a
     preview, takes the full width. Every tile is a small grid:
         number | art          (art: the fan of clips, to the right)
         words  | art
         more   ·  more        (a strip, chips, a mini-week, the bubbles) */
  .tiles{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
  .tile{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"big art" "words art" "more more";
    column-gap:0;row-gap:4px;align-content:start;align-items:start;min-height:0;width:auto;overflow:visible;
    padding:14px 14px 12px;border-radius:var(--r2)}
  .tile:hover{transform:none}
  .tile>.big,.tile>.num{grid-area:big}
  .tile>.big{font-size:2.3rem;line-height:.95;letter-spacing:-.04em}
  .tile>.num{font-size:1.25rem;line-height:1.1;letter-spacing:.01em;overflow-wrap:anywhere}
  .tile>span:last-child{grid-area:words;min-width:0}
  .tile h2{font-size:1rem;line-height:1.2;letter-spacing:-.01em}
  .tile p{font-size:.8rem;line-height:1.35;margin-top:3px;max-width:none;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .screen .tiles .tile>.art{grid-area:art;position:static;inset:auto;max-width:none;width:auto;margin:0 0 0 12px;align-self:center;justify-self:end;display:flex}
  .tile>.week,.tile>.rulechips,.tile>.sts,.tile>.swatch,.tile>.strip,
  .tile>span:first-child:not(.big):not(.num):not(.art):not(.week):not(.rulechips):not(.sts):not(.swatch):not(.strip){grid-area:more;min-width:0;max-width:100%;margin-top:6px}
  .tile.hero,.tile.wide,.tile:has(> .week),.tile:has(> .rulechips),.tile:has(> .sts),.tile:has(.accts),
  .tile:has(> .art > .fan),.tile:has(> .strip),.tile:has(> .swatch){grid-column:1/-1}
  /* the one that needs a person: full card, its colour, what they asked underneath */
  .tile.hero{padding:18px 16px 16px;border-radius:var(--r);row-gap:6px}
  .tile.hero>.big{font-size:3.2rem}
  .tile.hero h2{font-size:1.3rem}
  .tile.hero p{font-size:.92rem;-webkit-line-clamp:3}
  .screen .tiles .tile.hero>.art{grid-area:more;justify-self:stretch;align-self:start;width:100%;max-width:none;margin:8px 0 0;display:block}
  .screen .tiles .tile .stack{display:grid;gap:6px;justify-items:start;width:100%}
  .screen .tiles .tile .stack i{max-width:94%;margin:0;white-space:normal;text-overflow:clip;overflow:hidden;
    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
    padding:8px 12px;border-radius:16px 16px 16px 4px;font-size:.86rem;line-height:1.3}
  /* the clips waiting for a yes: three small frames to the right, each with its length */
  .tile .fan{gap:8px;padding-bottom:8px}
  .tile .fan .frame{width:48px;height:82px;border-radius:9px;box-shadow:0 6px 14px rgba(0,0,0,.24)}
  .tile .fan .frame:nth-child(2){transform:translateY(4px)}
  .tile .fan .frame:nth-child(3){transform:translateY(8px)}
  .tile .fan .th::before{min-width:12px}
  .tile .fan .th[data-d]::after{right:2px;bottom:2px}
  .tile .strip{gap:6px;flex-wrap:wrap}
  .tile .strip .frame{width:64px;height:42px;border-radius:8px}
  .tile .plus{width:52px;height:52px;font-size:1.8rem;border-width:2px}
  /* the plan's mini-week: a strip that scrolls inside the tile, never the page */
  .tile>.week{display:flex;gap:10px;overflow-x:auto;scrollbar-width:none;padding-bottom:2px;flex-wrap:nowrap}
  .tile>.week::-webkit-scrollbar{display:none}
  .tile .week b{flex:0 0 auto;gap:4px}
  .tile .week .frame{width:22px;height:38px;border-radius:5px}
  .tile .week .th::before{min-width:10px}
  .tile .week .th.ph,.tile .week .th.ml{width:30px;height:30px;border-width:2px}
  .screen .asst .tile>.week{flex-wrap:wrap;overflow:visible;gap:8px}
  .tile .week .tt i{font-size:.8rem;padding:4px 9px 4px 8px}
  .tile .week .tt i::before{width:8px;height:8px}
  .tile .sts{display:flex;flex-wrap:wrap;gap:6px 14px}
  .tile .sts .st{font-size:.86rem}
  .rulechips{gap:6px}
  .rulechips i{font-size:.8rem;padding:5px 10px}
  .tile .swatch i{width:28px;height:28px;margin-left:-8px}
  .tile .accts i{font-size:.78rem;padding:4px 9px}
  /* the wide one: number beside the words */
  .tile.wide{grid-template-columns:auto minmax(0,1fr);grid-template-areas:"big words";align-items:center;column-gap:14px;min-height:0;padding:14px 16px}
  .tile.wide>.big{font-size:2.3rem}
  .tile.wide p{max-width:none}

  /* ---- ready for you: the video, the words, the decision, on one screen -- */
  .cuts{gap:24px}
  .cut{grid-template-columns:minmax(0,1fr);gap:12px;align-items:start}
  /* the words become items of the cut itself, so the decision can stick to
     the bottom from the first paint rather than from wherever the words start */
  .screen .cut .say{display:contents}
  .screen .stage .frame{width:min(100%,calc(52dvh * .5625));height:auto;max-height:none;aspect-ratio:9/16;border-radius:var(--r2);box-shadow:0 24px 60px rgba(0,0,0,.4)}
  .stage .glow{inset:10% -4% 0}
  .stage .prog{left:10px;right:10px;top:10px}
  .stage .len,.stage .plat{top:22px;padding:4px 10px;font-size:.78rem}
  .stage .len{right:10px} .stage .plat{left:10px}
  .stage .play{width:60px;height:60px}
  .stage .play svg{width:24px;height:24px;margin-left:4px}
  .stage .cap{bottom:9%;padding:0 14px;gap:2px 7px}
  .stage .cap i{font-size:1.12rem}
  .say .made{font-size:.9rem}
  .say h2{font-size:1.4rem}
  .say blockquote{font-size:1.02rem;max-width:none;line-height:1.35}
  .from{font-size:.88rem;gap:6px 8px}
  .from small,.to small{font-size:.76rem}
  .screen .from .src{height:40px;font-size:.86rem;padding:0 12px 0 4px;gap:8px}
  .screen .from .src .frame{width:44px;height:28px;border-radius:6px}
  .to span{height:36px;padding:0 12px;font-size:.86rem}
  /* the four settings: a strip of cards, the third one peeking so the strip reads as a strip */
  .picks{display:grid;grid-template-columns:1fr 1fr;gap:8px;overflow:visible;margin:0;padding:0}
  .pick{min-width:0;min-height:84px;padding:12px 14px 10px;border-radius:var(--r3);gap:8px}
  .pick:hover{transform:none}
  .pick b{font-size:1.02rem}
  .pick .st{font-size:.8rem}
  /* the decision sits where the thumb is: stuck to the bottom, above the tabs */
  .decide{position:sticky;bottom:calc(var(--tabs-h) + env(safe-area-inset-bottom));z-index:5;
    margin:10px calc(-1 * var(--gutter)) 0;padding:14px var(--gutter) 10px;gap:8px;flex-wrap:nowrap;
    background:linear-gradient(to top,var(--deep) 68%,transparent)}
  .decide .go{flex:1 1 auto;min-width:0;height:54px;min-height:54px;padding:0 18px}
  .decide .no{flex:0 0 auto;min-width:0;height:54px;min-height:54px;padding:0 18px}
  .held{margin-top:12px;min-height:48px;padding:8px 14px;gap:6px 10px;border-radius:var(--r3)}
  .held .st{font-size:.95rem}
  .held .note{margin-left:0;flex:1 1 100%;font-size:.84rem}

  /* ---- add footage ------------------------------------------------------ */
  .drop{padding:24px 18px 20px;gap:8px;border-radius:var(--r2)}
  .drop:hover{transform:none}
  .drop .plus{width:64px;height:64px;font-size:2.2rem;margin-bottom:2px}
  .drop b{font-size:1.35rem}
  .drop p{font-size:.92rem;max-width:none}
  .drop .go{min-width:0;width:100%;margin-top:6px;height:52px;min-height:52px}
  .lib{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;column-gap:12px;row-gap:3px;margin:12px 0 0;padding:10px 14px;border-radius:var(--r3);font-size:.9rem;max-width:none}
  .lib .frames{grid-row:1/4;margin:0}
  .lib .frames .frame{width:28px;height:48px;border-radius:7px;margin-left:-10px}
  .lib b{font-size:.98rem}
  .steps{gap:8px;margin-top:14px;grid-template-columns:1fr}
  .step,.step.yours{grid-column:auto;padding:12px 14px;min-height:0;column-gap:12px;border-radius:var(--r3)}
  .step b{font-size:1.7rem;min-width:1.2em}
  .step h3{font-size:.98rem}
  .step p{font-size:.86rem}
  .step.yours h3::after{font-size:.76rem;margin-left:8px}

  /* ---- pick the bits: one moment per row ------------------------------- */
  .moments{gap:10px;grid-template-columns:1fr}
  .mo{padding:6px;border-radius:var(--r2)}
  .mo:hover{transform:none}
  .mo .frame{aspect-ratio:16/9;border-radius:calc(var(--r2) - 6px);padding:12px}
  .mo .frame .t{font-size:1rem;padding-right:52px}
  .mo .frame .pl{width:48px;height:48px;margin:-24px 0 0 -24px}
  .mo .frame .pl svg{width:22px;height:22px}
  .mo .tick{width:44px;height:44px;right:10px;top:10px}
  .mo .tc{left:10px;top:10px;padding:5px 10px;font-size:.78rem}
  .mo .frame .dur{right:12px;bottom:12px;font-size:.8rem}
  .mo .left{right:10px;top:10px;font-size:.78rem;padding:5px 10px}
  .mo .bd{padding:10px 8px 6px;gap:8px}
  .mo .bd p{font-size:.9rem;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .mo .tags{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}
  .mo .tags::-webkit-scrollbar{display:none}
  .mo .tags i{flex:0 0 auto;font-size:.78rem;padding:5px 10px}

  /* ---- strips and segmented controls ------------------------------------
     Two shapes, both real controls. A STRIP is a row of chips that scrolls
     sideways with momentum and snap, never wraps, never shows a scrollbar:
     the plan's days, the inbox's channels. A segmented control (.filt) is
     two or three equal cells in one pill: what to show. Both are the app's
     own .seg, which app.css hides under 760px because the bar's nav folds
     into the tab bar; in a screen it is shown. The selected cell takes the
     button colour, the same as every other primary thing on the screen. */
  .screen .seg{display:flex}
  .screen .seg.strip{flex-wrap:nowrap;gap:8px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;order:0;width:auto;
    margin:0 calc(-1 * var(--gutter));padding:2px var(--gutter) 6px;scroll-snap-type:x proximity;
    background:none;border:0;border-radius:0;-webkit-backdrop-filter:none;backdrop-filter:none}
  .screen .seg.strip::-webkit-scrollbar{display:none}
  .screen .seg.strip>a,.screen .seg.strip>button{flex:0 0 auto;height:46px;padding:0 16px;border-radius:var(--rp,999px);display:inline-flex;align-items:center;gap:8px;
    scroll-snap-align:start;background:var(--on-world);border:1px solid var(--on-world-line);color:inherit;
    font-weight:600;font-size:.95rem;white-space:nowrap;cursor:pointer;transition:background .2s,color .2s}
  .filtwrap{position:sticky;top:var(--bar-h,60px);z-index:6;margin:0 calc(-1 * var(--gutter));padding:6px var(--gutter) 8px;background:var(--bar-wash)}
  .screen .seg.filt{width:auto;order:0;margin:0;padding:3px;gap:3px;overflow:hidden}
  /* each cell takes what its words need and the rest is shared: "Needs you"
     is short, "Needs Oleander" (an agency looking at a client) is not, and an
     equal third clipped the long one at its left edge */
  .screen .seg.filt>a{flex:1 1 auto;min-width:0;height:44px;padding:0 10px;justify-content:center;gap:6px;font-size:.9rem;font-weight:600}
  html[lang] .screen .seg a.on,html[lang] .screen .seg button.on{background:var(--go-bg);color:var(--go-ink);border-color:transparent;font-weight:700}
  .screen .seg a .n,.screen .seg button .n{min-width:22px;height:22px;padding:0 6px;font-size:.76rem}
  .screen .seg a .ct{opacity:.72;font-weight:600;font-size:.84rem}

  /* ---- the plan, and bookings: a strip of days, one day's rows ----------
     js/mobile.js builds <nav class="seg mb-days"> from the days the app
     rendered and shows one day at a time. Without it the days stack, each
     under its own heading, which is an agenda and still reads. */
  .screen>.week{display:grid;grid-template-columns:1fr;gap:0}
  .screen>.week .day{gap:8px}
  .screen>.week .day h3{font-size:1.1rem;padding:8px 2px 2px;margin-top:4px}
  .screen>.week .day h3 small{font-size:.8rem}
  .screen>.week .mb-days{order:-1;margin-bottom:14px}
  .screen>.week.mb-agenda .day:not(.on){display:none}
  .screen>.week.mb-agenda .day h3{display:none}
  /* a row: the time, the words, the thumbnail or nothing */
  .screen .slot{display:grid;grid-template-columns:58px minmax(0,1fr) auto;grid-template-areas:"when t th" "when meta th";
    column-gap:12px;row-gap:3px;align-items:center;align-content:center;padding:12px 12px 12px 14px;min-height:72px;width:auto;border-radius:var(--r3)}
  .screen .slot:hover{transform:none}
  .screen .slot>.when{grid-area:when;align-self:start;display:grid;gap:3px;padding-top:2px;font-size:1.2rem;line-height:1;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
  .screen .slot .when small{display:block;margin:0;font-size:.76rem;letter-spacing:.02em}
  .screen .slot .when s{display:block;margin:2px 0 0;font-size:.76rem}
  .screen .slot>.t{grid-area:t;font-size:1rem;line-height:1.25}
  #plan .slot>.t{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .screen .slot .t span{font-size:.88rem;display:block}
  .screen .slot>.meta{grid-area:meta;margin:0;justify-content:flex-start;gap:3px 10px;flex-wrap:wrap}
  .screen .slot .where{font-size:.84rem}
  .screen .slot .st{font-size:.84rem;gap:6px}
  .screen .slot .st i{width:9px;height:9px}
  .screen .slot>.th,.screen .slot>.th.ph,.screen .slot>.th.ml{grid-area:th;width:46px;height:46px;border-radius:10px;margin:0;align-self:center;box-shadow:0 4px 12px rgba(0,0,0,.22)}
  .screen .slot>.th::before{min-width:14px}
  .empty{min-height:64px;font-size:.92rem;border-radius:var(--r3)}

  /* ---- your brand · what it knows · the number: settings rows -----------
     Each is a row with a chevron, as settings are on a phone; it opens the
     same sheet it always did. */
  .answers{grid-template-columns:1fr;gap:8px}
  .ans{display:grid;grid-template-columns:minmax(0,1fr) 14px;align-items:center;column-gap:12px;row-gap:2px;
    min-height:64px;padding:12px 14px 12px 16px;border-radius:var(--r3);width:auto}
  .ans>*{grid-column:1;min-width:0}
  .ans::after{content:"";grid-column:2;grid-row:1/span 2;width:9px;height:9px;justify-self:center;
    border-right:2px solid var(--ink-3);border-bottom:2px solid var(--ink-3);transform:rotate(-45deg)}
  .ans:hover{transform:none}
  .ans>.label{letter-spacing:.12em}
  .ans b{font-size:1.08rem;line-height:1.15}
  .ans span.sub,.ans .sub.st{font-size:.86rem;margin-top:2px}
  .ans .num{font-size:1.2rem;letter-spacing:.02em}
  .ans .swr{gap:6px;margin-top:6px}
  .ans .swr i{width:26px;height:26px}
  .ans .accts,.asst .ans .accts{gap:5px;margin-top:6px}
  .accts i{font-size:.78rem;padding:4px 9px}

  /* ---- inbox: the channels as a strip, each message a card ------------- */
  .chan{display:flex;flex-wrap:nowrap;gap:6px;overflow-x:auto;scrollbar-width:none;margin:-4px calc(-1 * var(--gutter)) 14px;padding:2px var(--gutter) 4px}
  .chan::-webkit-scrollbar{display:none}
  .chp{flex:0 0 auto;height:44px;padding:0 12px;font-size:.86rem;gap:6px}
  .ibs{gap:10px;grid-template-columns:1fr}
  .ib{padding:14px 14px 12px;border-radius:var(--r2);gap:10px}
  .screen .ib.needs,.screen .ib.drafted,.screen .ib.buying{padding-left:20px}
  .screen .ib.needs::before,.screen .ib.drafted::before,.screen .ib.buying::before{width:6px}
  .ib .who{gap:6px 8px}
  .ib .who b{font-size:1.02rem}
  .ib .acct,.ib .ago{font-size:.84rem}
  .ib .msg{font-size:1rem;line-height:1.35}
  .ib .msg.word{font-size:1rem}
  .ib .draft{padding:10px 12px;border-radius:12px}
  .ib .draft p{font-size:.94rem;line-height:1.4}
  .ib .held{min-height:48px;padding:8px 14px}
  .ib .held .st{font-size:.92rem}
  .ib .held .note{font-size:.84rem}
  .ib .acts{gap:8px}
  .screen .ib .acts .go{flex:1 1 100%;height:48px;min-height:48px;padding:0 16px}
  .screen .ib .acts .no{flex:1 1 0;height:46px;min-height:46px;padding:0 12px}
  .rules{margin-top:14px;border-radius:var(--r2)}
  .rules summary{min-height:56px;padding:12px 16px;font-size:.98rem}
  .rules .in{padding:0 10px 10px}
  .rules .fine{font-size:.86rem}

  /* ---- funnels and conversations: a list; open one and it takes the screen */
  .convo{gap:10px;grid-template-columns:1fr}
  .list{gap:8px}
  .cv{padding:12px 14px;border-radius:var(--r3);gap:5px}
  .cv:hover{transform:none}
  .screen .cv.isheld,.screen .cv.mine{padding-left:20px}
  .screen .cv.isheld::before,.screen .cv.mine::before{width:6px}
  .cv .who{gap:4px 8px}
  .cv .who b{font-size:1.02rem}
  .cv .acct,.cv .ago{font-size:.82rem}
  .cv .msg{font-size:.92rem}
  .cv.fr{gap:8px}
  .cv.fr .word{height:28px;font-size:.76rem;padding:0 12px}
  html.anim body[data-thread] #conversations>header,html.anim body[data-fun] #funnels>header,html.anim body[data-ib] #inbox>header{display:none}
  html.anim body[data-thread] #conversations>.convo,html.anim body[data-fun] #funnels>.convo,html.anim body[data-ib] #inbox>.convo{margin-top:4px}
  /* a row: name · channel · time, the state, one line of the message. Eight or nine to a screen. */
  .cv{min-height:72px;padding:9px 14px 8px;gap:3px}
  .cv .who{line-height:1.3}
  .cv .who b{font-size:1rem}
  .cv .msg{-webkit-line-clamp:1;font-size:.92rem;line-height:1.3}
  .cv .kind{font-size:.76rem;line-height:1.2}
  .screen .cv.drafted{padding-left:20px}
  .screen .cv.drafted::before{content:"";position:absolute;left:0;top:0;bottom:0;width:6px;background:var(--wait)}
  /* the inbox: the list, or the one message you opened. The opened message is
     the same card as before, with its draft and its actions, and a way back. */
  html.anim body:not([data-ib]) #inbox .ibd{display:none}
  html.anim body[data-ib] #inbox .list{display:none}
  .ibd{display:grid;gap:10px;align-content:start}
  .ibd .back{justify-self:start}
  #inbox .list{gap:8px}
  #inbox .list .seg.strip{margin-bottom:2px}

  /* the thread: a text conversation, the way a phone shows one */
  .thread{border-radius:var(--r2);height:calc(100dvh - 60px - 12px - var(--tabs-h) - 22px - env(safe-area-inset-bottom));min-height:440px}
  .thread .top{padding:8px 10px 8px 8px;gap:4px 8px;flex-wrap:nowrap;align-items:center}
  .screen .thread .top .back{height:44px;padding:0 10px 0 8px;font-size:.86rem;flex:0 0 auto;margin:0}
  .thread .top .nm{flex:1 1 0;min-width:0;display:grid;gap:0;align-content:center}
  .thread .top h2{font-size:1.08rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.15}
  .thread .top .num{font-size:.8rem}
  .screen .thread .top .go.take{height:44px;min-height:44px;padding:0 14px;font-size:.9rem;margin-left:auto;flex:0 0 auto;gap:8px}
  .screen .thread .top .go.take i{width:10px;height:10px}
  .screen .msgs{padding:14px 12px;gap:8px}
  .screen .m{max-width:80%;gap:2px}
  .m .b{padding:9px 13px;font-size:.98rem;line-height:1.35;border-radius:18px 18px 18px 5px}
  .m.ai .b,.m.hu .b{border-radius:18px 18px 5px 18px}
  .m .by{padding:0 6px}
  .m .t{font-size:.76rem;padding:0 6px}
  /* a run of messages from the same side: one name, one time, one tail */
  .m.cu + .m.cu .by,.m.ai + .m.ai .by,.m.hu + .m.hu .by{display:none}
  .m.cu:has(+ .m.cu) .t,.m.ai:has(+ .m.ai) .t,.m.hu:has(+ .m.hu) .t{display:none}
  .m.cu + .m.cu,.m.ai + .m.ai,.m.hu + .m.hu{margin-top:-4px}
  .m.cu + .m.cu .b{border-top-left-radius:5px}
  .m.ai + .m.ai .b,.m.hu + .m.hu .b{border-top-right-radius:5px}
  .mark{margin:6px 0 2px;gap:10px}
  .screen .thread .foot{padding:10px 12px 12px;gap:8px}
  .take{gap:6px 10px;min-height:0}
  .take p{font-size:.9rem;flex:1 1 100%}
  .have{min-height:48px;padding:6px 6px 6px 14px;gap:8px;border-radius:var(--r3)}
  .have .st{font-size:.9rem}
  .screen .have .no{flex:1 1 100%;height:44px;min-height:44px}
  .screen .compose{padding:4px 4px 4px 14px}
  .compose input{height:44px;font-size:1rem}
  .screen .compose .go{height:44px;min-height:44px;padding:0 14px;font-size:.92rem}

  /* a funnel, open */
  .fd{border-radius:var(--r2)}
  .fd-top{padding:8px 12px 8px 8px;gap:4px 8px;flex-wrap:nowrap;align-items:center}
  .screen .fd-top .back{height:44px;padding:0 10px 0 8px;font-size:.86rem;flex:0 0 auto;margin:0}
  .fd-top .nm{flex:1 1 0;min-width:0;gap:4px 8px}
  .fd-top h2{font-size:1.08rem}
  .fd-top .word{height:26px;font-size:.76rem;padding:0 10px}
  .fon{font-size:.88rem;gap:8px}
  .fd-body{padding:14px 12px 4px;gap:14px}
  .fsteps{gap:6px}
  .fstep{padding:10px;gap:10px;grid-template-columns:30px minmax(0,1fr);min-height:52px}
  .fstep .sn{width:30px;height:30px;font-size:.86rem}
  .fstep .tx b{font-size:.96rem}
  .fstep .tx span{font-size:.9rem}
  .fstep .tx span em{font-size:.8rem}
  .anyway{padding:10px 12px;gap:8px}
  .anyway .t b{font-size:.94rem}
  .anyway .t span{font-size:.84rem}
  .info.sm{width:44px;height:44px;font-size:.92rem}
  .flow{padding:12px;gap:8px}
  .screen .fl{grid-template-columns:84px minmax(0,1fr) 32px;gap:8px;font-size:.86rem}
  .nodm{font-size:.88rem}
  .runs li{padding:9px 2px;font-size:.9rem;gap:4px 8px}
  .runs .rs{padding:3px 8px}
  .runs .fw,.runs .ago{font-size:.82rem}
  .screen .nocold{padding:8px 12px 14px;font-size:.86rem}

  /* ---- your own AI ------------------------------------------------------ */
  .aigrid{gap:16px}
  .aicards{gap:8px}
  .aic{min-height:0;padding:14px 16px;border-radius:var(--r3);gap:4px}
  .aic:hover{transform:none}
  .aic b{font-size:1.08rem}
  .aic .mw{font-size:.9rem}
  .aic .free{right:14px;top:14px}
  .aic .st{font-size:.86rem}
  .aic.add .plus{width:36px;height:36px;font-size:1.4rem}
  .sech{font-size:.9rem}
  .sech.sm{font-size:.76rem;margin:12px 0 6px}
  .jobrow{min-height:56px;padding:10px 14px;border-radius:var(--r3);gap:10px}
  .jobrow .t b{font-size:1rem}
  .jobrow .t span{font-size:.86rem}
  .jobrow .to{font-size:.86rem;padding:6px 12px}
  .uses{padding:2px 14px}
  .use{padding:10px 0;gap:10px}
  .use .t b{font-size:.96rem}
  .use .t span{font-size:.84rem}
  .use .cost{font-size:.94rem}
  .tier{font-size:.92rem;padding:12px 14px}

  /* ---- the sheet: slides up, reaches further, bigger buttons, safe area -- */
  .sheet .pan{max-height:92dvh;border-radius:var(--r2) var(--r2) 0 0}
  .sheet .grab{margin-top:10px}
  .sheet .hd{padding:10px 16px 6px}
  .sheet .hd h2{font-size:1.35rem}
  .sheet .x{width:44px;height:44px}
  .sheet .sc{padding:4px 16px 16px;font-size:.98rem;gap:8px}
  .sheet .ft{padding:10px 16px calc(10px + env(safe-area-inset-bottom));gap:8px}
  .sheet .ft .go,.sheet .ft .no{height:52px;min-height:52px;padding:0 16px}
  .sheet .ft .no{min-width:0;flex:0 1 36%}
  .sheet .big{font-size:1.7rem}
  .sheet .act{height:48px;min-height:48px;padding:0 16px}
  .sheet .quote{font-size:1.02rem;padding:10px 14px}
  .sheet .fine{font-size:.88rem}
  .row{min-height:56px;padding:10px 12px 10px 14px;gap:10px;border-radius:12px}
  .row .t b{font-size:.98rem}
  .row .t span{font-size:.86rem}
  .row .inp.sm{min-height:44px;padding:6px 10px;font-size:.92rem;max-width:46%}
  .row .price{font-size:.98rem}
  .sw{width:56px;height:34px;position:relative}
  .sw::before{content:"";position:absolute;inset:-6px}   /* a 46px hit area under a 34px switch */
  .sw i{width:28px;height:28px}
  .sw[aria-pressed="true"] i{left:25px}
  .opt{padding:12px 14px;min-height:60px;border-radius:12px}
  .opt b{font-size:1rem}
  .opt span{font-size:.88rem}
  .inp{min-height:48px;padding:11px 14px;font-size:1rem;border-radius:12px}
  textarea.inp{min-height:100px}
  .cl button{min-height:80px;padding:14px 16px;border-radius:var(--r3)}
  .cl button b{font-size:1.15rem}
  .cl button span{font-size:.88rem}
  .cl.hues button{min-height:64px;padding:10px 12px}
  .cl.hues button b{font-size:1.02rem}
  .swl{gap:8px}
  .swl .row{padding-left:10px}
  .swl .row i{width:30px;height:30px}
  .swl .row code{font-size:.8rem}
  details summary{min-height:52px;padding:10px 14px;font-size:.96rem}
  details .in{padding:0 12px 12px}
  .screen .two,.sheet .two{grid-template-columns:repeat(2,minmax(0,1fr))}

  /* ---- the toast, above the tab bar ------------------------------------ */
  /* Centred with left:50%, a fixed box can only ever be half the screen wide,
     so a long message became a tall narrow column. On a phone it spans the
     gutters instead, the way a phone's own notices do. */
  .toast{left:var(--gutter);right:var(--gutter);width:auto;max-width:none;margin:0 auto;transform:translateY(10px);justify-content:center;
    bottom:calc(var(--tabs-h) + 18px + env(safe-area-inset-bottom));border-radius:20px;padding:12px 16px;font-size:.92rem}
  .toast.show{transform:none}
  /* a send sits in the thread; the note goes to the top-right, off the new bubble */
  /* on the assistant's own bubble, solid, so it never mixes with the words under it */
  body[data-thread] .toast{top:268px;bottom:auto;left:28px;right:28px;transform:none;max-width:none;width:auto;background:#0c1618;justify-content:center}
  body[data-thread] .toast.show{transform:none}

  /* ---- the tab bar: five words that always fit, above the home indicator -
     A brand may set its wide nav in tracked capitals; five of those do not
     fit a phone, so the tabs keep plain words whatever the brand. */
  .tabs{left:10px;right:10px;bottom:calc(10px + env(safe-area-inset-bottom));padding:5px;gap:2px}
  html[lang] .tabs a[data-nav]{height:50px;font-size:.78rem;letter-spacing:0;text-transform:none;padding:0 2px;gap:4px;min-width:0;overflow:hidden}
  .tabs a .n{min-width:18px;height:18px;padding:0 4px}
}

/* ======================================================= WIDE AGENDA ======
   From a tablet up, the same calendar: a rail of days, and that one day.
   app.css would lay the week out as four or five columns. That is the squeeze. */
@media (min-width:760px){
  /* under the bar, on the empty right, clear of the title and the tiles */
  .toast{top:132px;bottom:auto;left:auto;right:28px;transform:none}
  .toast.show{transform:none}
}
@media (min-width:760px){
  .screen>.week{display:grid;grid-template-columns:220px minmax(0,1fr);gap:22px;align-items:start}
  .screen>.week.mb-agenda .day:not(.on){display:none}
  .screen>.week.mb-agenda .day.on{display:grid;gap:10px}
  .screen>.week.mb-agenda .day h3{display:none}
  .screen>.week .mb-days{display:flex;flex-direction:column;gap:8px;order:0;margin:0;width:auto;min-width:0;
    position:sticky;top:96px;padding:0;background:none;border:0;border-radius:0;
    -webkit-backdrop-filter:none;backdrop-filter:none;overflow:visible}
  .screen>.week .mb-days button{height:48px;padding:0 16px;border-radius:999px;display:flex;align-items:center;justify-content:space-between;gap:8px;
    background:var(--glass);border:1px solid var(--glass-line);color:var(--ink);font-weight:600;font-size:1rem;cursor:pointer;text-align:left}
  html[lang] .screen>.week .mb-days button.on{background:var(--ink);color:#fff;border-color:transparent}
  .screen>.week .mb-days button .n{min-width:22px;height:22px;padding:0 6px}
  .screen .slot{display:grid;grid-template-columns:92px minmax(0,1fr) auto;grid-template-areas:"when t th" "when meta th";
    column-gap:16px;row-gap:4px;align-items:center;min-height:0;padding:16px 18px;width:100%}
  .screen .slot>.when{grid-area:when;font-size:1.35rem;line-height:1}
  .screen .slot>.t{grid-area:t}
  .screen .slot>.meta{grid-area:meta;margin:0}
  .screen .slot>.th,.screen .slot>.th.ph,.screen .slot>.th.ml{grid-area:th;width:56px;height:56px;margin:0;align-self:center}
}

/* ---- the inbox between a phone and the wide layout (760–1199px) ----------
   app.css shows the funnel list OR the open funnel up to 1199px and both side
   by side from 1200. The inbox now works the same way, and this is its half of
   that rule; the phone block above is the other half. Nothing else here
   reaches above 759px. */
@media (min-width:760px) and (max-width:1199px){
  html.anim body:not([data-ib]) #inbox .ibd{display:none}
  html.anim body[data-ib] #inbox .list,html.anim body[data-ib] #inbox>header .info{display:none}
}

/* ------------------------------------------------------ the smallest phones */
@media (max-width:359px){
  .bar{gap:6px}
  .bar .prod button{padding:0 10px;font-size:.86rem}
  .bar .whose .wmk{display:none}
  .screen>header h1{font-size:1.65rem}
  .tile>.big{font-size:2rem}
  .tile.hero>.big{font-size:2.8rem}
  .decide{flex-wrap:wrap}
  .decide .go,.decide .no{flex:1 1 100%}
  .screen .slot{grid-template-columns:52px minmax(0,1fr) auto;column-gap:10px;padding:10px 10px 10px 12px}
  .screen .ib .acts .no{flex:1 1 100%}
  html[lang] .tabs a[data-nav]{font-size:.75rem;gap:3px;padding:0 1px}
  .tabs a .n{min-width:16px;height:16px;padding:0 3px;font-size:.75rem}
  .screen .seg.filt>a{padding:0 8px;font-size:.86rem}
}

/* ======================================================== TOUCH ========= */
/* Any touch screen, any width: the same look painted without backdrop blur.
   On iOS Safari dozens of backdrop-filter layers over a world that repaints
   on every scroll frame is what produces a solid white block over the page,
   and the blur itself is the dearest thing a phone GPU can be asked for. */
@media (pointer:coarse){
  *,*::before,*::after{-webkit-backdrop-filter:none !important;backdrop-filter:none !important}
  :root{--glass:rgba(255,255,255,.965);--glass-soft:rgba(255,255,255,.92);--on-world:rgba(255,255,255,.17);--on-world-line:rgba(255,255,255,.3);--dark-glass:rgba(6,14,16,.86)}
  html[data-theme="day"]{--glass:#ffffff;--glass-soft:rgba(255,255,255,.96);--on-world:rgba(13,26,29,.06);--on-world-line:rgba(13,26,29,.13);--dark-glass:rgba(13,26,29,.08)}
  .tabs{background:rgba(6,14,16,.92)}
  .toast{background:rgba(6,14,16,.94)}
  .sheet .veil{background:rgba(2,10,14,.58)}
  .sheet .pan{background:var(--glass)}
  @media (min-width:760px){
    .bar{background:linear-gradient(rgba(4,20,23,.84),rgba(4,20,23,.66))}
    html[data-theme="day"] .bar{background:linear-gradient(rgba(255,255,255,.9),rgba(255,255,255,.76))}
  }
  /* the two soft lights in the world: gradients, not 90px blurs */
  .world i{filter:none}
  .world .a{width:92vw;height:92vw;left:-32vw;top:26vh;background:radial-gradient(closest-side,var(--c2),transparent)}
  .world .b{width:74vw;height:74vw;right:-26vw;top:-22vh;background:radial-gradient(closest-side,var(--c3),transparent)}
  .world::after{display:none}
  .stage .glow{filter:none;opacity:.42;-webkit-mask:radial-gradient(closest-side,#000 30%,transparent);mask:radial-gradient(closest-side,#000 30%,transparent)}
}
