/* Site quality and mobile polish (site review, 2026-09-25).
   Loaded LAST on the web design (tailhedge.ai), after every other stylesheet, so these rules
   override earlier ones at equal specificity. web only: web-main does not load this file.
   Each lane writes only between its own markers; each block names the review finding ids it resolves. */

/* == header == */
/* Phone and tablet header. investor-ui.js keeps these numbers current:
   --th-header-h       where the pinned header ends (side bar + top bar), the one offset every
                       anchor, floating table header and sticky strip below it should clear
   --th-mobile-side-h  the visible part of the side bar (the top bar's sticky top)
   --th-hdr-hide       how far the logo/Menu and tab rows slide up while the reader scrolls down
   html.th-hdr-up      set while those rows are slid away; the newsletter row and search bar stay */

/* Boot values until investor-ui.js measures the header: a sticky top taller than the header
   pushed the top bar down and left a gap while the page loaded. */
@media(max-width:920px){:root{--th-mobile-side-h:79px;--th-profile-nav-top:123px;--th-header-h:123px}}   /* owner-newsletter: no newsletter row on phones */
@media(min-width:601px) and (max-width:920px),(max-width:920px) and (max-height:500px){:root{--th-mobile-side-h:45px;--th-profile-nav-top:95px;--th-header-h:95px}}
@media(max-width:920px) and (max-height:500px){:root{--th-profile-nav-top:89px;--th-header-h:89px}}

/* chrome-01, home-03: the search sheet opens above all page chrome (phone header z-index 500,
   its Menu drawer 501). The cookie layer stays above it at 10030+. */
.omni{z-index:1000}
@media(max-width:760px){.omni{padding-top:env(safe-area-inset-top,0px)}}

