Public Access
Android: the redesign — a Vaults tab with hosts, keychain and snippets, card lists, a keychain that can add, and files that act on what is chosen
The bottom bar is Vaults · Connections · Settings, drawn as Material 3 pills with icons from the embedded Material font and a count of open sessions on Connections, which replaces the strip of shells above the bar. Vaults is the open vault: its header carries the name as a switch to the vaults screen, the sync light and a lock icon, and a Hosts · Keychain · Snippets segmented control sits under it. The keychain and snippets move there from Settings (IsVaultSurface lights the tab; IsMoreSurface no longer lists them), and back from either goes to the hosts. Settings becomes an account card and grouped sections: security, vaults and history, files, this app. Host rows are cards with a terminal tile and the live dot on its corner. The connect sheet names the host and its address, labels its box, focuses it as it opens, reveals the password on request, and puts CANCEL left and CONNECT right; every two-button row on the head now confirms on the right. While a hosts-screen sheet is up the header and bar are dimmed too and a tap on them lowers it, and the bar stands down while the software keyboard is up. The keychain gains a floating + and a sheet of the desktop's five adds (generate a key, paste a key, a password, a bucket, a tag) over the editors VaultViewModel already had, drawn as a full-screen page with labels above the boxes; a chosen item gets EDIT and COPY PUBLIC KEY beside MOVE and DELETE. Snippets get a floating + and cards that say RUNS or INSERTS. Files trade the seven-button block for a selection bar (save, and a ⋮ sheet with rename, move, permissions and a red delete), folder and file tiles, an upload button, and header actions for a terminal on the same host, refresh and close; a terminal's + sheet opens SFTP on that terminal's own host. The theme takes the audit's visual findings: Fluent's ClipToBounds is cleared on glowing buttons so the glow is no longer cut to a square (the desktop's Button.accent too), prose is Montserrat with mono kept for addresses and code, disabled secondary buttons are quieter than enabled ones, Fluent's dropdown, checkbox, switch, focus and selection brushes come from the palette, touch no longer leaves hover fills behind, and lists, nav entries and icon buttons carry names for TalkBack. Builds clean; checked on the emulator end to end: unlock, the three vault views, adding and deleting a password, connecting through the new sheet, files on the terminal's host with the selection bar and its sheet. App tests 727 of 733 pass with 5 skipped; the one failure, TheCountsAPhoneShows_ FollowEveryForwardsState, passes three runs of three alone and is untouched here. Layout tests pass.
This commit is contained in:
1 parent
6806e542f9
commit
5b32c76c95
24 files changed
+2022
-654
No files matched your search
@@ -36,6 +36,156 @@
|
||||
this paragraph to learn it was deliberate.
|
||||
-->
|
||||
|
||||
<!--
|
||||
◆ FLUENT'S OWN BRUSHES, ANSWERED ONCE HERE RATHER THAN CONTROL BY CONTROL.
|
||||
|
||||
The 2026-10-02 audit (M5) found the controls this file never styled still drawing Fluent's defaults
|
||||
among the ones it did: a dropdown with a bright white border on a black fill beside 10-radius fields on
|
||||
#101019, a checkbox in Fluent's blue, a switch drawn as a bare circle, and a focused box whose fill went
|
||||
to pure black. Each of those reads its colours through a DynamicResource key, and a key defined here is
|
||||
found before the theme's own, because Avalonia searches an application's styles last-first and this file
|
||||
is included after FluentTheme. So one block of keys restyles every instance on the head — the ones on
|
||||
screens written later included — where a selector per control would restyle only the ones somebody
|
||||
remembered.
|
||||
|
||||
Every value is a palette brush, never a new colour. The focused border is the accent rather than a
|
||||
grey: a box with the keyboard up is the one control the user is currently writing into, and the
|
||||
redesign gives it the ring that says so.
|
||||
-->
|
||||
<Styles.Resources>
|
||||
<StaticResource x:Key="TextControlBackground" ResourceKey="Field" />
|
||||
<StaticResource x:Key="TextControlBackgroundPointerOver" ResourceKey="Field" />
|
||||
<StaticResource x:Key="TextControlBackgroundFocused" ResourceKey="Field" />
|
||||
<StaticResource x:Key="TextControlBorderBrush" ResourceKey="BorderMid" />
|
||||
<StaticResource x:Key="TextControlBorderBrushPointerOver" ResourceKey="BorderMid" />
|
||||
<StaticResource x:Key="TextControlBorderBrushFocused" ResourceKey="TerminalTabAccent" />
|
||||
<StaticResource x:Key="TextControlForegroundFocused" ResourceKey="Text" />
|
||||
<StaticResource x:Key="TextControlPlaceholderForeground" ResourceKey="TextGhost" />
|
||||
<StaticResource x:Key="TextControlPlaceholderForegroundFocused" ResourceKey="TextGhost" />
|
||||
<StaticResource x:Key="TextControlPlaceholderForegroundPointerOver" ResourceKey="TextGhost" />
|
||||
|
||||
<StaticResource x:Key="ComboBoxBackground" ResourceKey="Field" />
|
||||
<StaticResource x:Key="ComboBoxBackgroundPointerOver" ResourceKey="Field" />
|
||||
<StaticResource x:Key="ComboBoxBackgroundPressed" ResourceKey="Hover" />
|
||||
<StaticResource x:Key="ComboBoxBackgroundUnfocused" ResourceKey="Field" />
|
||||
<StaticResource x:Key="ComboBoxBackgroundDisabled" ResourceKey="Raised" />
|
||||
<StaticResource x:Key="ComboBoxBorderBrush" ResourceKey="BorderMid" />
|
||||
<StaticResource x:Key="ComboBoxBorderBrushPointerOver" ResourceKey="BorderMid" />
|
||||
<StaticResource x:Key="ComboBoxBorderBrushPressed" ResourceKey="TerminalTabAccent" />
|
||||
<StaticResource x:Key="ComboBoxBorderBrushDisabled" ResourceKey="Border" />
|
||||
<StaticResource x:Key="ComboBoxBackgroundBorderBrushFocused" ResourceKey="TerminalTabAccent" />
|
||||
<StaticResource x:Key="ComboBoxBackgroundBorderBrushUnfocused" ResourceKey="BorderMid" />
|
||||
<StaticResource x:Key="ComboBoxForeground" ResourceKey="Text" />
|
||||
<StaticResource x:Key="ComboBoxForegroundFocused" ResourceKey="Text" />
|
||||
<StaticResource x:Key="ComboBoxForegroundFocusedPressed" ResourceKey="Text" />
|
||||
<StaticResource x:Key="ComboBoxDropDownGlyphForeground" ResourceKey="TextFaint" />
|
||||
<StaticResource x:Key="ComboBoxDropDownGlyphForegroundFocused" ResourceKey="TextFaint" />
|
||||
<StaticResource x:Key="ComboBoxDropDownGlyphForegroundFocusedPressed" ResourceKey="TextFaint" />
|
||||
<StaticResource x:Key="ComboBoxDropDownBackground" ResourceKey="Chip" />
|
||||
<StaticResource x:Key="ComboBoxDropDownBorderBrush" ResourceKey="BorderHover" />
|
||||
<StaticResource x:Key="ComboBoxItemBackgroundPointerOver" ResourceKey="Hover" />
|
||||
<StaticResource x:Key="ComboBoxItemBackgroundPressed" ResourceKey="Hover" />
|
||||
<StaticResource x:Key="ComboBoxItemBackgroundSelected" ResourceKey="Active" />
|
||||
<StaticResource x:Key="ComboBoxItemBackgroundSelectedPointerOver" ResourceKey="Active" />
|
||||
<StaticResource x:Key="ComboBoxItemBackgroundSelectedPressed" ResourceKey="Active" />
|
||||
<StaticResource x:Key="ComboBoxItemForegroundSelected" ResourceKey="AccentText" />
|
||||
<StaticResource x:Key="ComboBoxItemForegroundSelectedPointerOver" ResourceKey="AccentText" />
|
||||
<StaticResource x:Key="ComboBoxItemForegroundSelectedPressed" ResourceKey="AccentText" />
|
||||
|
||||
<StaticResource x:Key="CheckBoxCheckBackgroundFillUnchecked" ResourceKey="Field" />
|
||||
<StaticResource x:Key="CheckBoxCheckBackgroundFillUncheckedPointerOver" ResourceKey="Field" />
|
||||
<StaticResource x:Key="CheckBoxCheckBackgroundFillUncheckedPressed" ResourceKey="Hover" />
|
||||
<StaticResource x:Key="CheckBoxCheckBackgroundStrokeUnchecked" ResourceKey="TextGhost" />
|
||||
<StaticResource x:Key="CheckBoxCheckBackgroundStrokeUncheckedPointerOver" ResourceKey="TextGhost" />
|
||||
<StaticResource x:Key="CheckBoxCheckBackgroundStrokeUncheckedPressed" ResourceKey="TextFaint" />
|
||||
<StaticResource x:Key="CheckBoxCheckBackgroundFillChecked" ResourceKey="Accent" />
|
||||
<StaticResource x:Key="CheckBoxCheckBackgroundFillCheckedPointerOver" ResourceKey="Accent" />
|
||||
<StaticResource x:Key="CheckBoxCheckBackgroundFillCheckedPressed" ResourceKey="Accent" />
|
||||
<StaticResource x:Key="CheckBoxCheckGlyphForegroundChecked" ResourceKey="AccentInk" />
|
||||
<StaticResource x:Key="CheckBoxCheckGlyphForegroundCheckedPointerOver" ResourceKey="AccentInk" />
|
||||
<StaticResource x:Key="CheckBoxCheckGlyphForegroundCheckedPressed" ResourceKey="AccentInk" />
|
||||
<StaticResource x:Key="CheckBoxForegroundUnchecked" ResourceKey="Text" />
|
||||
<StaticResource x:Key="CheckBoxForegroundUncheckedPointerOver" ResourceKey="Text" />
|
||||
<StaticResource x:Key="CheckBoxForegroundUncheckedPressed" ResourceKey="Text" />
|
||||
<StaticResource x:Key="CheckBoxForegroundChecked" ResourceKey="Text" />
|
||||
<StaticResource x:Key="CheckBoxForegroundCheckedPointerOver" ResourceKey="Text" />
|
||||
<StaticResource x:Key="CheckBoxForegroundCheckedPressed" ResourceKey="Text" />
|
||||
|
||||
<StaticResource x:Key="ToggleSwitchFillOn" ResourceKey="Accent" />
|
||||
<StaticResource x:Key="ToggleSwitchFillOnPointerOver" ResourceKey="Accent" />
|
||||
<StaticResource x:Key="ToggleSwitchFillOnPressed" ResourceKey="Accent" />
|
||||
<StaticResource x:Key="ToggleSwitchStrokeOn" ResourceKey="Accent" />
|
||||
<StaticResource x:Key="ToggleSwitchStrokeOnPointerOver" ResourceKey="Accent" />
|
||||
<StaticResource x:Key="ToggleSwitchStrokeOnPressed" ResourceKey="Accent" />
|
||||
<StaticResource x:Key="ToggleSwitchKnobFillOn" ResourceKey="AccentInk" />
|
||||
<StaticResource x:Key="ToggleSwitchKnobFillOnPointerOver" ResourceKey="AccentInk" />
|
||||
<StaticResource x:Key="ToggleSwitchKnobFillOnPressed" ResourceKey="AccentInk" />
|
||||
<StaticResource x:Key="ToggleSwitchFillOff" ResourceKey="Hover" />
|
||||
<StaticResource x:Key="ToggleSwitchFillOffPointerOver" ResourceKey="Hover" />
|
||||
<StaticResource x:Key="ToggleSwitchFillOffPressed" ResourceKey="Hover" />
|
||||
<StaticResource x:Key="ToggleSwitchStrokeOff" ResourceKey="TextGhost" />
|
||||
<StaticResource x:Key="ToggleSwitchStrokeOffPointerOver" ResourceKey="TextGhost" />
|
||||
<StaticResource x:Key="ToggleSwitchStrokeOffPressed" ResourceKey="TextFaint" />
|
||||
<StaticResource x:Key="ToggleSwitchKnobFillOff" ResourceKey="TextFaint" />
|
||||
<StaticResource x:Key="ToggleSwitchKnobFillOffPointerOver" ResourceKey="TextFaint" />
|
||||
<StaticResource x:Key="ToggleSwitchKnobFillOffPressed" ResourceKey="TextFaint" />
|
||||
</Styles.Resources>
|
||||
|
||||
<!--
|
||||
Touch has no hover, so a pointer-over fill is one that sticks after a tap until the next touch lands
|
||||
somewhere else — the grey square the audit found left behind on Vaults' refresh button (M5). The
|
||||
transparent shapes keep their resting fill under the pointer; pressed is the feedback a finger gets.
|
||||
-->
|
||||
<Style Selector="Button.icon:pointerover /template/ ContentPresenter#PART_ContentPresenter">
|
||||
<Setter Property="Background" Value="Transparent" />
|
||||
</Style>
|
||||
<Style Selector="Button.row:pointerover /template/ ContentPresenter#PART_ContentPresenter">
|
||||
<Setter Property="Background" Value="Transparent" />
|
||||
</Style>
|
||||
<Style Selector="Button.secondary:pointerover /template/ ContentPresenter#PART_ContentPresenter">
|
||||
<Setter Property="Background" Value="Transparent" />
|
||||
<Setter Property="BorderBrush" Value="{StaticResource BorderMid}" />
|
||||
</Style>
|
||||
|
||||
<!--
|
||||
◆ A selected row in a list is not lit. The hosts list says why in HostsScreen.axaml — a lit row would be
|
||||
a mark with no action behind it — but only its own Border.hostrow.chosen was ever changed, and Fluent's
|
||||
ListBoxItem:selected went on painting #3D486B, a slate blue the palette has never held, under whichever
|
||||
row had been tapped last (audit M3). Pointer-over goes with it for the reason the button keys above do.
|
||||
-->
|
||||
<Style Selector="ListBoxItem:selected /template/ ContentPresenter#PART_ContentPresenter">
|
||||
<Setter Property="Background" Value="Transparent" />
|
||||
</Style>
|
||||
<Style Selector="ListBoxItem:pointerover /template/ ContentPresenter#PART_ContentPresenter">
|
||||
<Setter Property="Background" Value="Transparent" />
|
||||
</Style>
|
||||
<Style Selector="ListBoxItem:selected:pointerover /template/ ContentPresenter#PART_ContentPresenter">
|
||||
<Setter Property="Background" Value="Transparent" />
|
||||
</Style>
|
||||
<Style Selector="ListBoxItem:pressed /template/ ContentPresenter#PART_ContentPresenter">
|
||||
<Setter Property="Background" Value="{StaticResource Hover}" />
|
||||
</Style>
|
||||
|
||||
<!--
|
||||
The dropdown, on TextBox.field's numbers so the two sit in one form as one kind of box: 44 tall, a
|
||||
10 radius, Field on BorderMid. The colours come from the keys above; these are the geometry Fluent sets
|
||||
as plain values.
|
||||
-->
|
||||
<Style Selector="ComboBox">
|
||||
<Setter Property="MinHeight" Value="44" />
|
||||
<Setter Property="CornerRadius" Value="10" />
|
||||
<Setter Property="Padding" Value="14,0,10,0" />
|
||||
<Setter Property="VerticalContentAlignment" Value="Center" />
|
||||
</Style>
|
||||
|
||||
<!--
|
||||
A checkbox's caption on the box's own line. Fluent tops the content of a CheckBox taller than its box,
|
||||
so in a 44-pixel row the label sat below the tick's centre (audit M5).
|
||||
-->
|
||||
<Style Selector="CheckBox">
|
||||
<Setter Property="VerticalContentAlignment" Value="Center" />
|
||||
</Style>
|
||||
|
||||
<Style Selector="Button.primary">
|
||||
<Setter Property="Height" Value="48" />
|
||||
<Setter Property="HorizontalAlignment" Value="Stretch" />
|
||||
@@ -46,6 +196,14 @@
|
||||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||||
<Setter Property="FontSize" Value="12" />
|
||||
<Setter Property="FontWeight" Value="SemiBold" />
|
||||
<!--
|
||||
◆ Off, because Fluent's Button theme turns it on, and the glow below is drawn outside the control by
|
||||
definition. With the clip on, the blur was cut at the button's square bounds and showed as a lighter
|
||||
rectangle behind the rounded fill on every primary button and the FAB (audit M1). Measured in the
|
||||
desktop's layout harness: ClipToBounds reads True under the theme, and cleared, the glow renders whole.
|
||||
The desktop's Button.accent carries the same setter for the same reason.
|
||||
-->
|
||||
<Setter Property="ClipToBounds" Value="False" />
|
||||
</Style>
|
||||
|
||||
<!--
|
||||
@@ -86,6 +244,11 @@
|
||||
<Setter Property="TextElement.Foreground" Value="{StaticResource TextFaint}" />
|
||||
</Style>
|
||||
|
||||
<!--
|
||||
The alternative to a primary button, and in a row of the two it is on the LEFT: Android puts the action
|
||||
that confirms on the right, and every two-button row on this head had it the other way round until the
|
||||
2026-10-04 redesign (audit M12) — CANCEL | SAVE, KEEP | DELETE, CANCEL | CONNECT.
|
||||
-->
|
||||
<Style Selector="Button.secondary">
|
||||
<Setter Property="Height" Value="48" />
|
||||
<Setter Property="HorizontalAlignment" Value="Stretch" />
|
||||
@@ -100,6 +263,22 @@
|
||||
<Setter Property="FontSize" Value="11.5" />
|
||||
<Setter Property="FontWeight" Value="SemiBold" />
|
||||
</Style>
|
||||
<!--
|
||||
◆ Disabled is quieter than enabled, which Fluent had the wrong way round: with no rule here its #3C3C43
|
||||
disabled slab filled the outline, so SFTP's unavailable SAVE FILE was the heaviest button in its row
|
||||
(audit M4). The same flat-and-unlit treatment Button.primary:disabled gets, on an outline.
|
||||
-->
|
||||
<Style Selector="Button.secondary /template/ ContentPresenter#PART_ContentPresenter">
|
||||
<Setter Property="Background" Value="Transparent" />
|
||||
</Style>
|
||||
<Style Selector="Button.secondary:pressed /template/ ContentPresenter#PART_ContentPresenter">
|
||||
<Setter Property="Background" Value="{StaticResource Hover}" />
|
||||
</Style>
|
||||
<Style Selector="Button.secondary:disabled /template/ ContentPresenter#PART_ContentPresenter">
|
||||
<Setter Property="Background" Value="Transparent" />
|
||||
<Setter Property="BorderBrush" Value="{StaticResource Border}" />
|
||||
<Setter Property="TextElement.Foreground" Value="{StaticResource TextGhost}" />
|
||||
</Style>
|
||||
|
||||
<Style Selector="Button.danger">
|
||||
<Setter Property="Height" Value="48" />
|
||||
@@ -324,6 +503,8 @@
|
||||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||||
<Setter Property="FontSize" Value="24" />
|
||||
<Setter Property="FontWeight" Value="SemiBold" />
|
||||
<!-- Off for the glow; see the remark on Button.primary's own setter, which is the same fix. -->
|
||||
<Setter Property="ClipToBounds" Value="False" />
|
||||
</Style>
|
||||
<!-- See the remark above Button.primary's own /template/ ContentPresenter rule: BoxShadow has no home on
|
||||
a Button itself, so the fill moves down here alongside it rather than staying a plain Setter. -->
|
||||
@@ -468,9 +649,9 @@
|
||||
<Setter Property="BorderBrush" Value="{StaticResource BorderMid}" />
|
||||
<Setter Property="BorderThickness" Value="1" />
|
||||
<Setter Property="Foreground" Value="{StaticResource TextDim}" />
|
||||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||||
<Setter Property="FontSize" Value="10.5" />
|
||||
<Setter Property="FontWeight" Value="Medium" />
|
||||
<!-- Sans since the 2026-10-04 redesign: a category is a word, "SSH keys 3", rather than an identifier. -->
|
||||
<Setter Property="FontSize" Value="13" />
|
||||
<Setter Property="FontWeight" Value="SemiBold" />
|
||||
<Setter Property="Template">
|
||||
<ControlTemplate>
|
||||
<Border Name="Chip" Background="{TemplateBinding Background}"
|
||||
@@ -493,11 +674,88 @@
|
||||
</Style>
|
||||
|
||||
<!--
|
||||
No segmented control either. The design draws one over the file listing for LOCAL / REMOTE, and there is
|
||||
no local side on a phone — see FilesScreen. The two-way choices that are real, the log's two logs and
|
||||
the keychain's categories, are chip rows, which is the same control at the same size without a well
|
||||
around it.
|
||||
◆ A segmented control, which this file used to argue against having.
|
||||
|
||||
The argument was that the one the v2 design drew — LOCAL / REMOTE over the file listing — had nothing to
|
||||
switch on a phone, and the choices that were real were chip rows. The 2026-10-04 redesign has a choice
|
||||
that is a segmented control in every sense: the open vault's HOSTS · KEYCHAIN · SNIPPETS, three equal,
|
||||
exclusive views of one thing, always all three, never scrolled. Chips would make it a filter; a well with
|
||||
one lit segment says it is where you are.
|
||||
|
||||
The well is Panel on BorderSubtle at 14, the lit segment Active at 10 — a step inside it on the ladder,
|
||||
as a button sits inside a card. Sans and 14, since these are words rather than identifiers.
|
||||
-->
|
||||
<Style Selector="Border.segmented">
|
||||
<Setter Property="Background" Value="{StaticResource Panel}" />
|
||||
<Setter Property="BorderBrush" Value="{StaticResource BorderSubtle}" />
|
||||
<Setter Property="BorderThickness" Value="1" />
|
||||
<Setter Property="CornerRadius" Value="14" />
|
||||
<Setter Property="Padding" Value="4" />
|
||||
</Style>
|
||||
<Style Selector="RadioButton.segment">
|
||||
<Setter Property="MinHeight" Value="40" />
|
||||
<Setter Property="HorizontalAlignment" Value="Stretch" />
|
||||
<Setter Property="Margin" Value="2,0" />
|
||||
<Setter Property="CornerRadius" Value="10" />
|
||||
<Setter Property="Background" Value="Transparent" />
|
||||
<Setter Property="Foreground" Value="{StaticResource TextFaint}" />
|
||||
<Setter Property="FontSize" Value="14" />
|
||||
<Setter Property="FontWeight" Value="SemiBold" />
|
||||
<Setter Property="Template">
|
||||
<ControlTemplate>
|
||||
<Border Background="{TemplateBinding Background}" CornerRadius="{TemplateBinding CornerRadius}"
|
||||
MinHeight="{TemplateBinding MinHeight}">
|
||||
<ContentPresenter Content="{TemplateBinding Content}"
|
||||
HorizontalAlignment="Center" VerticalAlignment="Center" />
|
||||
</Border>
|
||||
</ControlTemplate>
|
||||
</Setter>
|
||||
</Style>
|
||||
<Style Selector="RadioButton.segment:checked">
|
||||
<Setter Property="Background" Value="{StaticResource Active}" />
|
||||
<Setter Property="Foreground" Value="{StaticResource Text}" />
|
||||
</Style>
|
||||
<Style Selector="RadioButton.segment:pressed">
|
||||
<Setter Property="Background" Value="{StaticResource Hover}" />
|
||||
</Style>
|
||||
|
||||
<!--
|
||||
The eye beside a secret box: outlined like the box it sits beside, lit while it is revealing. Lit with
|
||||
the accent ring the focused box wears, so "you can read this" is said in the same colour as "you are
|
||||
typing here".
|
||||
-->
|
||||
<Style Selector="ToggleButton.reveal">
|
||||
<Setter Property="Padding" Value="0" />
|
||||
<Setter Property="CornerRadius" Value="10" />
|
||||
<Setter Property="Background" Value="{StaticResource Field}" />
|
||||
<Setter Property="BorderBrush" Value="{StaticResource BorderMid}" />
|
||||
<Setter Property="BorderThickness" Value="1" />
|
||||
<Setter Property="Foreground" Value="{StaticResource TextFaint}" />
|
||||
<Setter Property="HorizontalContentAlignment" Value="Center" />
|
||||
<Setter Property="VerticalContentAlignment" Value="Center" />
|
||||
</Style>
|
||||
<Style Selector="ToggleButton.reveal /template/ ContentPresenter#PART_ContentPresenter">
|
||||
<Setter Property="Background" Value="{StaticResource Field}" />
|
||||
<Setter Property="BorderBrush" Value="{StaticResource BorderMid}" />
|
||||
</Style>
|
||||
<Style Selector="ToggleButton.reveal:checked /template/ ContentPresenter#PART_ContentPresenter">
|
||||
<Setter Property="Background" Value="{StaticResource Active}" />
|
||||
<Setter Property="BorderBrush" Value="{StaticResource TerminalTabAccent}" />
|
||||
<Setter Property="Foreground" Value="{StaticResource AccentText}" />
|
||||
</Style>
|
||||
|
||||
<!--
|
||||
One Material icon: a codepoint of the embedded font the desktop draws its icons with, standing where a
|
||||
Unicode glyph stood (audit M7). Hidden from the accessibility tree — the codepoint reads as nothing, and the
|
||||
control around it carries the name — and it inherits its colour, so an icon in a button is the button's.
|
||||
-->
|
||||
<Style Selector="TextBlock.icon">
|
||||
<Setter Property="FontFamily" Value="{StaticResource IconFont}" />
|
||||
<Setter Property="FontSize" Value="20" />
|
||||
<Setter Property="VerticalAlignment" Value="Center" />
|
||||
<Setter Property="HorizontalAlignment" Value="Center" />
|
||||
<Setter Property="AutomationProperties.AccessibilityView" Value="Raw" />
|
||||
</Style>
|
||||
|
||||
<Style Selector="TextBox.field">
|
||||
<Setter Property="Height" Value="44" />
|
||||
@@ -657,25 +915,45 @@
|
||||
row's own height around — now say TextWrapping="NoWrap" beside their TextTrimming, which is the pairing
|
||||
that was always meant and was previously being had by accident.
|
||||
-->
|
||||
<!--
|
||||
◆ PROSE IS IN THE SANS FACE NOW, AND THAT IS THE RECORDED DECISION CATCHING UP RATHER THAN A NEW ONE.
|
||||
|
||||
docs/design-import-gaps.md ("The phone catches up") says the phone shares the desktop's faces, and on
|
||||
the desktop a hint, a caption and a settings title are Montserrat while the mono is kept for what is
|
||||
machine-shaped. These three still set MonoFont, so every paragraph on this head was JetBrains Mono —
|
||||
long, wide-set lines that the 2026-10-02 audit (M2) found tiring to read on the enrolment, settings and
|
||||
SFTP screens. They now take the application's default family, which is Montserrat (see
|
||||
DodoSshAndroidApplication.CustomizeAppBuilder).
|
||||
|
||||
One size step up with the change: Montserrat at the old mono sizes set noticeably smaller on the line,
|
||||
and 10-pixel captions were already at the floor. A block that shows an address, a path or a command
|
||||
rather than a sentence says Classes="detail code" at its own site — see TextBlock.detail.code below — so
|
||||
the split is still made where the content is known.
|
||||
-->
|
||||
<Style Selector="TextBlock.detail">
|
||||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||||
<Setter Property="Foreground" Value="{StaticResource TextFaint}" />
|
||||
<Setter Property="FontSize" Value="10" />
|
||||
<Setter Property="FontSize" Value="11.5" />
|
||||
<Setter Property="TextWrapping" Value="Wrap" />
|
||||
</Style>
|
||||
<Style Selector="TextBlock.body">
|
||||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||||
<Setter Property="Foreground" Value="{StaticResource TextDim}" />
|
||||
<Setter Property="FontSize" Value="11" />
|
||||
<Setter Property="FontSize" Value="12.5" />
|
||||
<Setter Property="LineHeight" Value="19" />
|
||||
<Setter Property="TextWrapping" Value="Wrap" />
|
||||
</Style>
|
||||
<Style Selector="TextBlock.title">
|
||||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||||
<Setter Property="Foreground" Value="{StaticResource Text}" />
|
||||
<Setter Property="FontSize" Value="15" />
|
||||
<Setter Property="FontWeight" Value="SemiBold" />
|
||||
</Style>
|
||||
<!--
|
||||
The other half of that split: a detail line that is an address, a path, a fingerprint fragment or a
|
||||
command. Combined with .detail rather than replacing it, so wrapping and colour stay the caption's.
|
||||
-->
|
||||
<Style Selector="TextBlock.detail.code">
|
||||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||||
<Setter Property="FontSize" Value="11" />
|
||||
</Style>
|
||||
|
||||
<!--
|
||||
A screen's own name, in the header. The one place this design is not monospaced: the design sets every
|
||||
|
||||
Reference in new issue
Block a user