production

This commit is contained in:
2026-08-28 11:13:15 +05:30
parent d7348e253f
commit 5723d373b2
162 changed files with 17924 additions and 7026 deletions

View File

@@ -332,20 +332,20 @@ class SettingsLabel extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Padding(
// ── Aligned to the titles, not to the icons ──
// ── Aligned to the card, not to the titles inside it ──
//
// The label used to start on the page gutter, level with the row icons
// below it. Text-to-glyph alignment is optical, never exact: an `Icon`
// does not paint flush to the left of its box, so an 11sp heading and a
// 21sp glyph starting at the same x read as eight points out of true —
// and a column of three headings all eight points out is what makes a
// settings page look assembled rather than laid out.
// It was inset by the row's icon box plus its gap, so that the heading
// sat exactly over the *words* it heads and the glyphs formed a margin
// rail to its left — text-to-text alignment, which is exact where
// text-to-glyph is only optical.
//
// Text-to-text is exact. The heading sits over the words it heads, and
// the icons become a clean margin rail to its left — the arrangement iOS
// Settings has used since it had groups. The inset is the row's own icon
// box plus its gap, read from the same numbers [SettingsRow] uses.
padding: EdgeInsetsDirectional.only(start: 21.sp + 14.w, bottom: 6.h),
// The argument is sound and the result was wrong on the page: the label
// ended up ~65 points in from the screen edge, floating in the middle of
// nothing with the card's own left edge 35 points to its left. A section
// heading names the block under it, and the block's edge is the line the
// eye actually reads down. It sits on that now, and the caller supplies
// the page gutter.
padding: EdgeInsetsDirectional.only(start: 2.w, bottom: 6.h),
child: Text(text.toUpperCase(), style: MilerType.eyebrow),
);
}