/* theses-16: the share panel opens above the phone header and has a visible close button */
@media(max-width:920px){#shpop{z-index:900}}
#shpop .shp-x{position:absolute;top:6px;right:6px;width:36px;height:36px;display:flex;align-items:center;justify-content:center;margin:0;padding:0;border:1px solid transparent;border-radius:8px;background:transparent;color:var(--muted);font:400 22px/1 var(--font,Arial,sans-serif);cursor:pointer}
#shpop .shp-x:hover{color:var(--text);border-color:var(--border)}
#shpop .shp-x:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
#shpop .shp-k,#shpop .shp-t{padding-right:36px}

@media(max-width:920px){
  /* chrome-02, funds-people-03, news-podcasts-07, research-03, analyze-02, theses-08: compact rows.
     At 375x812 the full header is about 150px; while scrolling down only the newsletter row and the
     search bar stay pinned. */
  .app .side.iv-mobile-compact{min-height:0;padding:3px 8px;gap:2px 4px;transition:top .18s ease}
  .app .side.iv-mobile-compact:has(#navlinks:empty){grid-template-rows:36px 34px 25px}
  .app .side.iv-mobile-compact .logo-badge svg{width:32px;height:32px}
  .app .side.iv-mobile-compact .iv-mobile-menu{min-height:36px}
  /* chrome-11: all three tabs share one centred, single-line style (the active "Find investments"
     pill wrapped onto two left-aligned lines) */
  .app .side.iv-mobile-compact .iv-primary-grid>.iv-primary-home,.app .side.iv-mobile-compact .iv-primary-grid>.iv-primary-find,.app .side.iv-mobile-compact .iv-primary-grid>.iv-primary-portfolio{min-height:34px;padding:4px 6px;font-size:12px;line-height:1.15;white-space:nowrap;justify-content:center;text-align:center}
  .app .side.iv-mobile-compact .iv-primary-grid>.iv-primary-find{grid-column:2}
  .app .side.iv-mobile-compact #navlinks>a.iv-newsletter-link{min-height:25px;margin:0;padding:2px 9px;font-size:11.5px;line-height:1.2;border-radius:6px;gap:7px}
  .app .side.iv-mobile-compact #navlinks>a.iv-newsletter-link svg{width:15px;height:15px}
  .app .topbar{height:44px;transition:top .18s ease}
  #onpage-m{min-height:41px;padding:4px 12px;transition:top .18s ease}
  #onpage-m a{min-height:32px;padding:4px 10px}
  html.th-hdr-up .app .side.iv-mobile-compact{top:calc(-1 * var(--th-hdr-hide,0px))}
  /* news-podcasts-08: a section anchor lands below the whole pinned header and the on-page strip */
  [id^="sec-"]{scroll-margin-top:calc(var(--th-header-h,var(--topbar-h)) + var(--onpage-m-h,0px) + 10px)}

  /* chrome-10: the Menu drawer. Its items keep their own order (the tab row's grid-row reached the
     drawer copy of "Find investments"), the two items already on screen are not repeated, the page
     behind it cannot scroll, a dimmed backdrop closes it on tap, and it never runs past the screen. */
  .app .side.iv-mobile-compact .iv-mobile-menu-panel a{grid-row:auto;grid-column:auto}
  .app .side.iv-mobile-compact .iv-mobile-menu-panel .iv-primary-find,.app .side.iv-mobile-compact .iv-mobile-menu-panel .nl-nav-link{display:none!important}
  .app .side.iv-mobile-compact .iv-mobile-menu-panel.is-open{max-height:calc(100dvh - var(--th-mobile-side-h,157px) - 10px);overscroll-behavior:contain}
  /* html only: with body hidden too, body becomes its own scroll container and the sticky header
     scrolls off with the page */
  html:has(.iv-mobile-menu-panel.is-open){overflow:hidden}
  html:has(.iv-mobile-menu-panel.is-open) .app .maincol::before{content:"";position:fixed;inset:0;z-index:499;background:rgba(10,15,28,.45)}

  /* chrome-04: profile sections are one scrollable row of tabs instead of a pinned 3x3 grid */
  .maincol > .pl-tabs{display:flex;flex-wrap:nowrap;gap:6px;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none;padding:5px 12px;margin-bottom:12px;transition:top .18s ease;-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 22px),transparent);mask-image:linear-gradient(90deg,#000 calc(100% - 22px),transparent)}
  .maincol > .pl-tabs::-webkit-scrollbar{display:none}
  .maincol > .pl-tabs .listtab{flex:0 0 auto;min-width:0;min-height:36px;padding:6px 12px;white-space:nowrap;font-size:12.5px}
}
@media(max-width:360px){
  .app .side.iv-mobile-compact .iv-primary-grid>.iv-primary-home,.app .side.iv-mobile-compact .iv-primary-grid>.iv-primary-find,.app .side.iv-mobile-compact .iv-primary-grid>.iv-primary-portfolio{padding-inline:2px;font-size:11px}
}
/* chrome-03, chrome-12: tablets and landscape phones fit the side bar on one row: logo, the three
   tabs, the newsletter link and Menu. The Menu button is no longer a 250px bar. */
@media(min-width:601px) and (max-width:920px),(max-width:920px) and (max-height:500px){
  .app .side.iv-mobile-compact{grid-template-columns:auto auto auto auto minmax(0,1fr) auto;grid-template-rows:auto;padding:4px 10px;gap:4px 6px}
  .app .side.iv-mobile-compact:has(#navlinks:empty){grid-template-rows:36px}
  .app .side.iv-mobile-compact .logo{grid-column:1;grid-row:1;margin-right:6px}
  .app .side.iv-mobile-compact .iv-primary-grid>.iv-primary-home{grid-column:2;grid-row:1;padding-inline:10px}
  .app .side.iv-mobile-compact .iv-primary-grid>.iv-primary-find{grid-column:3;grid-row:1;padding-inline:10px}
  .app .side.iv-mobile-compact .iv-primary-grid>.iv-primary-portfolio{grid-column:4;grid-row:1;padding-inline:10px}
  .app .side.iv-mobile-compact #navlinks>a.iv-newsletter-link{grid-column:5;grid-row:1;justify-self:start;min-width:0;max-width:100%;min-height:32px;overflow:hidden;white-space:nowrap}
  .app .side.iv-mobile-compact #navlinks>a.iv-newsletter-link>span:last-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .app .side.iv-mobile-compact .iv-mobile-menu{grid-column:6;grid-row:1}
}
@media(min-width:601px) and (max-width:920px) and (min-height:501px){.app .topbar{height:50px}}
/* chrome-03: landscape phones keep the pinned header under 30% of the height. The wordmark comes
   back where the row has room, and the on-page strip scrolls with the page. */
@media(max-width:920px) and (max-height:500px){
  .app .side.iv-mobile-compact .logo-words{display:flex}
  .app .topbar{height:44px}
  #onpage-m{position:relative;top:auto}
  [id^="sec-"]{scroll-margin-top:calc(var(--th-header-h,var(--topbar-h)) + 8px)}
}
/* Below 700px wide (landscape, and portrait from 601px) the wordmark gives way to the logo badge.
   It is hidden from sight only, not removed, so the home link keeps its name "Tailhedge" for
   screen readers (new-regression-1: display:none left the link with no name). */
@media(max-width:699px) and (max-height:500px),(min-width:601px) and (max-width:699px){.app .side.iv-mobile-compact .logo-words{display:block;position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}}

/* chrome-12: the top bar at 768-1180px. Labels stay on one line, the search box shows its hint
   instead of an empty field, and touch screens do not advertise the "/" key. */
.topbar #crumb{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.topbar #livebadge{white-space:nowrap;flex:0 0 auto}
.topbar .acct-pair,.topbar .acct-btn{flex-shrink:0;white-space:nowrap}
.topbar .omni-btn .hint{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
@media(max-width:980px){.topbar .omni-btn .hint{display:block}}
@media(pointer:coarse){.topbar .omni-btn .k{display:none}}

/* analyze-02: up to 920px the stock page's company header was pinned at 60-70px, underneath the
   taller phone/tablet header, so it never showed while pinned. It now scrolls with the page instead
   of adding up to 127px of pinned chrome; desktop keeps it pinned under the top bar. */
@media(max-width:920px){#an-body > .section-title:first-child{position:static}}

@media(prefers-reduced-motion:reduce){.app .side.iv-mobile-compact,.app .topbar,#onpage-m,.maincol > .pl-tabs,#an-body > .section-title:first-child{transition:none}}

/* home-02, chrome-13, pricing-legal-09: the footer's "Cookie settings" link replaces the floating
   button once a choice is made (cookie-consent.js) */
.sitefoot .sf-meta a[data-th-cookie-open]{cursor:pointer}
/* regression-1 (chrome-03 follow-up): the one-row tablet/landscape header cut the newsletter label
   to "Newsletter: coming …" or "Newsletter: …" between 568 and 740px wide. The wordmark now gives
   way to the logo badge below 700px in portrait too (landscape already did; both share the rule
   above), the tabs sit a little tighter up to 640px, and the label wraps onto a second line
   instead of being cut, so "coming soon" always shows. */
@media(min-width:601px) and (max-width:920px),(max-width:920px) and (max-height:500px){
  .app .side.iv-mobile-compact #navlinks>a.iv-newsletter-link{white-space:normal}
  .app .side.iv-mobile-compact #navlinks>a.iv-newsletter-link>span:last-child{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;white-space:normal;text-overflow:clip;line-height:1.15}
}
@media(min-width:601px) and (max-width:640px),(max-width:640px) and (max-height:500px){
  .app .side.iv-mobile-compact .iv-primary-grid>.iv-primary-home,.app .side.iv-mobile-compact .iv-primary-grid>.iv-primary-find,.app .side.iv-mobile-compact .iv-primary-grid>.iv-primary-portfolio{padding-inline:7px}
}
/* the narrowest landscape phones (480-540px): the envelope icon gives its room to the words */
@media(max-width:540px) and (max-height:500px){
  .app .side.iv-mobile-compact{column-gap:4px}
  .app .side.iv-mobile-compact .iv-primary-grid>.iv-primary-home,.app .side.iv-mobile-compact .iv-primary-grid>.iv-primary-find,.app .side.iv-mobile-compact .iv-primary-grid>.iv-primary-portfolio{padding-inline:5px}
  .app .side.iv-mobile-compact #navlinks>a.iv-newsletter-link{padding-inline:7px}
  .app .side.iv-mobile-compact #navlinks>a.iv-newsletter-link>.sn-ic{display:none}
}
/* regression-2 (chrome-02 follow-up): while the logo/Menu and tab rows are slid away, the tabs fade
   out once the slide ends, so no sliver of the active tab shows above the newsletter row. They stay
   focusable, and focus or a scroll up brings the rows back at full strength at once. */
@media(max-width:920px){html.th-hdr-up .app .side.iv-mobile-compact .iv-primary-grid>.iv-primary{opacity:0;transition:opacity 0s linear .18s}}
/* == end header == */

/* == css-1 == */
/* chrome-08, home-10: the display serif was defined only in the light token block, so in the dark
   theme every var(--iv-display) heading fell back to the sans UI font. It is theme-independent. */
:root{--iv-display:Georgia,'Times New Roman',serif}

/* home-01: Multi-Signal pick rows on phones. The padding override for .th-questions sat inside
   @container(max-width:600px), but .th-questions is that container and cannot query itself, so
   phones kept the 30px desktop padding and company names shrank to one letter at 320px. */
@media(max-width:640px){.th-questions{padding:22px 14px 20px}.th-question{padding:22px 14px 16px}}
/* On a narrow card the 12-month figure moves under the company name. */
.th-pick-list{container:th-picks/inline-size}
@container th-picks (max-width:300px){.th-pick{grid-template-columns:auto auto minmax(0,1fr);row-gap:0}.th-pick em{grid-column:3;justify-self:start}}
/* home-16: at tablet width the third card spans the row instead of leaving the right half empty */
@container(max-width:900px){.th-question:last-child:nth-child(odd){grid-column:1/-1}}

/* home-04: under "Quality meets value" the method line and the "More research candidates" link
   stack on phones at a readable size (they shrank to 8-9px and overlapped at 320px) */
@media(max-width:620px){
  .iv-candidate-actions{flex-direction:column;align-items:flex-start;gap:2px}
  .iv-candidate-actions .iv-method{flex:0 1 auto;width:100%}
  .iv-candidate-actions .iv-method summary{display:block;font-size:12px;white-space:normal}
  .iv-candidate-actions .iv-method summary span{font-size:12px;white-space:normal}
  .iv-candidate-actions .pw-more-research{margin-left:0;font-size:13px}
}
/* home-18: larger hit areas for the standalone home links without moving anything (the inline
   "Pro" links inside sentences are exempt). Padding with a matching negative margin, so the
   "More research candidates" link keeps the space before its arrow and the section keeps its height. */
.pw-more-research a{padding-block:6px;margin-block:-6px}
#view .iv-eyebrow>a.section-destination,.th-spotlight-label>a{padding-block:6px;margin-block:-6px}
/* home-18 (repair): wider screens only. At 760px and below chrome-20 already makes these footer links
   28px tall; there the padding sat inside that height and the negative margin pulled the rows 2px into each other. */
@media(min-width:761px){.sitefoot .sf-meta a{padding-block:3px;margin-block:-3px}}
.th-questions-foot>a,#home-day-summary>h3>a,.sitefoot .sf-in>.sf-h>a{padding-block:5px;margin-block:-5px}
/* home-18 (repair 2): the two disclaimer links sit on consecutive lines on phones; 2px keeps their hit areas from overlapping */
.sitefoot .sf-in>p>a{padding-block:2px;margin-block:-2px}
@media(min-width:761px){.sitefoot .sf-in>p>a{padding-block:5px;margin-block:-5px}}

/* home-19: the newsletter title uses the display face at regular weight, like the other home section titles */
.nl-intro h2{font-family:var(--iv-display);font-weight:400}

/* chrome-15: sign-in and create-account benefits put each title on its own line above its description */
.ap-pt .pt-t,.ap-pt .pt-d{display:block}
/* chrome-15: the four benefit icons draw in one ink; the bell was a colour emoji beside plain text glyphs (a transparent glyph plus a text-colour shadow gives its silhouette) */
.ap-pt .pt-ic{color:transparent;text-shadow:0 0 0 var(--text)}

/* research-04: Portfolio header on phones. The stat labels and their notes wrap instead of running
   into the next column, and the order-ticket search box (min-width 200px) no longer covers the price hint. */
@media(max-width:760px){.lv-top .lv-stat .k,.lv-top .lv-stat .v small{white-space:normal;overflow-wrap:anywhere}}
.lv-tk-inst .lv-search.compact{min-width:0}
@media(max-width:420px){.lv-tk-inst{grid-template-columns:minmax(0,1fr);gap:6px}.lv-tk-px{text-align:left}}

/* research-13: the "Record a trade" form fits its card at every phone width (the 1fr tracks grew to
   the date input's and the select's own width); one column at 360px and below */
.lv-order{grid-template-columns:repeat(2,minmax(0,1fr))}
.lv-order select,.lv-order input{width:100%;min-width:0;box-sizing:border-box}
@media(max-width:360px){.lv-order{grid-template-columns:minmax(0,1fr);width:100%;box-sizing:border-box}}
/* research-13: the four management tabs sit in a 2 x 2 grid on phones ("Orders & history" wrapped onto three lines) */
@media(max-width:420px){.lv-mtabs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}}

/* research-27: company fact tiles show the whole value on phones (CEO tenure, next earnings date and its basis) */
@media(max-width:600px){.lv-fact b{white-space:normal;overflow-wrap:break-word;text-overflow:clip}}

/* research-28: at 360px and below the screener filters take one column, so placeholders and select values are not cut */
@media(max-width:360px){.scr-filters .scr-filter-grid{grid-template-columns:minmax(0,1fr)!important}}

/* research-19: on phones the accent bar stays beside the heading when the title row wraps (the chip or
   the Investor view / All signals toggle on a second line). In a flex title its static position was the middle. */
@media(max-width:760px){#view #res-root>.section-title:not(:has(.stock-identity))::before{top:16px}}

/* research-20: the blurred preview rows carry the table's 15 cells (content-access.js); Investor view
   hides the same eight columns on them as on real rows, so they line up with its seven headers */
#res-root.iv-basic-screen #res-tbody>.th-thesis-locked-row>td:is(:nth-child(2),:nth-child(3),:nth-child(4),:nth-child(5),:nth-child(6),:nth-child(7),:nth-child(9),:nth-child(15)){display:none}

/* research-07: All signals on phones: shorter rows (the swipe hint is added when the view switches, investor-ui.js) */
@media(max-width:760px){#res-root:not(.iv-basic-screen) #res-tbody>.rl>td{padding-top:9px;padding-bottom:9px}}

/* research-08: All signals fits the 1440px desktop. Company names, the valuation verdict and the
   Owned-by notes wrap, the sector column drops its 96px floor, and cells use 4px side padding. */
@media(min-width:921px){
  #res-root:not(.iv-basic-screen) #res-table-wrap th:not(:first-child),#res-root:not(.iv-basic-screen) #res-tbody>.rl>td:not(:first-child){padding-left:4px;padding-right:4px}
  #res-root:not(.iv-basic-screen) #res-tbody td.tkr-cell .nm{white-space:normal;max-width:none}
  #res-root:not(.iv-basic-screen) #res-tbody td.sector-cell{min-width:0}
  #res-root:not(.iv-basic-screen) #res-tbody .verdict-chip{white-space:normal;min-width:84px;max-width:100px;text-align:center;line-height:1.25}
  #res-root:not(.iv-basic-screen) #res-tbody .held-cell .hb{max-width:116px}
  #res-root:not(.iv-basic-screen) #res-tbody .held-cell .hb>.chip{max-width:112px}
  #res-root:not(.iv-basic-screen) #res-tbody .held-cell .pk-hold,#res-root:not(.iv-basic-screen) #res-tbody .held-cell .pk-sen{white-space:normal;text-wrap:pretty}
}
/* == end css-1 == */

/* == css-2 == */
/* analyze-01: Biggest buys/sells rows. The share detail could not shrink, so the fund name
   collapsed to 0px and the detail spilled over the ADD/TRIM pill. Name (and its watch star)
   on the first line, detail on its own line; the pill and the $ value keep their columns. */
.hf-lane .hf-mvt{flex-wrap:wrap;align-items:center;column-gap:2px;row-gap:0;min-width:0;overflow:hidden}
.hf-lane .hf-mvn{flex:0 1 auto;min-width:0;max-width:calc(100% - 32px)}
.hf-lane .hf-mvd{flex:1 0 100%;min-width:0;white-space:normal;line-height:1.35}
.hf-lane .hf-mvt>.fw-star{width:28px;height:28px;padding:5px;margin:-5px 0}
/* analyze-01: new positions / exits as chips instead of comma-joined links each followed by a star */
.hf-nlist{display:flex;flex-wrap:wrap;gap:5px 6px;margin-top:6px}
.hf-nchip{display:inline-flex;align-items:center;min-width:0;max-width:100%;min-height:28px;padding:2px 10px;border:1px solid var(--border);border-radius:999px;background:var(--card-2);font-size:12px;line-height:1.3}
.hf-nchip>a{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hf-nchip>.fw-star{width:24px;height:24px;padding:4px;margin:-2px -7px -2px 2px}
.hf-nmore{align-self:center;font-size:12px;color:var(--muted)}

/* analyze-09: the Pro note now sits above the (capped) placeholder rows */
.evc .evc-pro-note{margin:10px 0 0;font-size:12px;color:var(--muted);line-height:1.5}

/* analyze-13: Thesis standing grade chips broke as "A" over "-" (#view .chip wraps anywhere on phones) */
#view .tstand-h .chip{white-space:nowrap;overflow-wrap:normal;flex:0 0 auto}

/* analyze-18: "Save to" select read "My watchl" at 375 and "My" at 320. Select and button get a row each. */
@media (max-width:600px){
  .stock-watch-action label{flex:1 1 100%}
  .stock-watch-action button[data-stock-watch-toggle]{flex:1 1 100%;justify-content:center}
}

/* analyze-19: the Held-by cell wrapped two fund chips into a 63px column and inflated the
   Company scores row to 162px. One line of chips; the table already scrolls sideways. */
@media (max-width:760px){
  #view .rkbar .tbl td.lefty .hb{flex-wrap:nowrap;white-space:nowrap}
  #view .rkbar .tbl td.lefty .hb>*{flex:0 0 auto;white-space:nowrap;overflow-wrap:normal;max-width:none}
}

/* analyze-m02: stated-targets axis on phones: the end labels and the caption are HTML, so they stay 11px */
.ef-axis-cap{margin:6px 0 0;font-size:11px;line-height:1.4;color:var(--muted);text-align:center}
.ef-axis.nw{margin:2px 0 0}
.ef-axis.nw .ef-ax{font-size:13px}
.ef-axis-lab{display:flex;justify-content:space-between;gap:8px;margin:0 0 8px;padding:0 5%;font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}

/* analyze-26: the in-page section nav wraps into pill rows on phones instead of cutting "Owr…",
   and the sideways-scroll control reads as a thin scroll indicator, not a settings slider. */
@media (max-width:760px){
  #view .iv-page-links{flex-wrap:wrap;white-space:normal;overflow-x:visible;gap:6px;padding:2px 0 12px}
  #view .iv-page-links a{display:inline-flex;align-items:center;min-height:32px;padding:4px 11px;border:1px solid var(--border);border-radius:999px;background:var(--card-2);font-size:12px;line-height:1.2;text-decoration:none}
}
.th-horizontal-drag{-webkit-appearance:none;appearance:none;height:22px;margin:0 0 4px;background:transparent}
.th-horizontal-drag::-webkit-slider-runnable-track{height:4px;border-radius:2px;background:var(--border)}
.th-horizontal-drag::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:48px;height:4px;margin-top:0;border:0;border-radius:2px;background:var(--accent)}
.th-horizontal-drag::-moz-range-track{height:4px;border-radius:2px;background:var(--border)}
.th-horizontal-drag::-moz-range-thumb{width:48px;height:4px;border:0;border-radius:2px;background:var(--accent)}
.th-horizontal-drag:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

/* theses-02: Prove-me-wrong ledger: on phones the status chip wrapped into the 28px first column
   and printed S-T-A-N-D-I-N-G down the page. It goes under the criterion text instead. */
@media (max-width:560px){
  #view .killrow>.chip{grid-column:2;justify-self:start;margin-top:4px;white-space:nowrap;overflow-wrap:normal}
}

/* theses-03: "Per-name geographic split": in a narrow card (phones, and the 1024 side column)
   each name is one block (ticker, weight, outside-home share) with the filing basis below at
   full width, not a 102px column. A container query, so it follows the card, not the window. */
.otx-glob{container-type:inline-size}
@container (max-width:560px){
  #view .otx-glob .otx-src .tbl-wrap{overflow-x:visible}
  #view .otx-glob .otx-src .otx-tbl{display:block;width:100%;min-width:0}
  #view .otx-glob .otx-src .otx-tbl thead{display:none}
  #view .otx-glob .otx-src .otx-tbl tbody{display:block}
  #view .otx-glob .otx-src .otx-tbl tr{display:flex;flex-wrap:wrap;align-items:baseline;gap:3px 12px;padding:10px 12px;border-bottom:1px solid var(--border)}
  #view .otx-glob .otx-src .otx-tbl tr:last-child{border-bottom:0}
  #view .otx-glob .otx-src .otx-tbl td{display:block;padding:0;border:0;text-align:left}
  #view .otx-glob .otx-src .otx-tbl td:first-child{font-weight:700}
  #view .otx-glob .otx-src .otx-tbl td:nth-child(2)::after{content:" of basket";font-weight:400;color:var(--muted)}
  #view .otx-glob .otx-src .otx-tbl td:nth-child(3)::after{content:" outside home";font-weight:400;color:var(--muted)}
  #view .otx-glob .otx-src .otx-tbl td:last-child{flex:1 1 100%;max-width:none!important}
}

/* theses-12: scenario model: the value column fits its text ("1.12× value · 50% chance")
   instead of wrapping at 74px; on phones the scenario text drops to its own line. */
/* a wrapping row, not a grid: in the 250px side column at 1024 the third grid column was ~11px */
.killrow.otx-scen{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:12px;row-gap:4px}
.killrow.otx-scen>.kid{flex:0 0 48px}
.killrow.otx-scen>.num{flex:0 0 auto;white-space:nowrap}
.killrow.otx-scen>.kc{flex:1 1 110px;min-width:0}
/* theses-12 (repair): once "what happens" is opened the narrative takes the whole row; sharing it
   left a ~140px column in the 1440 side card, three or four words a line */
.killrow.otx-scen>.kc:has(details[open]){flex-basis:100%}

/* theses-13: "Why it is in" was nowrap (.tbl td beat .otx-whyin) and cut mid-word */
.tbl td.otx-whyin{white-space:normal;text-align:left}
/* theses-13 at 1024: even full width, ~720px is short of the table's ~840px; long headers
   ("Return since Jul 2018") wrap and "Why it is in" starts at 200px, so all six columns fit */
@media (min-width:761px) and (max-width:1279px){
  .otx-hold .otx-tbl th{white-space:normal}
  .otx-hold .tbl td.otx-whyin{min-width:200px}
}

/* theses-14: performance chart timeline: each pin's event as text, not a hover-only title */
.evkey.evkey-list{display:block}
.evkey-list .evkey-l{display:block;margin-bottom:4px}
.evkey-r{display:grid;grid-template-columns:17px 80px minmax(0,1fr);gap:8px;align-items:baseline;padding:4px 0;border-top:1px solid var(--border);font-size:12px;line-height:1.5;color:var(--muted)}
.evkey-r:first-of-type{border-top:0}
.evkey-r>i{width:17px;height:17px;border-radius:50%;background:var(--p-ot);color:#fff;font-style:normal;font-size:10px;font-weight:800;display:inline-flex;align-items:center;justify-content:center;align-self:start;margin-top:1px}
.evkey-r>.evkey-d{color:var(--faint);white-space:nowrap;font-variant-numeric:tabular-nums}
.evkey-r>.evkey-e{min-width:0;overflow-wrap:anywhere;color:var(--text)}
@media (max-width:560px){
  .evkey-r{grid-template-columns:17px minmax(0,1fr);row-gap:1px}
  .evkey-r>.evkey-e{grid-column:2}
}

/* theses-15: "Catalysts ahead" on phones: no inner 440px scroller that traps the thumb.
   The page scrolls; the first 8 show and a button reveals the rest. */
.th-up-more{display:none}
@media (max-width:760px){
  #view .th-upcoming-scroll{max-height:none;overflow-y:visible;overscroll-behavior:auto;padding-right:0;scrollbar-gutter:auto}
  #view .th-upcoming-scroll:not(.th-up-all) .th-catalyst-item:nth-child(n+9){display:none}
  #view .th-up-more{display:inline-flex;align-items:center;justify-content:center;min-height:40px;margin-top:10px}
  #view .th-up-scrollnote{display:none}
}

/* theses-21: small tap targets on the thesis board and pages */
thead th .thi::after{inset:-4px}
.th-thesis-access-summary a[href="#/pricing"]{display:inline-flex;align-items:center;min-height:32px;padding:4px 12px;border:1px solid var(--border-2);border-radius:999px}
.otx-src summary{min-height:26px}
.otx-src summary::before{font-size:15px;line-height:1}
.th-catalyst-thesis{padding:4px 0;margin-bottom:2px}

/* theses-22: under 370px: keep Share on the title row (icon only; its aria-label still names it)
   and show that the one-row tab strip scrolls, with an edge fade the last tab can clear */
@media (max-width:369px){
  #view .section-title.pillar-title-ot{flex-wrap:nowrap!important}
  #view .section-title.pillar-title-ot>span{flex:1 1 auto;min-width:0}
  #view .section-title.pillar-title-ot>.shbtn{flex:0 0 auto;margin-left:auto}
  #view .section-title.pillar-title-ot>.shbtn>span{display:none}
}
@media (max-width:420px){
  #view .ot-tabs{-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 18px),transparent);mask-image:linear-gradient(to right,#000 calc(100% - 18px),transparent)}
  #view .ot-tabs>button:last-child{margin-right:18px}
}
/* analyze-01 (phones): the pill and the $ value share one right-hand column (value over pill), so
   the fund name and its share detail get the rest of the row instead of about 50px */
@media (max-width:760px){
  .hf-lane .pmi.hf-mv{display:grid;grid-template-columns:24px minmax(0,1fr) auto;column-gap:9px;row-gap:3px;align-items:center}
  .hf-lane .hf-mv>.hf-av{grid-column:1;grid-row:1/span 2;align-self:start;margin-top:2px}
  .hf-lane .hf-mv>.hf-mvt{grid-column:2;grid-row:1/span 2}
  .hf-lane .hf-mv>.pmi-v{grid-column:3;grid-row:1;justify-self:end;margin-left:0}
  .hf-lane .hf-mv>.hf-act{grid-column:3;grid-row:2;justify-self:end}
}
/* analyze-01, analyze-14 (phones): the fund panel sat in three nested frames (disclosure > card >
   tile, 150px of padding and borders at 320), leaving 170px for a lane row or a chart. Inside a
   disclosure the card drops its own frame, and its tiles take less padding. */
@media (max-width:560px){
  #view .iv-disclosure>.hf-card,#view .iv-disclosure>.nd-card{padding:0;border:0;border-radius:0;box-shadow:none}
  #view .hf-card .nd-ch,#view .nd-card .nd-ch{padding:10px}
}
/* analyze-14 (phones): the event chart card keeps its frame but takes less side padding, so the
   drawing gains 16px (200 to 216px at 320) for the price labels and markers */
@media (max-width:560px){
  #view .card.evc{padding-left:12px;padding-right:12px}
}
/* == end css-2 == */

/* == css-3 == */
/* funds-people-02 (critical): phone tables in Fund activity (Atlas) and on a fund's page.
   Three nested boxes (#atlas-root card, #atlas-body/#fund-body 20px side padding, inner .card
   10px padding + border) left each table 251px of a 375px screen, and the pinned name column
   (sticky, nowrap, no width cap) took all of it. On phones the inner boxes lose their side
   padding and side borders, and every pinned name column is capped so data columns show. */
@media (max-width:760px){
  #atlas-body,#fund-body{padding-left:0!important;padding-right:0!important}
  #atlas-body .card,#fund-body .card{padding-left:0!important;padding-right:0!important;
    border-width:1px 0 0!important;border-radius:0!important;box-shadow:none!important}
  #atlas-body .tbl th.id-col,#atlas-body .tbl td.id-col,#fund-body .tbl th.id-col,#fund-body .tbl td.id-col,
  #atlas-body [data-senboard] ~ .card .tbl th:first-child,#atlas-body [data-senboard] ~ .card .tbl td:first-child,
  #atlas-body .sen-tbl th:first-child,#atlas-body .sen-tbl td.sen-inst{
    min-width:116px;max-width:128px;white-space:normal;overflow-wrap:anywhere;line-height:normal}
  #atlas-body .tbl td.id-col .av,#fund-body .tbl td.id-col .av{display:none}
  #atlas-body .tbl td.id-col .nm,#fund-body .tbl td.id-col .nm,#atlas-body .sen-tbl .sen-inm{
    max-width:none;white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  #atlas-body .tbl td.id-col .cell2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  /* Fund directory: fixed layout from a <colgroup>, the first column was 220px */
  #atlas-body .fund-directory-scroll colgroup col:first-child{width:136px!important}
  #atlas-body .fund-directory-scroll .tbl{min-width:1150px}
  #atlas-body .fund-directory-scroll .fund-identity .av,#atlas-body .fund-directory-scroll .fund-identity .shbtn{display:none}
  /* the watch star after a pinned fund name: 24px (still a 24px target) so it stays on the name line */
  #atlas-body .tbl td.id-col .fw-star{width:24px;height:24px;min-width:24px;padding:4px;margin:-4px 0 -4px 2px}
}
/* funds-people-05: phone card view of the people tables (people-page.css, max-width:600px). The
   label prefix is printed only where a cell has a non-empty data-label (people-page.js now labels
   every table from its own header), and column 6 is no longer hidden: it was 'Modeled profit / loss'
   in the directory and 'Reported amount' / 'Current price' on the profile. */
@media (max-width:600px){
  .pp-table td::before{content:none}
  .pp-table td[data-label]:not([data-label=""])::before{content:attr(data-label) ": "}
  .pp-table td:nth-child(6){display:block}
}
/* funds-people-06: the locked Atlas search a free reader sees (icon + disabled field + "Pro (coming
   soon)" chip). The chip wrapped under the field, which made the box 64px tall and dropped the
   top:50% icon onto the field's bottom border. Field and chip now share one line at every width;
   the short placeholder fits beside the chip, and the aria-label still says what Pro adds. */
.afind.afind-locked{display:flex;align-items:center;gap:8px;flex-wrap:nowrap}
.afind.afind-locked>input{flex:1 1 auto;min-width:0;text-overflow:ellipsis}
.afind.afind-locked>.chip{flex:0 0 auto;white-space:nowrap;margin:0}
/* funds-people-07: the Big-moves quadrant. The four corner names are HTML labels at fixed pixel
   offsets; on a phone they overprinted each other and the dots ("CONVICTIOROWDS BUYING"), and the
   legend under the chart already names the four corners in the same colours. On wider screens
   the bottom pair sits above the plot's bottom edge instead of on the axis labels. */
@media (max-width:760px){#aquad .qlab{display:none}}
@media (min-width:761px){#aquad .qlab.bl,#aquad .qlab.br{bottom:calc(46 / 440 * 100% + 8px)}
  #aquad .qlab.tl,#aquad .qlab.bl{left:calc(62 / 760 * 100% + 8px)}}
/* funds-people-12: tablet and desktop Atlas / fund tables. The fund page kept the holdings table
   and the sector card side by side down to 1001px, so "Largest positions" was 314px wide at 1024
   and cut its Move column at 1440; it now stacks below 1500px. Column headers ("EST. RETURN (i)")
   were nowrap and set the column widths, and the Fund name column ran to 373px; headers now wrap
   and the name column is capped, so Holdings and Ratings fit a 1440 screen without clipping. */
@media (max-width:1499px){.fp-grid{grid-template-columns:minmax(0,1fr)}.fp-leg{max-width:440px}}
@media (min-width:761px){
  #atlas-body .tbl th.id-col,#atlas-body .tbl td.id-col,#fund-body .tbl th.id-col,#fund-body .tbl td.id-col{
    min-width:200px;max-width:260px;white-space:normal}
  #atlas-body .tbl th:not(.id-col),#fund-body .tbl th:not(.id-col){white-space:normal;line-height:1.25;vertical-align:bottom}
}
@media (min-width:761px) and (max-width:1199px){
  #atlas-body .tbl th.id-col,#atlas-body .tbl td.id-col,#fund-body .tbl th.id-col,#fund-body .tbl td.id-col{min-width:140px}
  #fund-body .tbl td:nth-child(3){white-space:normal;min-width:100px;max-width:130px}
}
/* funds-people-13: the fund page's Sector mix legend. Its rows had a 180px floor and a fixed 52px
   amount column, so at 320px the amounts and the % column ran past the card. */
@media (max-width:760px){
  .fp-leg{min-width:0;flex:1 1 100%}
  .fp-leg .nm{min-width:0;flex:1 1 auto}
  .fp-leg .dl{width:auto;flex:0 0 auto}
}
/* news-podcasts-10: content-access.css gives every .mbc-meta justify-content:space-between (meant
   for its own teaser card), which spread a claim card's byline (speaker · show · ▶ 7:26 · time
   frame) across the whole card. Claim cards get their original packed row back. */
.mbc-claim .mbc-meta{justify-content:flex-start;gap:3px 9px}
/* news-podcasts-22: the "Unlock with Pro (coming soon)" link was a 19px-tall target on phones */
@media (max-width:760px){.th-native-upgrade{display:inline-flex;align-items:center;min-height:32px}}
/* news-podcasts-15: the one row under the Shows table that says how many shows Pro adds */
.mb-locked-more td{padding-top:6px;padding-bottom:6px}
.mb-locked-more a{display:inline-flex;align-items:center;min-height:32px;font-weight:700}
/* news-podcasts-17: phone section titles are flex rows (readiness-mobile.css) and the 3px accent
   bar is absolutely positioned with top:auto, so its static position was centred on the WHOLE
   wrapped title block: on a two-line title it floated beside nothing. align-self pins its static
   position to the first line instead. */
@media (max-width:760px){#view .section-title:not(:has(.stock-identity))::before{align-self:flex-start}}
/* funds-people-21: the Rotation heatmap on phones: sector names stay pinned while the quarters
   scroll (the grid opens on the latest quarter), and a one-line hint says where the rest are. */
.heat-hint{display:none}
@media (max-width:760px){
  .heat-hint{display:block;margin:0 0 6px;font-size:12px;color:var(--faint)}
  .heat>.lbl,.heat>.qh:first-child{position:sticky;left:0;z-index:1;background:var(--card);align-self:stretch}
  .heat>.lbl{display:flex;align-items:center}
}
/* funds-people-18: small text links on phones get a taller tap box without moving anything (padding
   plus an equal negative margin): the fund names under each ticker in the moves lists (13px tall),
   the fund page breadcrumb (14px) and its CIK link (20px). The (i) buttons already carry a 42px
   invisible hit area on touch screens (index.html, pointer:coarse). */
@media (max-width:760px){
  .mv .co{padding:6px 0;margin:-6px 0}
  .mv .co a{display:inline-block;vertical-align:middle;max-width:100%;padding:6px 0;margin:-6px 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .fp-crumb a{display:inline-block;padding:6px 0;margin:-6px 0}
  .fp-sub a{display:inline-block;padding:3px 0;margin:-3px 0}
}
/* news-podcasts-14: the news hero cards' kicker ("MARKETS · 8 OUTLETS") was 9.5-11px pink text laid
   straight on the photo, and "Finance" in the brand row was white at 60% opacity. The kicker now
   sits on a dark pill at 12px, the brand row gets a shadow and full-strength text, the footer 11px. */
.hc-kicker{align-self:flex-start;font-size:12px;letter-spacing:.08em;padding:3px 9px;border-radius:999px;background:rgba(7,9,14,.74);color:#ff9aac}
.hc-brand{text-shadow:0 1px 6px rgba(0,0,0,.65)}
.hc-brand .ai{opacity:.92}
.hc-foot span{font-size:11px}
/* news-podcasts-18: the claims board's "Filters" button exists for phones only; on wider screens
   the wrapper is display:contents, so the selects stay in the one filter row as before. */
.mbc-fx-toggle{display:none}
.mbc-fx{display:contents}
@media (max-width:760px){
  .mbc-fx-toggle{display:inline-flex;align-items:center;justify-content:space-between;gap:8px;min-height:40px;padding:0 14px;
    border:1px solid var(--border);border-radius:8px;background:var(--card-2);color:var(--text);font:inherit;font-size:14px;font-weight:600;cursor:pointer}
  .mbc-fx-toggle::after{content:"\25BE";font-size:12px;color:var(--muted)}
  .mbc-filters.fx-open .mbc-fx-toggle::after{content:"\25B4"}
  .mbc-fx{display:none}
  .mbc-filters.fx-open .mbc-fx{display:flex;flex-wrap:wrap;gap:8px;flex:1 1 100%;min-width:0}
}
@media (max-width:600px){
  .mbc-filters.fx-open .mbc-fx{display:grid;grid-template-columns:minmax(0,1fr)}
  .mbc-fx>*{min-width:0;width:100%;max-width:100%}
}
/* copy-31: the alert category line icons that replace the emoji */
.al-ico{display:inline-block;flex:none;vertical-align:-2px;margin-right:5px}
.al-rule .ico .al-ico{margin:2px 0 0;width:16px;height:16px}
/* regression of funds-people-02 (repair round 1): on phones the row lines under the pinned name
   column went missing (Senate e-filed, Congressional disclosures, the fund page's holdings). The
   pinned cells are sticky, and a pinned cell painted over the line of the pinned cell above it
   whenever a row was a fractional number of pixels tall (61.63px, 74.75px, 50.5px).
   1. The pinned cells above use the normal line height, which Chrome rounds to whole pixels.
   2. Phone tables here use the separate border model: collapsed lines are painted under sticky cells.
   3. Each pinned cell below the first row keeps a 1px clear strip at its top (transparent border,
      background kept to the padding box), so it can no longer cover the line above it.
   4. The pinned cell's own line is the solid mix of the .tbl td line colour (index.html) over the
      card, so it looks the same whether the pinned cell sits over the table or over a scrolled row.
   Repair round 2: a sticky cell can still be drawn 1px above or below the rest of its row when the
   row, or the table's place on the page, is not a whole number of pixels. Congressional disclosures
   showed it: a 1px step in the line under "Ed Case" (a 50.5px row) and under the 46.5px header, and
   a double line there after a swipe.
   5. Where color-mix() works, the pinned cells draw no line of their own. The row's last cell draws
      the whole row's line instead: a 1px strip from its right edge to the table's left edge (the
      .tbl-wrap scroll box clips it there), painted over the pinned cell. It is never sticky, so it
      sits exactly where the other cells draw theirs, swiped or not. A table's last row keeps no
      line (.tbl tr:last-child td in index.html). A one-cell row and the blurred Pro placeholder
      rows keep the line from point 4: placeholder cells clip what they hold (content-access.css).
   6. Header cells use the normal line height (the fund directory's two-line headers a whole 16px)
      so the header row is a whole number of pixels, and the "#" header cell is sticky to the top
      like every other header cell (it still scrolls sideways), so one header line is drawn one way. */
@media (max-width:760px){
  #atlas-body table.tbl,#fund-body table.tbl{border-collapse:separate;border-spacing:0}
  #atlas-body table.tbl tbody tr>td:first-child,#atlas-body table.tbl tbody tr>td.id-col,#fund-body table.tbl tbody tr>td:first-child,#fund-body table.tbl tbody tr>td.id-col{background-clip:padding-box;
    border-bottom-color:rgba(var(--p-fn-rgb),.14);border-bottom-color:color-mix(in srgb,rgb(var(--p-fn-rgb)) 14%,var(--card))}
  #atlas-body table.tbl tbody tr+tr>td:first-child,#atlas-body table.tbl tbody tr+tr>td.id-col,#fund-body table.tbl tbody tr+tr>td:first-child,#fund-body table.tbl tbody tr+tr>td.id-col{border-top:1px solid transparent}
  :where(#atlas-body,#fund-body) .tbl th{line-height:normal}
  #atlas-body .fund-directory-scroll .tbl th{line-height:16px}
  #atlas-body .fund-directory-scroll .tbl th .thi{vertical-align:top}
  #atlas-body .tbl th.ord-col,#fund-body .tbl th.ord-col{position:sticky;top:0}
}
@supports (color:color-mix(in srgb,red 50%,blue)){@media (max-width:760px){
  #atlas-body .tbl-wrap table.tbl tbody tr:not(.teaser):not(.th-thesis-locked-row)>td:first-child:not(:last-child),#atlas-body .tbl-wrap table.tbl tbody tr:not(.teaser):not(.th-thesis-locked-row)>td.id-col:not(:last-child),
  #fund-body .tbl-wrap table.tbl tbody tr:not(.teaser):not(.th-thesis-locked-row)>td:first-child:not(:last-child),#fund-body .tbl-wrap table.tbl tbody tr:not(.teaser):not(.th-thesis-locked-row)>td.id-col:not(:last-child){border-bottom-color:transparent}
  #atlas-body .tbl-wrap table.tbl tbody tr:not(.teaser):not(.th-thesis-locked-row)>td:last-child:not(:first-child),#fund-body .tbl-wrap table.tbl tbody tr:not(.teaser):not(.th-thesis-locked-row)>td:last-child:not(:first-child){position:relative}
  #atlas-body .tbl-wrap table.tbl tbody tr:not(.teaser):not(.th-thesis-locked-row)>td:last-child:not(:first-child)::after,#fund-body .tbl-wrap table.tbl tbody tr:not(.teaser):not(.th-thesis-locked-row)>td:last-child:not(:first-child)::after{
    content:"";position:absolute;z-index:1;left:-9999px;right:0;bottom:-1px;height:1px;pointer-events:none;
    background:color-mix(in srgb,rgb(var(--p-fn-rgb)) 14%,var(--card))}
  #atlas-body .tbl-wrap table.tbl tbody tr:last-child:not(.teaser):not(.th-thesis-locked-row)>td:last-child:not(:first-child)::after,#fund-body .tbl-wrap table.tbl tbody tr:last-child:not(.teaser):not(.th-thesis-locked-row)>td:last-child:not(:first-child)::after{content:none}
}}
/* == end css-3 == */



/* == copy-1 == */
/* analyze-22: the note that says which company #/analyze opened on when none was picked */
.an-default-note{margin:0 0 14px;padding:10px 14px;border:1px solid var(--border);border-radius:var(--radius-sm,8px);background:var(--card-2);color:var(--muted);font-size:13px;line-height:1.5}
/* analyze-17 / chrome-18 / research-21: on phones the NVIDIA invitation is one compact block.
   The sentence is already a link to the same page, so the second "Explore NVIDIA" link is dropped
   there; the sentence link gets a 24px+ tap height. Desktop is unchanged. */
@media(max-width:600px){
  .iv-free-insights{flex-direction:row;align-items:center;gap:8px;padding:8px 12px;margin:0 0 14px;font-size:13px;line-height:1.45}
  .iv-free-insights .iv-free-insights-cta{display:none}
  .iv-free-insights p a.iv-free-insights-text{display:inline-block;min-height:24px;padding:2px 0}
}
/* chrome-20: footer links were 11px and 18px tall on phones */
.sitefoot .sf-meta{font-size:13px}
@media(max-width:760px){
  .sitefoot .sf-meta{gap:4px 14px}
  .sitefoot .sf-meta a,.sitefoot .sf-meta span{display:inline-flex;align-items:center;min-height:28px}
}
/* analyze-27: shorter analysis pages on phones. The mid-page social teaser repeats the full social
   card at the foot of the page, and the evidence-trail boxes for fund flows and insiders only point
   back to the full sections above, so phones skip those copies. The key-figures grid uses two
   columns instead of one (it was about 1,200px tall on NVIDIA). Desktop is unchanged. */
@media(max-width:760px){
  #an-root:has(#soc-card) #soc-teaser{display:none}
  #an-root:has(#sec-funds) #lane-funds,#an-root:has(#sec-insiders) #lane-insiders{display:none}
}
@media(min-width:360px) and (max-width:560px){
  .nd-card .nd-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important}
  .nd-card .nd-stat{padding:10px 11px}
  .nd-card .nd-val{font-size:17px}
}
/* home-13: the photo credits page (#/credits) */
.credits-tbl{width:100%;border-collapse:collapse;font-size:13px;line-height:1.45}
.credits-tbl th{font-size:11px;letter-spacing:.05em;text-transform:uppercase;color:var(--faint);font-weight:750}
.credits-tbl th,.credits-tbl td{padding:9px 10px;border-bottom:1px solid var(--border);vertical-align:top;overflow-wrap:anywhere}
.credits-tbl td:first-child{color:var(--text);font-weight:650;width:34%}
.credits-tbl tr:last-child td{border-bottom:0}
@media(max-width:600px){
  .credits-tbl thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
  .credits-tbl,.credits-tbl tbody,.credits-tbl tr,.credits-tbl td{display:block;width:auto}
  .credits-tbl tr{padding:10px 0;border-bottom:1px solid var(--border)}
  .credits-tbl tr:last-child{border-bottom:0}
  .credits-tbl td{border:0;padding:1px 0}
  .credits-tbl td:first-child{width:auto}
}
/* == end copy-1 == */

/* == copy-2 == */
/* news-podcasts-01: podcast claims are AI paraphrases, not quotes. No quotation styling (italics / quote block). */
.mbc-q .mbc-qp{margin:6px 0 0;padding:5px 10px;border-left:2px solid var(--border-2);color:var(--text);font-style:normal;line-height:1.5;overflow-wrap:anywhere}
.mbc-q .mbc-qn{margin:4px 0 0;padding-left:12px;color:var(--muted);font-size:11.5px;line-height:1.45}
.quote-card .q.mb-para{font-style:normal}
.qbox .qb-a .chip.mut{margin-right:2px}
/* theses-11: Monte Carlo histogram gets a 1.00x (no change) marker and value ticks. */
.otmc-hist{position:relative;margin-bottom:2px}
.otmc-hist .otmc-one{position:absolute;top:-4px;bottom:0;width:0;border-left:1.5px dashed var(--text);opacity:.7;pointer-events:none}
.otmc-axis{position:relative;height:16px;margin:0 0 8px;font-size:10.5px;color:var(--muted)}
.otmc-axis span{position:absolute;top:1px;transform:translateX(-50%);white-space:nowrap}
.otmc-axis span:first-child{transform:translateX(-10%)}
/* == end copy-2 == */



/* == logic-1 == */
/* theses-17: the locked Pro thesis page names the thesis, links back to the board, and draws its
   performance teaser as a line (markup in content-access.js nativeDetail). */
.th-thesis-lock .th-thesis-back{display:inline-block;margin:18px 0 0;font-size:13.5px;font-weight:650;color:var(--accent);text-decoration:none}
.th-thesis-lock .th-thesis-back:hover{text-decoration:underline}
.th-thesis-lock .section-title{margin-top:12px}
.th-thesis-lock .th-thesis-lock-name{font-size:20px;line-height:1.3;margin:4px 0 6px;font-weight:750;color:var(--text)}
.th-thesis-lock .th-thesis-lock-summary{margin:0 0 14px;max-width:70ch;color:var(--muted);line-height:1.55;font-size:14.5px}
.th-widget-chart.th-widget-linechart{display:block;padding:18px 4% 10px}
.th-widget-linechart svg{display:block;width:100%;height:170px}
@media (max-width:767px){.th-thesis-lock .th-thesis-lock-name{font-size:18px}.th-widget-linechart svg{height:140px}}
/* funds-people-08: P&L by quarter draws gains up and losses down from one zero line (markup in
   index.html aPnl); phones keep the latest 6 quarters so the chart fits its card. */
.pnlbars-z .bx{justify-content:flex-start}
.pnlbars-z .pz-up{display:flex;flex-direction:column;justify-content:flex-end;border-bottom:1px solid var(--border);box-sizing:border-box}
.pnlbars-z .pz-dn{display:flex;flex-direction:column;justify-content:flex-start}
.pnlbars-z .qb{width:100%;flex:0 0 auto}
.pnlbars-z .qb-neg{border-radius:0 0 3px 3px}
.pnl-phone-note{display:none}
@media (max-width:767px){
  .pnlbars-z .col:nth-last-child(n+7){display:none}
  .pnl-phone-note{display:inline}
}
/* theses-17 repair (2026-09-25): the teaser line used fixed greens at 2-3px, which the 9px blur
   washed out on the light card and hid on the dark one. Theme colours, wider round strokes and a
   lighter blur keep a visible line shape in both themes; it stays blurred and illustrative. */
.th-widget-shapes.th-widget-linechart{filter:blur(5px);opacity:.85}
.th-widget-linechart polyline{stroke-linecap:round;stroke-linejoin:round}
.th-widget-linechart polyline:first-child{stroke:var(--pos);stroke-width:8px}
.th-widget-linechart polyline+polyline{stroke:var(--muted);stroke-width:5px;stroke-opacity:.7;stroke-dasharray:14 10}
/* == end logic-1 == */

/* == logic-2 == */
/* analyze-28: a fund fact date older than 45 days is shown in amber with its age */
.ef-stale{color:var(--warn);font-weight:650}
/* analyze-28: the section accent bar floated beside the ETF header's second chip row on phones */
@media (max-width:760px){#view .section-title.ef-titlebar::before{display:none}}
/* research-06: say in words why the screener's filters are grey on Free */
.th-filters-pro-note{margin:0 0 10px;padding:8px 10px;border:1px dashed var(--border-2);border-radius:8px;font-size:12.5px;line-height:1.5;color:var(--muted);background:var(--card-2)}
.th-filters-pro-note a{color:var(--accent);font-weight:600}
.th-access-free #cs-pane-filters :is(select,input,button):disabled{cursor:not-allowed}
.res-linkpro a{color:var(--accent);font-weight:600}
/* technical-17 / pricing-legal-07: notice above home after an unknown route */
/* regression-3: the notice sits inside .container, so it takes the page gutters at every width */
.route-missing{margin:12px 0 0;padding:9px 14px;border:1px solid var(--border-2);border-radius:8px;background:var(--card-2);font-size:13px;color:var(--text)}
/* home-11: visible key for the circled Sync Score */
.th-sync-key{white-space:normal}
/* home-12: flag and caveat for very large model value gaps */
.iv-gap-flag{display:block;margin-top:2px;font-size:10.5px;font-weight:600;color:var(--warn);white-space:nowrap}
.iv-gap-note{margin:8px 2px 0;font-size:12px;line-height:1.5;color:var(--muted)}
/* home-06: Quality meets value on phones. The company column stays pinned in both views and
   is narrower, the Sync Score column no longer holds a 120px minimum for one line of '6 of 7
   signals' (that line and the headers wrap), and the toggle labels stay on one line. Business,
   Sync Score, Price and Est. value gap now fit whole at 320-480; only later columns scroll. */
@media (max-width:480px){
  .iv-shortlist .iv-table thead th:first-child,.iv-shortlist .iv-table tbody th{position:sticky;left:0;z-index:1;background:var(--card);box-shadow:1px 0 0 var(--border)}
  .iv-shortlist .iv-table thead th:first-child{background:var(--card-2)}
  /* collapsed row borders do not travel with a sticky cell, so the row lines vanished under
     the pinned company column once the table was scrolled; separate borders move with it */
  .iv-shortlist .iv-table{border-collapse:separate;border-spacing:0}
  .iv-shortlist:not(.iv-all-signals) .iv-table{min-width:0}
  .iv-shortlist #iv-candidate-table tbody th{width:112px;min-width:112px;max-width:112px;white-space:normal}
  .iv-shortlist .iv-table tbody th>a{gap:6px;flex-direction:column;align-items:flex-start}
  .iv-shortlist .iv-company-name{width:96px;max-width:96px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}
  .iv-shortlist .iv-company-name small{overflow:hidden;text-overflow:ellipsis}
  .iv-shortlist .iv-table td,.iv-shortlist .iv-table tbody th,.iv-shortlist .iv-table thead th{padding-left:6px;padding-right:6px}
  .iv-shortlist .iv-table thead th{white-space:normal;vertical-align:bottom}
  .iv-shortlist .iv-table .iv-composite-cell{min-width:0;white-space:normal}
  .iv-shortlist .iv-score-number{white-space:nowrap}
  .iv-shortlist .iv-screen-modes button{white-space:nowrap}
}
/* home-06: at 320-374 the company column narrows to 88px and the name wraps instead of being
   cut, so the four data columns still fit in a 278px scroller */
@media (max-width:374px){
  .iv-shortlist #iv-candidate-table tbody th{width:88px;min-width:88px;max-width:88px}
  .iv-shortlist .iv-company-name{width:76px;max-width:76px;white-space:normal;overflow-wrap:anywhere}
  .iv-shortlist .iv-company-name small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
}
/* new-regression-1: the visible 'Open' header was right-aligned while its round buttons (a flex
   box) sat at the cell's left edge, up to 84px apart in Investor view. Header and button are now
   both centred in the column; th and td padding match at every width, so they line up. */
.iv-table thead th.iv-open-col{text-align:center}
.iv-table .iv-row-open{margin-left:auto;margin-right:auto}
/* == end logic-2 == */

/* == tech == */
/* technical-11: the "news could not load right now" note in the stock-page news box header reads as a sentence, not a shouted label */
.an-feed .anf-head .anf-down{font-weight:600;letter-spacing:0;text-transform:none;color:var(--muted)}
/* == end tech == */

/* == data == */
/* == end data == */

/* == free == */
/* F3 earnings calls: the list heading is an H2 now (the page had two H1s) and keeps the old size;
   calls outside the six fully open companies show a "Part of Pro · coming soon" state. */
.ec-root .ec-heading h2{font-size:clamp(26px,4vw,38px);line-height:1.2;margin:10px 0}
.ec-locked-tag{display:inline-flex;align-items:center;min-height:24px;padding:1px 10px;border:1px solid var(--border-2,#cbd5e1);border-radius:999px;background:var(--card-2,#f4f6f5);color:var(--muted,#64748b);font-size:12px;font-weight:700;line-height:1.3;white-space:nowrap}
.ec-locked{margin:18px 0;padding:18px 20px;border:1px dashed var(--border-2,#cbd5e1);border-radius:12px;background:var(--card,#fff)}
.ec-locked p{margin:10px 0 0;max-width:70ch}
.ec-locked .ec-actions{margin:16px 0 0}
.ec-locked-line{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin:0;color:var(--muted,#64748b);font-size:13px}
.ec-free-note{margin:14px 0 0;padding:10px 14px;border:1px solid var(--border,#d9e0eb);border-radius:10px;background:var(--card-2,#f4f6f5);color:var(--muted,#64748b);font-size:13px;line-height:1.55;max-width:78ch}
/* the note's "coming soon" link must not read as plain text: underline and weight, not colour alone */
.ec-free-note a{color:var(--accent);font-weight:600;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px}
.ec-list-item.ec-list-locked{background:var(--card-2,#f4f6f5)}
.ec-list-item.ec-list-locked b{color:var(--muted,#64748b)}
@media(max-width:600px){.ec-locked{padding:14px}.ec-list-item .ec-locked-tag{white-space:normal}}
/* F4: the free-plan invitation names six companies, each a link with a 24px+ tap height on phones */
.iv-free-insights p a.iv-free-co{display:inline;min-height:0;gap:0;color:var(--accent);font-weight:700;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px}
@media(max-width:600px){.iv-free-insights p a.iv-free-co{display:inline-block;min-height:24px;padding:2px 0}}
/* == end free == */
/* == lazy-core: lazy page sections (LZ:js in index.html). A host keeps its section's height reserved until the
   data lands; the placeholder is a quiet card with no text, so neither find-in-page nor a screen reader meets
   anything that is not real (the host itself carries aria-busy). == */
.lz{display:block}
.lz[aria-busy]{position:relative}
.lz-skel{position:absolute;inset:12px 0;border-radius:14px;background:var(--card-2,#f4f6f5);border:1px solid var(--border,#d9e0eb);opacity:.5}
@media (prefers-reduced-motion:no-preference){.lz-skel{animation:lzPulse 1.6s ease-in-out infinite}}
@keyframes lzPulse{0%,100%{opacity:.3}50%{opacity:.65}}
.lz-err{margin:18px 0}
.lz-err p{margin:0;display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px}
@media print{
  .lz[aria-busy]{min-height:0!important}
  .lz-skel{display:none}
  .lz[aria-busy]::before{content:"This part of the page had not loaded yet.";display:block;padding:8px 0;color:#555}
}
/* == end lazy-core == */
/* == speakers (2026-09-25): the metals price-target ladder labels a row with its show, not its speaker.
   Show titles run longer than names, so the title shortens with an ellipsis and the date stays whole. == */
.mt-lwho{display:flex;align-items:baseline;gap:5px}
.mt-lwho .mt-lshow{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mt-lwho em{flex:none;margin-left:0}
/* a target near the low end draws its price bubble half over the label's right edge: keep the date clear of it */
.mt-lwho{padding-right:14px}
@media (max-width:760px){.mt-lwho{flex-direction:column;align-items:flex-start;gap:0}.mt-lwho .mt-lshow{max-width:100%}}
/* == end speakers == */

/* == owner-newsletter == */
/* Owner decision (2026-09-25, evening): no newsletter link in the mobile header. This replaces the
   earlier decision to keep the newsletter bar pinned on phones. The desktop rail keeps its link and
   the sign-up form stays at the bottom of the home page. investor-ui.js already treats a hidden
   newsletter row like the registered state: while the reader scrolls down, the logo/tab rows slide
   away and only the search bar stays pinned. Beats investor-ui.css:482 and readiness-mobile.css:14. */
@media(max-width:920px){
  .app .side.iv-mobile-compact .side-nav>.iv-newsletter-link{display:none!important}
}
/* == end owner-newsletter == */
/* == lazy-home-research-fund (2026-09-25): the fund page's figures, chart and holdings tabs are lazy sections
   (LZH:js in index.html). The 20px gap above a card sits on its host as padding, so the height reserved while the
   data loads includes it and nothing below moves when the card arrives. The fund page and the Atlas now paint before
   fund-watchlist.js mounts: reserve the room its star (next to the fund's name) and its watched-funds panel (the
   Atlas utility row) take, measured at 375 and 1440 px. == */
.lz.lz-fp{padding-top:20px}
.fp-hero .fp-id h1{min-height:33px}
#atlas-root .atlas-util{min-height:62px}
@media (max-width:760px){.fp-hero .fp-id h1{min-height:32px}}
@media (max-width:640px){#atlas-root .atlas-util{min-height:108px}}
@media print{.lz.lz-fp{padding-top:12px}}
/* Repair 1 (2026-09-26). The fund page and the Atlas now paint before Inter has downloaded (account-boot.js attaches
   it after the first frame), and at phone width the swap from the system font re-wrapped their text: the fund page's
   action chips went from one line to two and moved everything under them (layout shift 0.18 on Free, 0.07-0.13 on
   Pro), the Atlas header moved its board 24 px (0.07). On these two pages the font stack now puts a stand-in between
   Inter and the system font: the system's own Segoe UI (Windows), Arial (macOS, iOS, Linux) or Roboto (Android),
   scaled to Inter's width at each weight and given Inter's line metrics, measured against Inter in Chrome at
   11-22 px. The stand-ins cover only the characters Inter itself serves, so once Inter is in nothing renders
   differently from before; they only change what shows while it downloads (or if it never does). To use them on
   every page, put the same list in --font on :root. */
@font-face{font-family:'Inter fb segoe';src:local('Segoe UI'),local('SegoeUI');font-weight:100 449;font-display:swap;size-adjust:107%;ascent-override:90.5%;descent-override:22.6%;line-gap-override:0%;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD,U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'Inter fb segoe';src:local('Segoe UI Semibold'),local('SegoeUI-Semibold');font-weight:450 624;font-display:swap;size-adjust:107%;ascent-override:90.5%;descent-override:22.6%;line-gap-override:0%;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD,U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'Inter fb segoe';src:local('Segoe UI Bold'),local('SegoeUI-Bold');font-weight:625 774;font-display:swap;size-adjust:103%;ascent-override:94.1%;descent-override:23.4%;line-gap-override:0%;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD,U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'Inter fb segoe';src:local('Segoe UI Black'),local('SegoeUI-Black');font-weight:775 1000;font-display:swap;size-adjust:100%;ascent-override:96.9%;descent-override:24.1%;line-gap-override:0%;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD,U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
/* figures ($ % , - . / 0-9 · −): Inter's are wider than Segoe UI's by more than its letters are, so dates, counts and
   percentages get their own, larger scale (declared last: a later face wins where unicode ranges overlap) */
@font-face{font-family:'Inter fb segoe';src:local('Segoe UI'),local('SegoeUI');font-weight:100 449;font-display:swap;size-adjust:110.5%;ascent-override:87.7%;descent-override:21.9%;line-gap-override:0%;unicode-range:U+0024-0025,U+002C-002F,U+0030-0039,U+00B7,U+2212}
@font-face{font-family:'Inter fb segoe';src:local('Segoe UI Semibold'),local('SegoeUI-Semibold');font-weight:450 624;font-display:swap;size-adjust:113%;ascent-override:85.7%;descent-override:21.4%;line-gap-override:0%;unicode-range:U+0024-0025,U+002C-002F,U+0030-0039,U+00B7,U+2212}
@font-face{font-family:'Inter fb segoe';src:local('Segoe UI Bold'),local('SegoeUI-Bold');font-weight:625 774;font-display:swap;size-adjust:108.5%;ascent-override:89.3%;descent-override:22.3%;line-gap-override:0%;unicode-range:U+0024-0025,U+002C-002F,U+0030-0039,U+00B7,U+2212}
@font-face{font-family:'Inter fb segoe';src:local('Segoe UI Black'),local('SegoeUI-Black');font-weight:775 1000;font-display:swap;size-adjust:107%;ascent-override:90.5%;descent-override:22.6%;line-gap-override:0%;unicode-range:U+0024-0025,U+002C-002F,U+0030-0039,U+00B7,U+2212}
@font-face{font-family:'Inter fb arial';src:local('Arial'),local('ArialMT'),local('Liberation Sans'),local('LiberationSans');font-weight:100 549;font-display:swap;size-adjust:106.8%;ascent-override:90.7%;descent-override:22.7%;line-gap-override:0%;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD,U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'Inter fb arial';src:local('Arial Bold'),local('Arial-BoldMT'),local('Liberation Sans Bold'),local('LiberationSans-Bold');font-weight:550 1000;font-display:swap;size-adjust:101.5%;ascent-override:95.4%;descent-override:23.9%;line-gap-override:0%;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD,U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
/* Arial (macOS, iOS), 2026-09-26: letters retuned on the fund page's own text (106.8 / 101.5 %). Arial's figures are all one
   width and its bold ones are narrower than Inter's by more than its letters are, so bold dates, counts and percentages
   get their own scale (declared last: a later face wins where unicode ranges overlap) */
@font-face{font-family:'Inter fb arial';src:local('Arial Bold'),local('Arial-BoldMT'),local('Liberation Sans Bold'),local('LiberationSans-Bold');font-weight:550 1000;font-display:swap;size-adjust:115%;ascent-override:84.2%;descent-override:21.1%;line-gap-override:0%;unicode-range:U+0024-0025,U+002C-002F,U+0030-0039,U+00B7,U+2212}
@font-face{font-family:'Inter fb roboto';src:local('Roboto'),local('Roboto-Regular'),local('Roboto Regular');font-weight:100 449;font-display:swap;size-adjust:107.5%;ascent-override:90.1%;descent-override:22.5%;line-gap-override:0%;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD,U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'Inter fb roboto';src:local('Roboto Medium'),local('Roboto-Medium');font-weight:450 649;font-display:swap;size-adjust:107.5%;ascent-override:90.1%;descent-override:22.5%;line-gap-override:0%;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD,U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'Inter fb roboto';src:local('Roboto Bold'),local('Roboto-Bold');font-weight:650 1000;font-display:swap;size-adjust:108.5%;ascent-override:89.3%;descent-override:22.3%;line-gap-override:0%;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD,U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
.fp-page,.atlas-page{--font:'Inter','Inter fb segoe','Inter fb arial','Inter fb roboto','Segoe UI',system-ui,-apple-system,sans-serif;font-family:var(--font)}
/* Inter narrows its letters as the size grows (optical sizing), so the fund's name (21-25 px) gets a stand-in scaled
   for display sizes: at small-text scale a two-line name that only just fits beside the watch star wrapped to three */
@font-face{font-family:'Inter fb segoe lg';src:local('Segoe UI'),local('SegoeUI');font-weight:100 449;font-display:swap;size-adjust:103.5%;ascent-override:93.6%;descent-override:23.3%;line-gap-override:0%;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD,U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'Inter fb segoe lg';src:local('Segoe UI Semibold'),local('SegoeUI-Semibold');font-weight:450 624;font-display:swap;size-adjust:103%;ascent-override:94.1%;descent-override:23.4%;line-gap-override:0%;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD,U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'Inter fb segoe lg';src:local('Segoe UI Bold'),local('SegoeUI-Bold');font-weight:625 774;font-display:swap;size-adjust:101.5%;ascent-override:95.4%;descent-override:23.8%;line-gap-override:0%;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD,U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'Inter fb segoe lg';src:local('Segoe UI Black'),local('SegoeUI-Black');font-weight:775 1000;font-display:swap;size-adjust:98%;ascent-override:98.9%;descent-override:24.6%;line-gap-override:0%;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD,U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
/* the fund's name (21-25 px) in Arial, scaled for display sizes like 'Inter fb segoe lg' */
@font-face{font-family:'Inter fb arial lg';src:local('Arial'),local('ArialMT'),local('Liberation Sans'),local('LiberationSans');font-weight:100 549;font-display:swap;size-adjust:105%;ascent-override:92.3%;descent-override:23.1%;line-gap-override:0%;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD,U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'Inter fb arial lg';src:local('Arial Bold'),local('Arial-BoldMT'),local('Liberation Sans Bold'),local('LiberationSans-Bold');font-weight:550 1000;font-display:swap;size-adjust:100.5%;ascent-override:96.4%;descent-override:24.1%;line-gap-override:0%;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD,U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
.fp-page .fp-hero h1{font-family:'Inter','Inter fb segoe lg','Inter fb arial lg','Inter fb roboto','Segoe UI',system-ui,-apple-system,sans-serif}
/* Free: the filing chips open the figures section (they arrive with it); every tier: the identified-positions line
   heads the holdings card (fpFiling, fpIdLine in index.html) */
.fp-filing{margin:0 0 14px}
.fp-idline{margin:0;padding:12px 20px 0;font-size:12px;line-height:1.5;color:var(--muted)}
/* #/research: the Owned-by cell keeps the "N filers · crowding c" line's room until the holdings map is in */
.pk-hold.pk-hold-wait{visibility:hidden}
/* fund-watchlist.js puts a 32 px star after the fund's name once the page has painted. On a name that wraps to two
   lines it deepened the last line by 7 px and moved everything under it; the min-height above only covers one line.
   Negative vertical margins keep the star inside the line's own height, and until it is there the name ends with the
   star's width (8 px gap + 32 px), so a name that only just fits beside it does not wrap when it arrives. */
.fp-hero .fp-id h1>.fw-star{margin-top:-5px;margin-bottom:-5px}
.fp-hero .fp-id h1:not(:has(>.fw-star))::after{content:"";display:inline-block;width:40px;height:1px}
/* == end lazy-home-research-fund == */
/* == lazy-thesis-mb: the thesis page, the thesis board and MarketBrief as LZ sections (index.html otDetail,
   vOnThesis, mbLazyBody). == */
/* the ledger's Progress cell while the chart series is on its way (otSparkCell): the 84x24 box the line will take */
.ot-spark-skel{display:inline-block;width:84px;height:24px;border-radius:4px;background:var(--card-2,#f4f6f5);opacity:.5;vertical-align:middle}
@media (prefers-reduced-motion:no-preference){.ot-spark-skel{animation:lzPulse 1.6s ease-in-out infinite}}
/* a thesis card with nothing to show leaves no empty gap in the card column */
#ot-root .lz:empty,#mb-root .lz:empty{display:none}
/* a waiting section keeps the top margin of the first thing it will show; once filled, that margin collapses
   through the host, so without this the page moved down by it (10-22px) when the section painted */
#mb-root>.lz[data-lz="mb-board"][aria-busy]{margin-top:24px}
.lz[data-lz="ot-updates"][aria-busy]{margin-top:22px}
/* the statistics panel's headings each open their own section now, so index.html's .section-title:first-child rule
   took away their divider line and top padding; they keep both, as when they came after the table above them */
#mb-stats>.lz>.section-title:first-child{padding-top:22px;border-top:1px solid var(--border)}
@media(max-width:760px){#mb-stats>.lz>.section-title:first-child{padding-top:16px}}
/* == end lazy-thesis-mb == */
/* == leftovers (2026-09-26) == */
/* The metals price-target ladder on a phone (#/analyze/XAU and the other metals). The row's label is the show on one
   line, shortened with an ellipsis; the claim's date opens the status line under the bar (meta() in index.html
   renders it there too, hidden on wider screens). The speakers block above stacked show and date in the label, which
   made each row about 13 px taller and the Pro gold page about 11,000 px longer. */
.mt-lmeta .mt-ldate{display:none;font-style:normal;font-weight:500;color:var(--faint)}
@media (max-width:760px){
  .mt-lwho{flex-direction:row;align-items:baseline}
  .mt-lwho em{display:none}
  .mt-lmeta .mt-ldate{display:inline}
  .mt-lmeta{flex-wrap:wrap;row-gap:4px}
}
/* a narrow phone: under the "No horizon stated" heading (.mt-ldflt) each row's "default" tag repeats the heading, and
   without it the status line fits on one line at 320 px */
@media (max-width:400px){.mt-ldflt .mt-lmeta .mt-dflt{display:none}}
/* the column head says "Show" on a phone, where the date sits on the status line (and the spot price no longer covers it) */
@media (max-width:760px){.mt-lhead .mt-lhw{display:none}}
/* A fund page that painted before Inter arrived (fpFontLate in index.html adds .fp-fb) stays in the stand-in faces of the
   lazy-home-research-fund block for as long as the reader is on it, so a late Inter cannot re-wrap its name, identity
   line or chips and move what is under them. Same stacks as that block, without 'Inter' at their head. */
.fp-page.fp-fb{--font:'Inter fb segoe','Inter fb arial','Inter fb roboto','Segoe UI',system-ui,-apple-system,sans-serif;font-family:var(--font)}
.fp-page.fp-fb .fp-hero h1{font-family:'Inter fb segoe lg','Inter fb arial lg','Inter fb roboto','Segoe UI',system-ui,-apple-system,sans-serif}
/* A narrow phone's share-price ladder (.mt-lshare, #/analyze/XAU): its middle cell ("GLD to $1,200.00 / share") wraps to
   two lines there anyway, so the label goes back to the show over the claim's date, the status line drops the date and
   fits on one line again, and a row's two lines sit closer (the gap between rows stays). */
@media (max-width:350px){
  .mt-lshare .mt-lwho{flex-direction:column;align-items:flex-start;gap:0}
  .mt-lshare .mt-lwho .mt-lshow{max-width:100%}
  .mt-lshare .mt-lwho em{display:inline}
  .mt-lshare .mt-lmeta .mt-ldate{display:none}
  .mt-lshare .mt-lmeta{column-gap:4px}
  .mt-lshare .mt-lrow{row-gap:4px}
}
/* == end leftovers == */
/* == autocontinue == */
/* autocontinue (2026-09-26): every section of #/analyze now paints on its own, the Social box at the foot of the page
   (sec-social) included, whether or not the reader has scrolled to it. On a phone the Social insight teaser in the side
   column of the business section gives way to that box (analyze-27, above), but it went only once the box had painted
   (#an-root:has(#soc-card)), and a reader who had jumped to "What's it worth?" below the teaser lost 780 px when it
   folded away. A teaser whose ticker gets the box's card (.soc-has-card, set where the teaser is built) now stays out
   from the first paint, so the box painting later moves nothing above it. */
@media(max-width:760px){
  #an-root:has(.lz[data-lz="sec-social"]) #soc-teaser.soc-has-card{display:none}
}
/* Chrome's scroll anchoring does not anchor inside a position:sticky box. A reader whose screen top was in the side
   column of #/analyze on a phone or tablet (the landing spot of ?to=sec-worth) lost their place whenever something above
   grew while the lower sections painted: 57 px when the earnings table's scroll hint and drag bar arrive, measured at 375
   on Fast 4G, and the page did not follow. At 960 px and below .split is one column and every box in it has a grid row
   of its own height, so the side column can never stick there (measured on NVDA and SPY at 320-960: the same place with
   sticky and with static); static, it looks the same and scroll anchoring holds a reader who is reading it. */
@media(max-width:960px){
  #an-root .split>.sticky{position:static}
}
/* == end autocontinue == */
/* == firehose == */
/* firehose (2026-09-26): when the news service is slow or down, the relay now serves the last good copy of the news
   (kept up to 48 h) instead of an error, and the page says so in a small plain note: in the header of the stock-page
   news box (.anf-stale, the same sentence style as the .anf-down error note above) and in the footer of the Market
   news card (.lv-nstale). */
.an-feed .anf-head .anf-stale{font-weight:600;letter-spacing:0;text-transform:none;color:var(--muted)}
#lv-nstat .lv-nstale{color:var(--muted);font-weight:600}
/* == end firehose == */



