# Phase 5.IV.A — the `$_SERVER["MOBILE"]` branch triage

All 108 branch sites. Every arrangement site is now a media query: the column-hides and simple markup swaps in A.2, and the mixed structural forms in A.3 (uniform cell markup that stacks on narrow with `stack-narrow`). Content and logic sites stay PHP; the viewport meta is IV.B and the last body-class IV.C.

Totals: arrangement 43 (converted), content 38, logic 24, viewport 2, mobile-class 1 — 108 sites.

## arrangement — converted to a media query (A.2 + A.3 done) (43)

?:101 | converted in A.2
?:108 | converted in A.2
?:129 | converted in A.2
?:93 | colspan count for a spacer row
?:115 | A.3: uniform row markup + stack-narrow
?:144 | A.3: uniform row markup + stack-narrow
?:147 | A.3: constant colspan, spacer hidden narrow
?:163 | A.3: spacer cell always emitted, hidden narrow
?:109 | A.3: one row per string, stacks on narrow via stack-narrow
?:107 | converted in A.2
?:104 | converted in A.2
?:159 | converted in A.2
?:488 | converted in A.2
?:60 | colspan count for a spacer row
?:104 | converted in A.2
?:122 | converted in A.2
?:81 | colspan count for a spacer row
?:109 | converted in A.2
?:378 | A.3: user cell stays inline, stacks on narrow
?:436 | converted in A.2
?:471 | converted in A.2
?:508 | converted in A.2
?:715 | converted in A.2
?:96 | converted in A.2
?:102 | converted in A.2
?:128 | converted in A.2
?:72 | colspan count for a spacer row
?:143 | converted in A.2
?:122 | converted in A.2
?:141 | converted in A.2
?:79 | colspan count for a spacer row
src/views/elements/MixcrawlsElement.php:80 | colspan count for a spacer row
?:357 | converted in A.2
?:165 | converted in A.2
?:166 | converted in A.2
?:81 | A.3: uniform cell markup, stacks on narrow via stack-narrow
?:82 | A.3: uniform centered cell, stacks on narrow
?:295 | colspan count for a spacer row
?:325 | converted in A.2
?:378 | converted in A.2
?:2191 | converted in A.2
?:2733 | converted in A.2
?:2796 | converted in A.2

## content → stays PHP (38)

src/views/elements/AdminbarElement.php:63 | swaps to LOGO_SMALL resource
src/views/elements/AdminmenuElement.php:71 | swaps to LOGO_SMALL resource
?:117 | wordwraps the description text
src/models/GroupModel.php:5951 | title truncation length (emits a shorter string)
src/views/elements/GroupbarElement.php:59 | swaps to LOGO_SMALL resource
src/views/elements/GroupfeedElement.php:587 | omits the thread-expand query block
src/views/elements/GroupfeedElement.php:80 | omits the side-ad script block
?:130 | name-truncate stretch (shorter string)
?:496 | omits the ad-preview panel on mobile
?:445 | name-truncate stretch (emits a shorter string)
src/views/elements/ManagerolesElement.php:114 | name-truncate stretch (emits a shorter string)
?:134 | name-truncate stretch (emits a shorter string)
src/views/elements/MixcrawlsElement.php:112 | variable-length FRAGMENTS list kept in PHP
src/views/elements/MixcrawlsElement.php:99 | definition header matches its PHP-omitted data cell (112)
src/views/helpers/OptionsHelper.php:174 | dropdown word-wrap length (emits a shorter string)
src/views/helpers/OptionsHelper.php:67 | dropdown word-wrap length (emits a shorter string)
src/views/helpers/PaginationHelper.php:186 | a -- gap marker vs the full numbered page-list loop (different content)
src/views/RecoverView.php:58 | swaps to LOGO_SMALL resource
src/views/RegisterView.php:81 | swaps to LOGO_SMALL resource
src/views/ResendEmailView.php:58 | swaps to LOGO_SMALL resource
src/controllers/SearchController.php:875 | picks chart pixel width/height for a rendered image
src/views/elements/SearchElement.php:118 | omits the search-stats <h2> block
src/views/elements/SearchElement.php:271 | omits the word-cloud block
src/views/elements/SearchElement.php:526 | swaps to LOGO_MEDIUM resource
src/views/elements/SearchbarElement.php:60 | swaps to LOGO_SMALL resource
src/views/elements/SideadvertisementElement.php:51 | omits the side-ad script block
src/views/SigninView.php:182 | swaps to LOGO_SMALL resource
src/views/SigninView.php:66 | swaps to LOGO_SMALL resource
src/controllers/components/SocialComponent.php:1012 | picks chart pixel width/height + tick font for a rendered image
src/controllers/components/SocialComponent.php:9531 | picks chart pixel width/height for a rendered image
src/controllers/StaticController.php:192 | picks chart pixel width/height for a rendered image
src/views/StaticView.php:109 | omits the side-ad script block
src/views/StaticView.php:72 | swaps to LOGO_SMALL resource
src/views/SuggestView.php:59 | swaps to LOGO_SMALL resource
src/views/TestsView.php:64 | swaps to LOGO_SMALL resource
src/views/helpers/VideosHelper.php:105 | title truncation length (emits a shorter string)
src/views/elements/WelcomemenuElement.php:62 | swaps to LOGO_SMALL resource
src/views/elements/WikiElement.php:216 | name-wrap length (emits a shorter string)

