@bakapiano/ccsm 0.18.6 → 0.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1641,6 +1641,698 @@
1641
1641
  input + action cluster, the URL row, the CLI log block, and the
1642
1642
  bulleted security list. */
1643
1643
 
1644
+ /* Provider picker tiles — large clickable cards with the brand mark
1645
+ front and center, replacing the old chip-row radio pair. Two-wide
1646
+ on desktop, stacks at narrow widths. */
1647
+ .provider-tile-row {
1648
+ display: grid;
1649
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1650
+ gap: var(--s-3);
1651
+ max-width: 560px;
1652
+ }
1653
+ @media (max-width: 560px) {
1654
+ .provider-tile-row { grid-template-columns: 1fr; }
1655
+ }
1656
+ .provider-tile {
1657
+ appearance: none;
1658
+ display: flex;
1659
+ align-items: center;
1660
+ gap: var(--s-3);
1661
+ padding: var(--s-3) var(--s-4);
1662
+ background: var(--bg-elev);
1663
+ border: 1px solid var(--border);
1664
+ border-radius: 10px;
1665
+ cursor: pointer;
1666
+ text-align: left;
1667
+ color: var(--ink);
1668
+ font: inherit;
1669
+ transition: border-color .12s, background-color .12s, box-shadow .12s;
1670
+ }
1671
+ .provider-tile:hover { border-color: var(--border-strong); }
1672
+ .provider-tile.is-selected {
1673
+ border-color: var(--ink);
1674
+ background: var(--bg-elev);
1675
+ box-shadow: 0 0 0 1px var(--ink);
1676
+ }
1677
+ .provider-tile.is-disabled,
1678
+ .provider-tile:disabled {
1679
+ cursor: not-allowed;
1680
+ opacity: 0.55;
1681
+ }
1682
+ .provider-tile.is-disabled:hover,
1683
+ .provider-tile:disabled:hover {
1684
+ border-color: var(--border);
1685
+ }
1686
+ .provider-tile:focus-visible {
1687
+ outline: 2px solid var(--ink);
1688
+ outline-offset: 2px;
1689
+ }
1690
+ .provider-tile-icon {
1691
+ flex: 0 0 32px;
1692
+ width: 32px;
1693
+ height: 32px;
1694
+ display: inline-flex;
1695
+ align-items: center;
1696
+ justify-content: center;
1697
+ }
1698
+ .provider-tile-body {
1699
+ display: flex;
1700
+ flex-direction: column;
1701
+ gap: 2px;
1702
+ min-width: 0;
1703
+ }
1704
+ .provider-tile-label {
1705
+ font-size: 14px;
1706
+ font-weight: 500;
1707
+ letter-spacing: -0.005em;
1708
+ }
1709
+ .provider-tile-hint {
1710
+ font-size: 11.5px;
1711
+ color: var(--ink-muted);
1712
+ }
1713
+ /* ── Provider status row + sign-in card ───────────────────────────
1714
+ Replaces the older devtunnel-login + .remote-status-line inline
1715
+ bag-of-spans with a single composable card vocabulary so the
1716
+ signed-in / signed-out / mid-sign-in states all read as parts of
1717
+ one design rather than three different debug widgets. */
1718
+ .provider-status {
1719
+ display: flex;
1720
+ align-items: center;
1721
+ flex-wrap: wrap;
1722
+ gap: var(--s-2) var(--s-3);
1723
+ }
1724
+ .provider-status.is-stack {
1725
+ flex-direction: column;
1726
+ align-items: stretch;
1727
+ gap: var(--s-2);
1728
+ }
1729
+ .provider-status.is-stack .provider-status-row {
1730
+ display: flex;
1731
+ align-items: center;
1732
+ gap: var(--s-2) var(--s-3);
1733
+ flex-wrap: wrap;
1734
+ }
1735
+ .provider-status-muted { color: var(--ink-muted); font-size: 13px; }
1736
+ .provider-status-state {
1737
+ display: inline-flex;
1738
+ align-items: center;
1739
+ gap: 6px;
1740
+ font-size: 12.5px;
1741
+ font-weight: 500;
1742
+ letter-spacing: -0.003em;
1743
+ color: var(--ink);
1744
+ }
1745
+ .provider-status-state.is-warn { color: #8b3a3a; }
1746
+ .provider-status-state.is-ok { color: #2f6e3a; }
1747
+ .provider-status-dot {
1748
+ width: 7px;
1749
+ height: 7px;
1750
+ border-radius: 50%;
1751
+ background: var(--ink-muted);
1752
+ display: inline-block;
1753
+ }
1754
+ .provider-status-dot.is-ok { background: #4a8a4a; }
1755
+ .provider-status-dot.is-warn { background: #b86a2a; }
1756
+ .provider-status-user {
1757
+ font-family: var(--mono);
1758
+ font-size: 12px;
1759
+ padding: 2px 8px;
1760
+ border-radius: 4px;
1761
+ background: var(--bg);
1762
+ color: var(--ink);
1763
+ border: 1px solid var(--border);
1764
+ max-width: 28ch;
1765
+ overflow: hidden;
1766
+ text-overflow: ellipsis;
1767
+ white-space: nowrap;
1768
+ }
1769
+ .provider-status-version {
1770
+ font-family: var(--mono);
1771
+ font-size: 11px;
1772
+ color: var(--ink-muted);
1773
+ }
1774
+ .provider-status-switch { margin-left: auto; }
1775
+ .provider-status-signin { margin-left: auto; }
1776
+
1777
+ /* ── Tunnel section: hero (idle) + live banner (running) ──────────
1778
+ Idle: a single horizontal card with the headline + start CTA.
1779
+ Running: a status banner (state · provider · uptime · stop link)
1780
+ followed by a copyable share URL block and an optional collapsed
1781
+ CLI log. */
1782
+ .tunnel-hero {
1783
+ display: flex;
1784
+ align-items: center;
1785
+ justify-content: space-between;
1786
+ gap: var(--s-4);
1787
+ padding: var(--s-4) var(--s-5);
1788
+ border: 1px solid var(--border);
1789
+ border-radius: 10px;
1790
+ background: var(--bg-elev);
1791
+ }
1792
+ .tunnel-hero-body {
1793
+ display: flex;
1794
+ flex-direction: column;
1795
+ gap: 4px;
1796
+ min-width: 0;
1797
+ }
1798
+ .tunnel-hero-title {
1799
+ font-size: 15px;
1800
+ font-weight: 600;
1801
+ letter-spacing: -0.01em;
1802
+ color: var(--ink);
1803
+ }
1804
+ .tunnel-hero-meta {
1805
+ font-size: 12.5px;
1806
+ color: var(--ink-mid);
1807
+ line-height: 1.5;
1808
+ }
1809
+ .tunnel-hero-meta code {
1810
+ font-family: var(--mono);
1811
+ font-size: 11.5px;
1812
+ padding: 1px 5px;
1813
+ border-radius: 3px;
1814
+ background: var(--bg);
1815
+ border: 1px solid var(--border-soft);
1816
+ }
1817
+ .tunnel-hero-cta {
1818
+ /* Pick up theme accent + match the default size of other `.action`
1819
+ buttons across the app. No `min-width` override (was 140px, too
1820
+ wide compared to the Copy/Open pair). */
1821
+ flex: 0 0 auto;
1822
+ background: var(--accent);
1823
+ border-color: var(--accent);
1824
+ color: #fff;
1825
+ }
1826
+ .tunnel-hero-cta:hover {
1827
+ background: var(--accent-deep, var(--accent));
1828
+ border-color: var(--accent-deep, var(--accent));
1829
+ }
1830
+ .tunnel-hero-cta:disabled {
1831
+ opacity: 0.6;
1832
+ cursor: wait;
1833
+ }
1834
+
1835
+ .tunnel-live {
1836
+ display: flex;
1837
+ flex-direction: column;
1838
+ gap: var(--s-3);
1839
+ }
1840
+ .tunnel-live-head {
1841
+ display: flex;
1842
+ align-items: center;
1843
+ flex-wrap: wrap;
1844
+ gap: 6px 8px;
1845
+ padding: 6px 10px 6px 12px;
1846
+ border-radius: 999px;
1847
+ background: rgba(74, 138, 74, 0.08);
1848
+ border: 1px solid rgba(74, 138, 74, 0.32);
1849
+ font-size: 12.5px;
1850
+ color: var(--ink);
1851
+ width: fit-content;
1852
+ max-width: 100%;
1853
+ }
1854
+ .tunnel-live-state {
1855
+ display: inline-flex;
1856
+ align-items: center;
1857
+ gap: 6px;
1858
+ font-weight: 600;
1859
+ letter-spacing: 0.02em;
1860
+ color: #2f6e3a;
1861
+ }
1862
+ .tunnel-live-dot {
1863
+ width: 8px;
1864
+ height: 8px;
1865
+ border-radius: 50%;
1866
+ background: #4a8a4a;
1867
+ box-shadow: 0 0 0 0 rgba(74, 138, 74, 0.6);
1868
+ animation: tunnel-live-pulse 2s ease-in-out infinite;
1869
+ }
1870
+ @keyframes tunnel-live-pulse {
1871
+ 0% { box-shadow: 0 0 0 0 rgba(74, 138, 74, 0.55); }
1872
+ 70% { box-shadow: 0 0 0 8px rgba(74, 138, 74, 0); }
1873
+ 100% { box-shadow: 0 0 0 0 rgba(74, 138, 74, 0); }
1874
+ }
1875
+ .tunnel-live-divider { color: var(--ink-faint); }
1876
+ .tunnel-live-provider { color: var(--ink); font-weight: 500; }
1877
+ .tunnel-live-meta { color: var(--ink-mid); }
1878
+ .tunnel-stop-link {
1879
+ appearance: none;
1880
+ background: transparent;
1881
+ border: 0;
1882
+ padding: 0 4px 0 10px;
1883
+ margin-left: 4px;
1884
+ display: inline-flex;
1885
+ align-items: center;
1886
+ gap: 4px;
1887
+ font: inherit;
1888
+ font-size: 12px;
1889
+ font-weight: 500;
1890
+ color: #b73f3f;
1891
+ cursor: pointer;
1892
+ border-left: 1px solid rgba(74, 138, 74, 0.25);
1893
+ transition: color .12s;
1894
+ }
1895
+ .tunnel-stop-link:hover { color: #8b2a2a; }
1896
+ .tunnel-stop-link:disabled { opacity: 0.5; cursor: wait; }
1897
+ .tunnel-stop-link svg { width: 11px; height: 11px; }
1898
+
1899
+ .tunnel-share {
1900
+ display: flex;
1901
+ flex-direction: column;
1902
+ gap: 6px;
1903
+ padding: var(--s-3) var(--s-4);
1904
+ border: 1px solid var(--border);
1905
+ border-radius: 10px;
1906
+ background: var(--bg);
1907
+ }
1908
+ .tunnel-share.is-waiting {
1909
+ flex-direction: row;
1910
+ align-items: center;
1911
+ gap: var(--s-2);
1912
+ color: var(--ink-muted);
1913
+ font-size: 13px;
1914
+ }
1915
+ .tunnel-share-label {
1916
+ font-size: 10.5px;
1917
+ letter-spacing: 0.16em;
1918
+ text-transform: uppercase;
1919
+ color: var(--ink-muted);
1920
+ font-weight: 500;
1921
+ }
1922
+ .tunnel-share-url {
1923
+ display: flex;
1924
+ align-items: center;
1925
+ gap: var(--s-3);
1926
+ flex-wrap: wrap;
1927
+ }
1928
+ .tunnel-share-value {
1929
+ flex: 1;
1930
+ min-width: 0;
1931
+ font-family: var(--mono);
1932
+ font-size: 13px;
1933
+ color: var(--ink);
1934
+ padding: 6px 10px;
1935
+ border: 1px solid var(--border-soft);
1936
+ border-radius: 6px;
1937
+ background: var(--bg-elev);
1938
+ overflow: hidden;
1939
+ text-overflow: ellipsis;
1940
+ white-space: nowrap;
1941
+ user-select: all;
1942
+ }
1943
+ .tunnel-share-actions {
1944
+ display: inline-flex;
1945
+ gap: 6px;
1946
+ flex: 0 0 auto;
1947
+ }
1948
+ .tunnel-share-hint {
1949
+ font-size: 11.5px;
1950
+ color: var(--ink-muted);
1951
+ }
1952
+ .tunnel-log { font-size: 12px; }
1953
+ .tunnel-log summary {
1954
+ cursor: pointer;
1955
+ user-select: none;
1956
+ color: var(--ink-mid);
1957
+ padding: 4px 0;
1958
+ }
1959
+ .tunnel-log pre {
1960
+ margin: 6px 0 0;
1961
+ padding: var(--s-2) var(--s-3);
1962
+ background: var(--bg);
1963
+ border: 1px solid var(--border-soft);
1964
+ border-radius: 6px;
1965
+ font-family: var(--mono);
1966
+ font-size: 11.5px;
1967
+ line-height: 1.45;
1968
+ color: var(--ink-mid);
1969
+ max-height: 220px;
1970
+ overflow: auto;
1971
+ white-space: pre-wrap;
1972
+ word-break: break-word;
1973
+ }
1974
+
1975
+ /* Version-update card — Configure → Version field. Idle state is a
1976
+ muted "you're on the latest" pill; update-available flips a subtle
1977
+ blue tint and surfaces a primary upgrade CTA. */
1978
+ .version-card {
1979
+ display: flex;
1980
+ align-items: center;
1981
+ justify-content: space-between;
1982
+ gap: var(--s-4);
1983
+ padding: var(--s-3) var(--s-4);
1984
+ border: 1px solid var(--border);
1985
+ border-radius: 10px;
1986
+ background: var(--bg-elev);
1987
+ flex-wrap: wrap;
1988
+ }
1989
+ .version-card.has-update {
1990
+ border-color: rgba(0, 120, 212, 0.35);
1991
+ background: linear-gradient(180deg, rgba(0, 120, 212, 0.04) 0%, var(--bg-elev) 100%);
1992
+ }
1993
+ .version-card.has-error {
1994
+ border-color: rgba(183, 63, 63, 0.30);
1995
+ background: rgba(183, 63, 63, 0.03);
1996
+ }
1997
+ .version-card-main {
1998
+ display: flex;
1999
+ flex-direction: column;
2000
+ gap: 4px;
2001
+ min-width: 0;
2002
+ flex: 1;
2003
+ }
2004
+ .version-card-current {
2005
+ display: flex;
2006
+ align-items: baseline;
2007
+ gap: 8px;
2008
+ flex-wrap: wrap;
2009
+ }
2010
+ .version-card-label {
2011
+ font-size: 10.5px;
2012
+ letter-spacing: 0.16em;
2013
+ text-transform: uppercase;
2014
+ color: var(--ink-muted);
2015
+ font-weight: 500;
2016
+ }
2017
+ .version-card-version {
2018
+ font-family: var(--mono);
2019
+ font-size: 18px;
2020
+ font-weight: 600;
2021
+ letter-spacing: -0.01em;
2022
+ color: var(--ink);
2023
+ font-variant-numeric: tabular-nums;
2024
+ }
2025
+ .version-card-badge {
2026
+ font-size: 10.5px;
2027
+ letter-spacing: 0.08em;
2028
+ text-transform: uppercase;
2029
+ font-weight: 600;
2030
+ padding: 1px 8px;
2031
+ border-radius: 999px;
2032
+ background: rgba(74, 138, 74, 0.12);
2033
+ color: #2f6e3a;
2034
+ border: 1px solid rgba(74, 138, 74, 0.3);
2035
+ }
2036
+ .version-card.has-update .version-card-badge {
2037
+ background: rgba(0, 120, 212, 0.12);
2038
+ color: #005a9e;
2039
+ border-color: rgba(0, 120, 212, 0.35);
2040
+ }
2041
+ .version-card-meta {
2042
+ font-size: 12.5px;
2043
+ color: var(--ink-mid);
2044
+ line-height: 1.5;
2045
+ }
2046
+ .version-card-meta .mono {
2047
+ font-family: var(--mono);
2048
+ font-size: 12px;
2049
+ color: var(--ink);
2050
+ }
2051
+ .version-card-error {
2052
+ color: #8b3a3a;
2053
+ }
2054
+ .version-card-error code {
2055
+ font-family: var(--mono);
2056
+ font-size: 11px;
2057
+ }
2058
+ .version-card-actions {
2059
+ display: inline-flex;
2060
+ align-items: center;
2061
+ gap: var(--s-2);
2062
+ flex-shrink: 0;
2063
+ flex-wrap: wrap;
2064
+ justify-content: flex-end;
2065
+ }
2066
+ .version-card-check {
2067
+ background: var(--accent);
2068
+ border-color: var(--accent);
2069
+ color: #fff;
2070
+ }
2071
+ .version-card-check:hover {
2072
+ background: var(--accent-deep, var(--accent));
2073
+ border-color: var(--accent-deep, var(--accent));
2074
+ }
2075
+ .version-card-check:disabled { opacity: 0.6; cursor: wait; }
2076
+ .version-card-check svg { stroke: #fff; }
2077
+
2078
+ /* Cards inside the Configure → General config-grid would otherwise
2079
+ stretch full row width (flex column → align-stretch). For the
2080
+ Restart button we still want it to shrink to the text — keep the
2081
+ inline wrapper. The Version card stays full-width to read like the
2082
+ other settings rows. */
2083
+ .config-grid .field .restart-button-wrap {
2084
+ align-self: stretch;
2085
+ }
2086
+ .restart-button-wrap { display: inline-flex; }
2087
+
2088
+ /* Microsoft brand-style sign-in button. Microsoft's published guidance
2089
+ is a white pill with the 4-square logo on the left and "Sign in
2090
+ with Microsoft" in Segoe-ish type. We can't ship Segoe in a web
2091
+ font here so the body family takes over — the visual still reads
2092
+ correctly thanks to the logo + spacing. White surface + thin
2093
+ border keeps it distinct from our own black `.action.primary`
2094
+ slab (which the user found too heavy for an external-auth CTA). */
2095
+ .btn-signin-microsoft {
2096
+ appearance: none;
2097
+ display: inline-flex;
2098
+ align-items: center;
2099
+ gap: 10px;
2100
+ align-self: flex-start;
2101
+ padding: 8px 16px;
2102
+ min-height: 36px;
2103
+ background: #ffffff;
2104
+ color: #1a1815;
2105
+ border: 1px solid #d3d3d3;
2106
+ border-radius: 4px; /* MS guidance: rectangular, ~2-4px radius */
2107
+ font: inherit;
2108
+ font-size: 13.5px;
2109
+ font-weight: 500;
2110
+ letter-spacing: -0.005em;
2111
+ cursor: pointer;
2112
+ transition: background-color .12s, border-color .12s, box-shadow .12s;
2113
+ }
2114
+ .btn-signin-microsoft:hover {
2115
+ background: #f3f3f3;
2116
+ border-color: #b8b8b8;
2117
+ }
2118
+ .btn-signin-microsoft:active { background: #ebebeb; }
2119
+ .btn-signin-microsoft:focus-visible {
2120
+ outline: 2px solid #2f6fa3;
2121
+ outline-offset: 2px;
2122
+ }
2123
+ .btn-signin-microsoft img { display: block; }
2124
+
2125
+ /* The mid-sign-in "card" — replaces .devtunnel-login. Bigger device
2126
+ code, primary CTA, slimmer chrome. */
2127
+ .signin-card {
2128
+ margin-top: var(--s-3);
2129
+ padding: var(--s-5);
2130
+ border: 1px solid var(--border);
2131
+ border-radius: 10px;
2132
+ background: var(--bg-elev);
2133
+ display: flex;
2134
+ flex-direction: column;
2135
+ gap: var(--s-4);
2136
+ font-size: 13px;
2137
+ }
2138
+ .signin-card.is-done { border-color: rgba(74, 138, 74, 0.4); }
2139
+ .signin-card.is-error { border-color: rgba(183, 63, 63, 0.4); }
2140
+ .signin-card-header {
2141
+ display: flex;
2142
+ align-items: center;
2143
+ gap: var(--s-2);
2144
+ color: var(--ink-mid);
2145
+ }
2146
+ .signin-card-cancel {
2147
+ margin-left: auto;
2148
+ appearance: none;
2149
+ display: inline-flex;
2150
+ align-items: center;
2151
+ gap: 4px;
2152
+ padding: 4px 10px;
2153
+ border-radius: 6px;
2154
+ border: 1px solid rgba(183, 63, 63, 0.35);
2155
+ background: transparent;
2156
+ color: #b73f3f;
2157
+ font: inherit;
2158
+ font-size: 12px;
2159
+ font-weight: 500;
2160
+ letter-spacing: 0.02em;
2161
+ cursor: pointer;
2162
+ transition: background-color .12s, border-color .12s, color .12s;
2163
+ }
2164
+ .signin-card-cancel:hover {
2165
+ background: rgba(183, 63, 63, 0.08);
2166
+ border-color: rgba(183, 63, 63, 0.55);
2167
+ color: #8b2a2a;
2168
+ }
2169
+ .signin-card-cancel svg { width: 12px; height: 12px; }
2170
+ .signin-card-eyebrow {
2171
+ font-size: 11px;
2172
+ letter-spacing: 0.14em;
2173
+ text-transform: uppercase;
2174
+ font-weight: 600;
2175
+ }
2176
+ .signin-card-spinner {
2177
+ width: 12px;
2178
+ height: 12px;
2179
+ border-radius: 50%;
2180
+ border: 2px solid var(--border-strong);
2181
+ border-top-color: var(--ink);
2182
+ animation: remote-spin 0.7s linear infinite;
2183
+ }
2184
+ .signin-card-code-block {
2185
+ display: flex;
2186
+ flex-direction: column;
2187
+ gap: 6px;
2188
+ padding: var(--s-3) var(--s-4);
2189
+ background: var(--bg);
2190
+ border: 1px solid var(--border);
2191
+ border-radius: 8px;
2192
+ }
2193
+ .signin-card-code-label {
2194
+ font-size: 10.5px;
2195
+ letter-spacing: 0.16em;
2196
+ text-transform: uppercase;
2197
+ color: var(--ink-muted);
2198
+ }
2199
+ .signin-card-code-row {
2200
+ display: flex;
2201
+ align-items: center;
2202
+ gap: var(--s-2);
2203
+ }
2204
+ .signin-card-code {
2205
+ font-family: var(--mono);
2206
+ font-size: 22px;
2207
+ font-weight: 600;
2208
+ letter-spacing: 0.12em;
2209
+ color: var(--ink);
2210
+ user-select: all;
2211
+ font-variant-numeric: tabular-nums;
2212
+ }
2213
+ .signin-card-code-pending {
2214
+ font-size: 13px;
2215
+ color: var(--ink-muted);
2216
+ font-style: italic;
2217
+ }
2218
+ .signin-card-code-copy { margin-left: 4px; }
2219
+ .signin-card-steps {
2220
+ margin: 0;
2221
+ padding-left: var(--s-5);
2222
+ display: flex;
2223
+ flex-direction: column;
2224
+ gap: 6px;
2225
+ color: var(--ink-mid);
2226
+ font-size: 13px;
2227
+ line-height: 1.5;
2228
+ }
2229
+ .signin-card-steps li::marker {
2230
+ color: var(--ink-faint);
2231
+ font-variant-numeric: tabular-nums;
2232
+ }
2233
+ .signin-card-step-muted { color: var(--ink-muted); }
2234
+ .signin-card-open {
2235
+ display: inline-flex;
2236
+ align-items: center;
2237
+ gap: 6px;
2238
+ color: #0067b8;
2239
+ font-weight: 500;
2240
+ text-decoration: underline;
2241
+ text-decoration-color: rgba(0, 103, 184, 0.4);
2242
+ text-underline-offset: 3px;
2243
+ transition: color .12s, text-decoration-color .12s;
2244
+ }
2245
+ .signin-card-open:hover {
2246
+ color: #005a9e;
2247
+ text-decoration-color: #005a9e;
2248
+ }
2249
+ .signin-card-open svg { width: 13px; height: 13px; }
2250
+ .signin-card-host {
2251
+ font-family: var(--mono);
2252
+ font-size: 12.5px;
2253
+ }
2254
+ .signin-card-actions {
2255
+ display: flex;
2256
+ gap: var(--s-2);
2257
+ flex-wrap: wrap;
2258
+ justify-content: flex-end;
2259
+ }
2260
+ .signin-card-result {
2261
+ display: flex;
2262
+ align-items: flex-start;
2263
+ gap: var(--s-3);
2264
+ padding: var(--s-3) var(--s-4);
2265
+ border-radius: 8px;
2266
+ background: var(--bg);
2267
+ border: 1px solid var(--border);
2268
+ }
2269
+ .signin-card-result.is-ok { border-color: rgba(74, 138, 74, 0.35); background: #f1f6f0; }
2270
+ .signin-card-result.is-error { border-color: rgba(183, 63, 63, 0.35); background: #faf0f0; }
2271
+ .signin-card-result.is-muted { background: var(--bg); }
2272
+ .signin-card-result-icon {
2273
+ flex: 0 0 24px;
2274
+ width: 24px;
2275
+ height: 24px;
2276
+ border-radius: 50%;
2277
+ display: inline-flex;
2278
+ align-items: center;
2279
+ justify-content: center;
2280
+ font-weight: 700;
2281
+ color: #fff;
2282
+ background: var(--ink-muted);
2283
+ font-size: 13px;
2284
+ }
2285
+ .signin-card-result.is-ok .signin-card-result-icon { background: #4a8a4a; }
2286
+ .signin-card-result.is-error .signin-card-result-icon { background: #b73f3f; }
2287
+ .signin-card-result-body {
2288
+ flex: 1;
2289
+ min-width: 0;
2290
+ display: flex;
2291
+ flex-direction: column;
2292
+ gap: 2px;
2293
+ }
2294
+ .signin-card-result-title {
2295
+ font-weight: 600;
2296
+ color: var(--ink);
2297
+ letter-spacing: -0.005em;
2298
+ }
2299
+ .signin-card-result-meta {
2300
+ font-size: 12.5px;
2301
+ color: var(--ink-mid);
2302
+ line-height: 1.45;
2303
+ }
2304
+ .signin-card-result-actions {
2305
+ display: flex;
2306
+ gap: var(--s-2);
2307
+ flex-wrap: wrap;
2308
+ }
2309
+ .signin-card-log {
2310
+ font-size: 11.5px;
2311
+ color: var(--ink-muted);
2312
+ border-top: 1px solid var(--border);
2313
+ padding-top: var(--s-3);
2314
+ }
2315
+ .signin-card-log summary {
2316
+ cursor: pointer;
2317
+ user-select: none;
2318
+ padding: 2px 0;
2319
+ }
2320
+ .signin-card-log pre {
2321
+ margin: var(--s-2) 0 0;
2322
+ padding: var(--s-2) var(--s-3);
2323
+ background: var(--bg);
2324
+ border: 1px solid var(--border-soft);
2325
+ border-radius: 4px;
2326
+ font-family: var(--mono);
2327
+ font-size: 11px;
2328
+ line-height: 1.45;
2329
+ color: var(--ink-mid);
2330
+ max-height: 180px;
2331
+ overflow: auto;
2332
+ white-space: pre-wrap;
2333
+ word-break: break-word;
2334
+ }
2335
+
1644
2336
  .remote-status-line {
1645
2337
  display: flex;
1646
2338
  align-items: center;
@@ -1730,7 +2422,12 @@
1730
2422
  align-items: center;
1731
2423
  justify-content: center;
1732
2424
  gap: var(--s-3);
1733
- min-height: 260px;
2425
+ /* Fill the entire scroll container so the spinner sits dead-center
2426
+ of the visible Remote panel — both axes — instead of pinning to a
2427
+ fixed 260px box near the top. flex:1 makes us claim all remaining
2428
+ space inside .settings-scroll (column flex). */
2429
+ flex: 1;
2430
+ min-height: 0;
1734
2431
  color: var(--ink-muted);
1735
2432
  font-size: 13px;
1736
2433
  }
@@ -1831,6 +2528,22 @@
1831
2528
  align-items: center;
1832
2529
  }
1833
2530
  .remote-device-label .icon-btn:hover { color: var(--ink); background: var(--bg); }
2531
+ /* 4-digit identification code rendered as a small pill before the
2532
+ device label. Distinct background so the operator's eye lands on
2533
+ it first — that's the thing they're cross-referencing against what
2534
+ the requesting user reads off their own screen. */
2535
+ .remote-device-code {
2536
+ font-family: var(--mono);
2537
+ font-size: 12px;
2538
+ font-weight: 600;
2539
+ letter-spacing: 0.08em;
2540
+ padding: 1px 7px;
2541
+ border-radius: 999px;
2542
+ background: var(--ink);
2543
+ color: #fff;
2544
+ font-variant-numeric: tabular-nums;
2545
+ }
2546
+ .remote-device-name { min-width: 0; }
1834
2547
  .remote-device-meta {
1835
2548
  font-size: 11.5px;
1836
2549
  color: var(--ink-mid);