The checks engine, the path and the cards: me-web? 0.1 reads the connection

MeWeb.Core runs seven checks concurrently and reports each as it settles:
online or behind a login page, this connection, the public IPv4 and IPv6
seen from v4./v6.meweb, the provider from a built-in map, the router
(UPnP IGD, NAT-PMP and PCP, read-only), address sharing (router WAN
against the echo, TTL hops only as a hint), and the history kept on the
device. The app draws the path from this device to the internet and lights
it node by node, with a card per check and a sheet listing every host it
contacts.

The provider map is iptoasn's table compressed to 2.1 MB by
tools/knowledge.cs and built before every app release; eleven Italian
provider profiles carry each fact with who said it, the source and the
month. The server gains a download page (en, it) and /download/{platform}
from the latest Gitea release.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB
This commit is contained in:
thepraandClaude Opus 5.5 committed 2026-10-15 04:39:03 +02:00
1 parent 16a1cecaae
commit 0dffbc27d6
61 files changed
+3750 -149

No files matched your search

+15 -3
View File
@@ -6,14 +6,21 @@
<Color x:Key="Ground">#1B141C</Color>
<Color x:Key="Surface">#2C222D</Color>
<Color x:Key="SurfaceRaised">#352A36</Color>
<Color x:Key="Line">#3A2E3B</Color>
<Color x:Key="Line">#4A3C4B</Color>
<Color x:Key="TextStrong">#F0EAEF</Color>
<Color x:Key="TextSoft">#A79AA6</Color>
<Color x:Key="TextSoft">#B3A6B2</Color>
<Color x:Key="Good">#6FCF97</Color>
<Color x:Key="Caution">#F2C14E</Color>
<Color x:Key="Bad">#E85D6C</Color>
<Color x:Key="Bad">#F06B79</Color>
<Color x:Key="GoodTint">#2E6FCF97</Color>
<Color x:Key="CautionTint">#2EF2C14E</Color>
<Color x:Key="BadTint">#33F06B79</Color>
<Color x:Key="NeutralTint">#33B3A6B2</Color>
<Color x:Key="Scrim">#E6140F15</Color>
<SolidColorBrush x:Key="BrandRedBrush" Color="{StaticResource BrandRed}" />
<SolidColorBrush x:Key="BrandRedDarkBrush" Color="{StaticResource BrandRedDark}" />
<SolidColorBrush x:Key="BrandRedLightBrush" Color="{StaticResource BrandRedLight}" />
<SolidColorBrush x:Key="GroundBrush" Color="{StaticResource Ground}" />
<SolidColorBrush x:Key="SurfaceBrush" Color="{StaticResource Surface}" />
<SolidColorBrush x:Key="SurfaceRaisedBrush" Color="{StaticResource SurfaceRaised}" />
@@ -23,4 +30,9 @@
<SolidColorBrush x:Key="GoodBrush" Color="{StaticResource Good}" />
<SolidColorBrush x:Key="CautionBrush" Color="{StaticResource Caution}" />
<SolidColorBrush x:Key="BadBrush" Color="{StaticResource Bad}" />
<SolidColorBrush x:Key="GoodTintBrush" Color="{StaticResource GoodTint}" />
<SolidColorBrush x:Key="CautionTintBrush" Color="{StaticResource CautionTint}" />
<SolidColorBrush x:Key="BadTintBrush" Color="{StaticResource BadTint}" />
<SolidColorBrush x:Key="NeutralTintBrush" Color="{StaticResource NeutralTint}" />
<SolidColorBrush x:Key="ScrimBrush" Color="{StaticResource Scrim}" />
</ResourceDictionary>
+29
View File
@@ -0,0 +1,29 @@
<ResourceDictionary xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StreamGeometry x:Key="IconLaptop">M 18 5 a 2 2 0 0 1 2 2 v 8.526 a 2 2 0 0 0 .212 .897 l 1.068 2.127 a 1 1 0 0 1 -.9 1.45 H 3.62 a 1 1 0 0 1 -.9 -1.45 l 1.068 -2.127 A 2 2 0 0 0 4 15.526 V 7 a 2 2 0 0 1 2 -2 z M 20.054 15.987 H 3.946</StreamGeometry>
<StreamGeometry x:Key="IconSmartphone">M 7 2 H 17 A 2 2 0 0 1 19 4 V 20 A 2 2 0 0 1 17 22 H 7 A 2 2 0 0 1 5 20 V 4 A 2 2 0 0 1 7 2 Z M 12 18 h .01</StreamGeometry>
<StreamGeometry x:Key="IconWifi">M 12 20 h .01 M 2 8.82 a 15 15 0 0 1 20 0 M 5 12.859 a 10 10 0 0 1 14 0 M 8.5 16.429 a 5 5 0 0 1 7 0</StreamGeometry>
<StreamGeometry x:Key="IconCable">M 17 19 a 1 1 0 0 1 -1 -1 v -2 a 2 2 0 0 1 2 -2 h 2 a 2 2 0 0 1 2 2 v 2 a 1 1 0 0 1 -1 1 z M 17 21 v -2 M 19 14 V 6.5 a 1 1 0 0 0 -7 0 v 11 a 1 1 0 0 1 -7 0 V 10 M 21 21 v -2 M 3 5 V 3 M 4 10 a 2 2 0 0 1 -2 -2 V 6 a 1 1 0 0 1 1 -1 h 4 a 1 1 0 0 1 1 1 v 2 a 2 2 0 0 1 -2 2 z M 7 5 V 3</StreamGeometry>
<StreamGeometry x:Key="IconRouter">M 4 14 H 20 A 2 2 0 0 1 22 16 V 20 A 2 2 0 0 1 20 22 H 4 A 2 2 0 0 1 2 20 V 16 A 2 2 0 0 1 4 14 Z M 6.01 18 H 6 M 10.01 18 H 10 M 15 10 v 4 M 17.84 7.17 a 4 4 0 0 0 -5.66 0 M 20.66 4.34 a 8 8 0 0 0 -11.31 0</StreamGeometry>
<StreamGeometry x:Key="IconBuilding2">M 10 12 h 4 M 10 8 h 4 M 14 21 v -3 a 2 2 0 0 0 -4 0 v 3 M 6 10 H 4 a 2 2 0 0 0 -2 2 v 7 a 2 2 0 0 0 2 2 h 16 a 2 2 0 0 0 2 -2 V 9 a 2 2 0 0 0 -2 -2 h -2 M 6 21 V 5 a 2 2 0 0 1 2 -2 h 8 a 2 2 0 0 1 2 2 v 16</StreamGeometry>
<StreamGeometry x:Key="IconGlobe">M 2 12 A 10 10 0 1 0 22 12 A 10 10 0 1 0 2 12 Z M 12 2 a 14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0 -20 M 2 12 h 20</StreamGeometry>
<StreamGeometry x:Key="IconNetwork">M 17 16 H 21 A 1 1 0 0 1 22 17 V 21 A 1 1 0 0 1 21 22 H 17 A 1 1 0 0 1 16 21 V 17 A 1 1 0 0 1 17 16 Z M 3 16 H 7 A 1 1 0 0 1 8 17 V 21 A 1 1 0 0 1 7 22 H 3 A 1 1 0 0 1 2 21 V 17 A 1 1 0 0 1 3 16 Z M 10 2 H 14 A 1 1 0 0 1 15 3 V 7 A 1 1 0 0 1 14 8 H 10 A 1 1 0 0 1 9 7 V 3 A 1 1 0 0 1 10 2 Z M 5 16 v -3 a 1 1 0 0 1 1 -1 h 12 a 1 1 0 0 1 1 1 v 3 M 12 12 V 8</StreamGeometry>
<StreamGeometry x:Key="IconRadioTower">M 4.9 16.1 C 1 12.2 1 5.8 4.9 1.9 M 7.8 4.7 a 6.14 6.14 0 0 0 -.8 7.5 M 10 9 A 2 2 0 1 0 14 9 A 2 2 0 1 0 10 9 Z M 16.2 4.8 c 2 2 2.26 5.11 .8 7.47 M 19.1 1.9 a 9.96 9.96 0 0 1 0 14.1 M 9.5 18 h 5 m 8 22 4 -11 4 11</StreamGeometry>
<StreamGeometry x:Key="IconHistory">M 3 12 a 9 9 0 1 0 9 -9 9.75 9.75 0 0 0 -6.74 2.74 L 3 8 M 3 3 v 5 h 5 M 12 7 v 5 l 4 2</StreamGeometry>
<StreamGeometry x:Key="IconInfo">M 2 12 A 10 10 0 1 0 22 12 A 10 10 0 1 0 2 12 Z M 12 16 v -4 M 12 8 h .01</StreamGeometry>
<StreamGeometry x:Key="IconCircleCheck">M 2 12 A 10 10 0 1 0 22 12 A 10 10 0 1 0 2 12 Z m 16 9 -5.5 5.5 L 8 12</StreamGeometry>
<StreamGeometry x:Key="IconTriangleAlert">m 21.73 18 -8 -14 a 2 2 0 0 0 -3.48 0 l -8 14 A 2 2 0 0 0 4 21 h 16 a 2 2 0 0 0 1.73 -3 M 12 9 v 4 M 12 17 h .01</StreamGeometry>
<StreamGeometry x:Key="IconCircleX">M 2 12 A 10 10 0 1 0 22 12 A 10 10 0 1 0 2 12 Z m 15 9 -6 6 m 9 9 6 6</StreamGeometry>
<StreamGeometry x:Key="IconCircleHelp">M 2 12 A 10 10 0 1 0 22 12 A 10 10 0 1 0 2 12 Z M 9.09 9 a 3 3 0 0 1 5.83 1 c 0 2 -3 3 -3 3 M 12 17 h .01</StreamGeometry>
<StreamGeometry x:Key="IconRefreshCw">M 3 12 a 9 9 0 0 1 9 -9 9.75 9.75 0 0 1 6.74 2.74 L 21 8 M 21 3 v 5 h -5 M 21 12 a 9 9 0 0 1 -9 9 9.75 9.75 0 0 1 -6.74 -2.74 L 3 16 M 8 16 H 3 v 5</StreamGeometry>
<StreamGeometry x:Key="IconLanguages">m 5 8 6 6 m 4 14 6 -6 2 -3 M 2 5 h 12 M 7 2 h 1 m 22 22 -5 -10 -5 10 M 14 18 h 6</StreamGeometry>
<StreamGeometry x:Key="IconPlug">M 12 22 v -5 M 15 8 V 2 M 17 8 a 1 1 0 0 1 1 1 v 4 a 4 4 0 0 1 -4 4 h -4 a 4 4 0 0 1 -4 -4 V 9 a 1 1 0 0 1 1 -1 z M 9 8 V 2</StreamGeometry>
<StreamGeometry x:Key="IconLayers">M 12.83 2.18 a 2 2 0 0 0 -1.66 0 L 2.6 6.08 a 1 1 0 0 0 0 1.83 l 8.58 3.91 a 2 2 0 0 0 1.66 0 l 8.58 -3.9 a 1 1 0 0 0 0 -1.83 z M 2 12 a 1 1 0 0 0 .58 .91 l 8.6 3.91 a 2 2 0 0 0 1.65 0 l 8.58 -3.9 A 1 1 0 0 0 22 12 M 2 17 a 1 1 0 0 0 .58 .91 l 8.6 3.91 a 2 2 0 0 0 1.65 0 l 8.58 -3.9 A 1 1 0 0 0 22 17</StreamGeometry>
<StreamGeometry x:Key="IconMapPin">M 20 10 c 0 4.993 -5.539 10.193 -7.399 11.799 a 1 1 0 0 1 -1.202 0 C 9.539 20.193 4 14.993 4 10 a 8 8 0 0 1 16 0 M 9 10 A 3 3 0 1 0 15 10 A 3 3 0 1 0 9 10 Z</StreamGeometry>
<StreamGeometry x:Key="IconChevronDown">m 6 9 6 6 6 -6</StreamGeometry>
<StreamGeometry x:Key="IconServer">M 4 2 H 20 A 2 2 0 0 1 22 4 V 8 A 2 2 0 0 1 20 10 H 4 A 2 2 0 0 1 2 8 V 4 A 2 2 0 0 1 4 2 Z M 4 14 H 20 A 2 2 0 0 1 22 16 V 20 A 2 2 0 0 1 20 22 H 4 A 2 2 0 0 1 2 20 V 16 A 2 2 0 0 1 4 14 Z M 6 6 L 6.01 6 M 6 18 L 6.01 18</StreamGeometry>
<StreamGeometry x:Key="IconShieldCheck">M 20 13 c 0 5 -3.5 7.5 -7.66 8.95 a 1 1 0 0 1 -.67 -.01 C 7.5 20.5 4 18 4 13 V 6 a 1 1 0 0 1 1 -1 c 2 0 4.5 -1.2 6.24 -2.72 a 1.17 1.17 0 0 1 1.52 0 C 14.51 3.81 17 5 19 5 a 1 1 0 0 1 1 1 z m 9 12 2 2 4 -4</StreamGeometry>
<StreamGeometry x:Key="IconRoute">M 3 19 A 3 3 0 1 0 9 19 A 3 3 0 1 0 3 19 Z M 9 19 h 8.5 a 3.5 3.5 0 0 0 0 -7 h -11 a 3.5 3.5 0 0 1 0 -7 H 15 M 15 5 A 3 3 0 1 0 21 5 A 3 3 0 1 0 15 5 Z</StreamGeometry>
<StreamGeometry x:Key="IconArrowUpRight">M 7 7 h 10 v 10 M 7 17 17 7</StreamGeometry>
<StreamGeometry x:Key="IconDownload">M 12 15 V 3 M 21 15 v 4 a 2 2 0 0 1 -2 2 H 5 a 2 2 0 0 1 -2 -2 v -4 m 7 10 5 5 5 -5</StreamGeometry>
</ResourceDictionary>
+263 -7
View File
@@ -1,12 +1,12 @@
<Styles xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style Selector="TextBlock.title">
<Setter Property="FontSize" Value="34" />
<Setter Property="FontSize" Value="30" />
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="Foreground" Value="{StaticResource TextStrongBrush}" />
</Style>
<Style Selector="TextBlock.lead">
<Setter Property="FontSize" Value="18" />
<Setter Property="FontSize" Value="17" />
<Setter Property="Foreground" Value="{StaticResource TextSoftBrush}" />
<Setter Property="TextWrapping" Value="Wrap" />
<Setter Property="TextAlignment" Value="Center" />
@@ -16,11 +16,26 @@
<Setter Property="FontWeight" Value="SemiBold" />
<Setter Property="Foreground" Value="{StaticResource TextStrongBrush}" />
<Setter Property="TextAlignment" Value="Center" />
<Setter Property="TextWrapping" Value="Wrap" />
</Style>
<Style Selector="TextBlock.section">
<Setter Property="FontSize" Value="19" />
<Setter Property="FontWeight" Value="SemiBold" />
<Setter Property="Foreground" Value="{StaticResource TextStrongBrush}" />
<Setter Property="Margin" Value="8,0" />
</Style>
<Style Selector="TextBlock.small">
<Setter Property="FontSize" Value="13" />
<Setter Property="Foreground" Value="{StaticResource TextSoftBrush}" />
<Setter Property="TextWrapping" Value="Wrap" />
</Style>
<Style Selector="TextBlock.body">
<Setter Property="FontSize" Value="15" />
<Setter Property="Foreground" Value="{StaticResource TextStrongBrush}" />
<Setter Property="TextWrapping" Value="Wrap" />
<Setter Property="LineHeight" Value="22" />
</Style>
<Style Selector="Button.primary">
<Setter Property="Background" Value="{StaticResource BrandRedBrush}" />
<Setter Property="Foreground" Value="{StaticResource TextStrongBrush}" />
@@ -30,27 +45,268 @@
<Setter Property="CornerRadius" Value="28" />
<Setter Property="HorizontalAlignment" Value="Center" />
</Style>
<Style Selector="Button.primary:pointerover /template/ ContentPresenter">
<Setter Property="Background" Value="{StaticResource BrandRedLightBrush}" />
<Setter Property="Foreground" Value="{StaticResource GroundBrush}" />
</Style>
<Style Selector="Button.primary:disabled /template/ ContentPresenter">
<Setter Property="Background" Value="{StaticResource BrandRedDarkBrush}" />
<Setter Property="Foreground" Value="{StaticResource TextStrongBrush}" />
</Style>
<Style Selector="Button.link">
<Setter Property="Background" Value="Transparent" />
<Setter Property="Foreground" Value="{StaticResource BrandRedBrush}" />
<Setter Property="Padding" Value="4,2" />
<Setter Property="Foreground" Value="{StaticResource BrandRedLightBrush}" />
<Setter Property="Padding" Value="0,2" />
<Setter Property="FontSize" Value="13" />
<Setter Property="Cursor" Value="Hand" />
</Style>
<Style Selector="Button.link:pointerover /template/ ContentPresenter">
<Setter Property="Background" Value="Transparent" />
<Setter Property="Foreground" Value="{StaticResource TextStrongBrush}" />
</Style>
<Style Selector="Button.quiet">
<Setter Property="Background" Value="{StaticResource SurfaceRaisedBrush}" />
<Setter Property="Foreground" Value="{StaticResource TextStrongBrush}" />
<Setter Property="CornerRadius" Value="18" />
<Setter Property="Padding" Value="14,8" />
</Style>
<Style Selector="Button.round">
<Setter Property="Background" Value="{StaticResource SurfaceRaisedBrush}" />
<Setter Property="CornerRadius" Value="20" />
<Setter Property="Width" Value="40" />
<Setter Property="Height" Value="40" />
<Setter Property="Padding" Value="0" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="VerticalContentAlignment" Value="Center" />
</Style>
<Style Selector="Path.icon">
<Setter Property="Stroke" Value="{StaticResource TextStrongBrush}" />
<Setter Property="StrokeThickness" Value="2" />
<Setter Property="StrokeLineCap" Value="Round" />
<Setter Property="StrokeJoin" Value="Round" />
<Setter Property="Width" Value="24" />
<Setter Property="Height" Value="24" />
</Style>
<Style Selector="Ellipse.pulse">
<Setter Property="Fill" Value="{StaticResource BrandRedBrush}" />
<Style.Animations>
<Animation Duration="0:0:1.6" IterationCount="Infinite">
<KeyFrame Cue="0%">
<Setter Property="Opacity" Value="0.85" />
<Setter Property="Opacity" Value="0.7" />
<Setter Property="ScaleTransform.ScaleX" Value="0.8" />
<Setter Property="ScaleTransform.ScaleY" Value="0.8" />
</KeyFrame>
<KeyFrame Cue="100%">
<Setter Property="Opacity" Value="0" />
<Setter Property="ScaleTransform.ScaleX" Value="1.5" />
<Setter Property="ScaleTransform.ScaleY" Value="1.5" />
<Setter Property="ScaleTransform.ScaleX" Value="1.45" />
<Setter Property="ScaleTransform.ScaleY" Value="1.45" />
</KeyFrame>
</Animation>
</Style.Animations>
</Style>
<Style Selector="Border.banner">
<Setter Property="Background" Value="{StaticResource SurfaceRaisedBrush}" />
<Setter Property="BorderBrush" Value="{StaticResource BrandRedBrush}" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="CornerRadius" Value="12" />
<Setter Property="Padding" Value="16,10" />
<Setter Property="HorizontalAlignment" Value="Center" />
</Style>
<Style Selector="Ellipse.disc">
<Setter Property="Fill" Value="{StaticResource SurfaceRaisedBrush}" />
<Setter Property="Stroke" Value="{StaticResource LineBrush}" />
<Setter Property="StrokeThickness" Value="3" />
</Style>
<Style Selector="Ellipse.disc.good">
<Setter Property="Stroke" Value="{StaticResource GoodBrush}" />
<Setter Property="Fill" Value="{StaticResource GoodTintBrush}" />
</Style>
<Style Selector="Ellipse.disc.caution">
<Setter Property="Stroke" Value="{StaticResource CautionBrush}" />
<Setter Property="Fill" Value="{StaticResource CautionTintBrush}" />
</Style>
<Style Selector="Ellipse.disc.bad">
<Setter Property="Stroke" Value="{StaticResource BadBrush}" />
<Setter Property="Fill" Value="{StaticResource BadTintBrush}" />
</Style>
<Style Selector="Ellipse.disc.unknown">
<Setter Property="Stroke" Value="{StaticResource TextSoftBrush}" />
<Setter Property="Fill" Value="{StaticResource NeutralTintBrush}" />
</Style>
<Style Selector=":is(Panel).node">
<Setter Property="Opacity" Value="0.45" />
<Setter Property="RenderTransform" Value="scale(0.9)" />
<Setter Property="Transitions">
<Transitions>
<DoubleTransition Property="Opacity" Duration="0:0:0.45" />
<TransformOperationsTransition Property="RenderTransform" Duration="0:0:0.45" Easing="BackEaseOut" />
</Transitions>
</Setter>
</Style>
<Style Selector=":is(Panel).node.lit">
<Setter Property="Opacity" Value="1" />
<Setter Property="RenderTransform" Value="scale(1)" />
</Style>
<Style Selector="TextBlock.nodeTitle">
<Setter Property="FontSize" Value="14" />
<Setter Property="FontWeight" Value="SemiBold" />
<Setter Property="Foreground" Value="{StaticResource TextStrongBrush}" />
<Setter Property="TextWrapping" Value="Wrap" />
</Style>
<Style Selector="TextBlock.nodeSubtitle">
<Setter Property="FontSize" Value="12" />
<Setter Property="Foreground" Value="{StaticResource TextSoftBrush}" />
<Setter Property="TextWrapping" Value="Wrap" />
</Style>
<Style Selector="TextBlock.linkLabel">
<Setter Property="FontSize" Value="12" />
<Setter Property="Foreground" Value="{StaticResource TextSoftBrush}" />
</Style>
<Style Selector="Line.connector">
<Setter Property="Stroke" Value="{StaticResource LineBrush}" />
<Setter Property="StrokeThickness" Value="3" />
<Setter Property="StrokeLineCap" Value="Round" />
<Setter Property="StrokeDashArray" Value="1.5,1.5" />
</Style>
<Style Selector="Line.connector.flowing">
<Setter Property="Stroke" Value="{StaticResource BrandRedBrush}" />
<Style.Animations>
<Animation Duration="0:0:0.5" IterationCount="Infinite">
<KeyFrame Cue="0%">
<Setter Property="StrokeDashOffset" Value="0" />
</KeyFrame>
<KeyFrame Cue="100%">
<Setter Property="StrokeDashOffset" Value="-3" />
</KeyFrame>
</Animation>
</Style.Animations>
</Style>
<Style Selector="Line.connector.lit">
<Setter Property="Stroke" Value="{StaticResource TextSoftBrush}" />
<Setter Property="StrokeDashArray" Value="1,0" />
</Style>
<Style Selector="Border.card">
<Setter Property="Background" Value="{StaticResource SurfaceBrush}" />
<Setter Property="BorderBrush" Value="{StaticResource LineBrush}" />
<Setter Property="BorderThickness" Value="4,0,0,0" />
<Setter Property="CornerRadius" Value="14" />
<Setter Property="Padding" Value="18,16" />
<Setter Property="Margin" Value="8" />
<Setter Property="VerticalAlignment" Value="Top" />
<Setter Property="Transitions">
<Transitions>
<BrushTransition Property="BorderBrush" Duration="0:0:0.4" />
</Transitions>
</Setter>
</Style>
<Style Selector="Border.card.good">
<Setter Property="BorderBrush" Value="{StaticResource GoodBrush}" />
</Style>
<Style Selector="Border.card.caution">
<Setter Property="BorderBrush" Value="{StaticResource CautionBrush}" />
</Style>
<Style Selector="Border.card.bad">
<Setter Property="BorderBrush" Value="{StaticResource BadBrush}" />
</Style>
<Style Selector="Border.card.unknown, Border.card.info">
<Setter Property="BorderBrush" Value="{StaticResource TextSoftBrush}" />
</Style>
<Style Selector="Border.chip">
<Setter Property="CornerRadius" Value="10" />
<Setter Property="Padding" Value="9,3" />
<Setter Property="Background" Value="{StaticResource NeutralTintBrush}" />
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
<Style Selector="Border.chip TextBlock">
<Setter Property="FontSize" Value="12" />
<Setter Property="FontWeight" Value="SemiBold" />
<Setter Property="Foreground" Value="{StaticResource TextStrongBrush}" />
</Style>
<Style Selector="Border.card.good Border.chip">
<Setter Property="Background" Value="{StaticResource GoodTintBrush}" />
</Style>
<Style Selector="Border.card.good Border.chip TextBlock">
<Setter Property="Foreground" Value="{StaticResource GoodBrush}" />
</Style>
<Style Selector="Border.card.caution Border.chip">
<Setter Property="Background" Value="{StaticResource CautionTintBrush}" />
</Style>
<Style Selector="Border.card.caution Border.chip TextBlock">
<Setter Property="Foreground" Value="{StaticResource CautionBrush}" />
</Style>
<Style Selector="Border.card.bad Border.chip">
<Setter Property="Background" Value="{StaticResource BadTintBrush}" />
</Style>
<Style Selector="Border.card.bad Border.chip TextBlock">
<Setter Property="Foreground" Value="{StaticResource BadBrush}" />
</Style>
<Style Selector="TextBlock.cardTitle">
<Setter Property="FontSize" Value="17" />
<Setter Property="FontWeight" Value="SemiBold" />
<Setter Property="Foreground" Value="{StaticResource TextStrongBrush}" />
<Setter Property="TextWrapping" Value="Wrap" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Margin" Value="10,0" />
</Style>
<Style Selector="TextBlock.summary">
<Setter Property="FontSize" Value="15" />
<Setter Property="Foreground" Value="{StaticResource TextStrongBrush}" />
<Setter Property="TextWrapping" Value="Wrap" />
<Setter Property="LineHeight" Value="21" />
</Style>
<Style Selector="TextBlock.factLabel">
<Setter Property="FontSize" Value="13" />
<Setter Property="Foreground" Value="{StaticResource TextSoftBrush}" />
<Setter Property="TextWrapping" Value="Wrap" />
<Setter Property="Margin" Value="0,1,10,0" />
</Style>
<Style Selector="SelectableTextBlock.factValue">
<Setter Property="FontSize" Value="13" />
<Setter Property="Foreground" Value="{StaticResource TextStrongBrush}" />
<Setter Property="TextWrapping" Value="Wrap" />
</Style>
<Style Selector="ProgressBar.thin">
<Setter Property="MinHeight" Value="3" />
<Setter Property="Height" Value="3" />
<Setter Property="Foreground" Value="{StaticResource BrandRedBrush}" />
<Setter Property="Background" Value="{StaticResource SurfaceRaisedBrush}" />
</Style>
<Style Selector="Expander.explain">
<Style.Resources>
<SolidColorBrush x:Key="ExpanderHeaderBackground" Color="{StaticResource SurfaceRaised}" />
<SolidColorBrush x:Key="ExpanderHeaderBackgroundPointerOver" Color="{StaticResource Line}" />
<SolidColorBrush x:Key="ExpanderHeaderBackgroundPressed" Color="{StaticResource Line}" />
<SolidColorBrush x:Key="ExpanderHeaderBorderBrush" Color="Transparent" />
<SolidColorBrush x:Key="ExpanderHeaderBorderBrushPointerOver" Color="Transparent" />
<SolidColorBrush x:Key="ExpanderHeaderBorderBrushPressed" Color="Transparent" />
<SolidColorBrush x:Key="ExpanderHeaderForeground" Color="{StaticResource TextStrong}" />
<SolidColorBrush x:Key="ExpanderHeaderForegroundPointerOver" Color="{StaticResource TextStrong}" />
<SolidColorBrush x:Key="ExpanderHeaderForegroundPressed" Color="{StaticResource TextStrong}" />
<SolidColorBrush x:Key="ExpanderContentBackground" Color="{StaticResource SurfaceRaised}" />
<SolidColorBrush x:Key="ExpanderContentBorderBrush" Color="Transparent" />
</Style.Resources>
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="FontSize" Value="13" />
<Setter Property="CornerRadius" Value="10" />
</Style>
<Style Selector="Border.scrim">
<Setter Property="Background" Value="{StaticResource ScrimBrush}" />
</Style>
<Style Selector="Border.sheet">
<Setter Property="Background" Value="{StaticResource SurfaceBrush}" />
<Setter Property="CornerRadius" Value="16" />
<Setter Property="Padding" Value="22,18" />
<Setter Property="MaxWidth" Value="660" />
<Setter Property="Margin" Value="16" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="HorizontalAlignment" Value="Center" />
</Style>
</Styles>