## logic → stays PHP (24)

src/views/AdminView.php:61 | addContainer region placement (view assembly)
src/views/AdminView.php:66 | addContainer region placement
src/views/elements/GroupfeedElement.php:1044 | $clear feeds a <script> block, not markup
src/views/helpers/GrouplistHelper.php:64 | reads flag into $is_mobile for use below
src/views/elements/HelpElement.php:50 | reads flag into $mobile for use below (see its uses)
src/views/helpers/HelpbuttonHelper.php:91 | flag to a JS 'true'/'false' string for a script
src/views/elements/ManageaccountElement.php:173 | reads flag into $is_mobile for use below
src/views/elements/ManageaccountElement.php:61 | reads flag into $is_mobile for use below
?:253 | adds onkeyup preview hook on desktop
?:255 | adds onkeyup preview hook on desktop
src/views/helpers/PaginationHelper.php:77 | early-returns (skips micro pagination) on mobile
src/views/helpers/PagingtableHelper.php:69 | calls a different table-controls method
src/views/elements/SearchElement.php:435 | links-per-row modulus controls the row-break loop
src/views/SearchView.php:64 | addContainer region placement
src/views/SearchView.php:70 | addContainer region placement
src/controllers/components/SocialComponent.php:3958 | mail feature gated off on mobile (behavior)
src/controllers/components/SocialComponent.php:7421 | passes the flag into $data for a view
src/controllers/components/StoreComponent.php:614 | adds preview() JS calls on desktop
src/views/elements/TrendingElement.php:214 | terms-per-row controls row grouping loop (emits different structure)
src/views/elements/TrendingElement.php:221 | number of random trends sliced (emits fewer items)
src/views/layouts/WebLayout.php:293 | maps the flag to the body's 'mobile' class string
src/index.php:61 | sets $_SERVER['MOBILE'] from the request; the flag's origin
src/index.php:63 | sets the flag false; flag plumbing
src/index.php:66 | sets the flag false; flag plumbing

## viewport meta → IV.B (2)

src/library/VersionFunctions.php:594 | upgrade page's own viewport meta; IV.B territory
src/views/layouts/WebLayout.php:100 | emits the viewport meta only on mobile; IV.B makes it always

## the .mobile body class → IV.C (1)

src/library/VersionFunctions.php:600 | the .mobile body class is IV.C's to retire