daily-focus 1.2.0-dev.8 → 2.0.0-dev.14

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.
package/public/style.css CHANGED
@@ -541,6 +541,64 @@ body[data-view='tickets'] #brief-refresh {
541
541
  .agent-run__message .assistant__reply {
542
542
  padding: 0 10px 8px;
543
543
  }
544
+ /*
545
+ * A run's steps, the assistant's look: what it said in its own words between
546
+ * the calls, and each subagent as a fold under the step that handed it work.
547
+ */
548
+ .agent-run__list > .agent-run__steps {
549
+ margin-top: 8px;
550
+ }
551
+ .agent-run__said {
552
+ margin: 6px 0;
553
+ font-size: 12.5px;
554
+ line-height: 1.45;
555
+ color: var(--ink-1);
556
+ overflow-wrap: anywhere;
557
+ }
558
+ .agent-run__said:first-child {
559
+ margin-top: 0;
560
+ }
561
+ .agent-run__said > * {
562
+ margin: 0;
563
+ }
564
+ .agent-run__said > * + * {
565
+ margin-top: 5px;
566
+ }
567
+ .agent-run__said ul,
568
+ .agent-run__said ol {
569
+ padding-left: 18px;
570
+ }
571
+ .agent-run__said pre {
572
+ white-space: pre-wrap;
573
+ }
574
+ .agent-run__handoff > details {
575
+ flex: 1 1 auto;
576
+ min-width: 0;
577
+ }
578
+ /* The spinner stays on the subagent's own line, not in the middle of its open steps. */
579
+ .agent-run__steps > .agent-run__handoff[data-state='running']::before {
580
+ align-self: flex-start;
581
+ margin-top: 4px;
582
+ }
583
+ .agent-run__handoff summary {
584
+ cursor: pointer;
585
+ overflow: hidden;
586
+ text-overflow: ellipsis;
587
+ white-space: nowrap;
588
+ }
589
+ .agent-run__handoff summary:hover {
590
+ color: var(--ink-1);
591
+ }
592
+ .agent-run__handoff summary .assistant__step-text {
593
+ font-weight: 600;
594
+ }
595
+ .agent-run__handoff summary .assistant__step-detail {
596
+ margin-left: 6px;
597
+ font-size: 12px;
598
+ }
599
+ .agent-run__handoff .agent-run__steps {
600
+ margin-top: 4px;
601
+ }
544
602
  .agent-run__runs {
545
603
  margin: 8px 0 0;
546
604
  padding: 0;
@@ -868,6 +926,47 @@ body[data-view='tickets'] #brief-refresh {
868
926
  color: var(--ink-2);
869
927
  overflow-wrap: anywhere;
870
928
  }
929
+ /*
930
+ * The assistant's answer, asked ahead, in a line: the verdict on the row, so
931
+ * the card says what to do about the pull request before it is opened.
932
+ */
933
+ .item__ahead {
934
+ display: -webkit-box;
935
+ margin: 6px 0 0;
936
+ padding: 4px 8px;
937
+ border-radius: var(--radius-sm);
938
+ background: var(--accent-wash);
939
+ font-size: 12.5px;
940
+ color: var(--ink-1);
941
+ overflow: hidden;
942
+ overflow-wrap: anywhere;
943
+ -webkit-box-orient: vertical;
944
+ -webkit-line-clamp: 2;
945
+ }
946
+ .item__ahead--quiet {
947
+ background: none;
948
+ padding: 0;
949
+ color: var(--ink-3);
950
+ }
951
+ .item__ahead-mark {
952
+ margin-right: 6px;
953
+ color: var(--accent);
954
+ font-weight: 600;
955
+ }
956
+ .item__ahead[data-status='running'] .item__ahead-mark {
957
+ animation: ahead-pulse 1.4s ease-in-out infinite;
958
+ }
959
+ @keyframes ahead-pulse {
960
+ 50% {
961
+ opacity: 0.3;
962
+ }
963
+ }
964
+ @media (prefers-reduced-motion: reduce) {
965
+ .item__ahead[data-status='running'] .item__ahead-mark {
966
+ animation: none;
967
+ }
968
+ }
969
+
871
970
  .item__detail code {
872
971
  padding: 1px 4px;
873
972
  background: var(--surface-sunken);
@@ -1735,9 +1834,9 @@ a.button {
1735
1834
  /*
1736
1835
  * ---------- the assistant ----------
1737
1836
  *
1738
- * A section of the item panel, so the transcript scrolls with the panel's body
1739
- * and the field sits at its foot. It used to be a box under the card with its own
1740
- * scroll region; now the panel is the box.
1837
+ * A section of the item panel, so the transcript scrolls with the panel's body;
1838
+ * the field is pinned in the panel's foot. It used to be a box under the card
1839
+ * with its own scroll region; now the panel is the box.
1741
1840
  */
1742
1841
 
1743
1842
  .assistant__turns {
@@ -1756,6 +1855,9 @@ a.button {
1756
1855
  color: var(--ink-1);
1757
1856
  font-weight: 600;
1758
1857
  }
1858
+ .assistant__auto {
1859
+ color: var(--accent);
1860
+ }
1759
1861
 
1760
1862
  .assistant__reply {
1761
1863
  margin-top: 5px;
@@ -1801,8 +1903,29 @@ a.button {
1801
1903
  border: 0;
1802
1904
  border-top: 1px solid var(--hairline);
1803
1905
  }
1804
- .assistant__turn[data-status='running'] .assistant__reply {
1805
- border-left-style: dashed;
1906
+ /* A fenced block in an answer is usually meant for pasting elsewhere, so it carries a Copy. */
1907
+ .code-block {
1908
+ position: relative;
1909
+ }
1910
+ .code-block pre {
1911
+ padding-right: 52px;
1912
+ }
1913
+ .code-block__copy {
1914
+ position: absolute;
1915
+ top: 5px;
1916
+ right: 5px;
1917
+ padding: 1px 6px;
1918
+ border: 1px solid var(--border);
1919
+ border-radius: var(--radius-sm);
1920
+ background: var(--surface);
1921
+ color: var(--ink-3);
1922
+ font: inherit;
1923
+ font-size: 11px;
1924
+ cursor: pointer;
1925
+ }
1926
+ .code-block__copy:hover {
1927
+ color: var(--ink-1);
1928
+ border-color: var(--ink-3);
1806
1929
  }
1807
1930
 
1808
1931
  .assistant__status {
@@ -1813,16 +1936,25 @@ a.button {
1813
1936
  .assistant__status--bad {
1814
1937
  color: var(--critical);
1815
1938
  }
1816
- .assistant[data-running='true'] .assistant__status:not(.assistant__status--bad)::after {
1939
+ .assistant__clock {
1940
+ font-variant-numeric: tabular-nums;
1941
+ }
1942
+
1943
+ /* A spinner, for the turn while it works and for each call it is waiting on. */
1944
+ .assistant__status--working::after,
1945
+ .assistant__step[data-state='running']::before {
1817
1946
  content: '';
1818
1947
  display: inline-block;
1819
- width: 8px;
1820
- height: 8px;
1821
- margin-left: 6px;
1948
+ box-sizing: border-box;
1949
+ width: 9px;
1950
+ height: 9px;
1822
1951
  border-radius: 50%;
1823
1952
  border: 1.5px solid var(--accent);
1824
1953
  border-top-color: transparent;
1825
1954
  animation: assistant-spin 0.9s linear infinite;
1955
+ }
1956
+ .assistant__status--working::after {
1957
+ margin-left: 6px;
1826
1958
  vertical-align: -1px;
1827
1959
  }
1828
1960
  @keyframes assistant-spin {
@@ -1831,16 +1963,105 @@ a.button {
1831
1963
  }
1832
1964
  }
1833
1965
  @media (prefers-reduced-motion: reduce) {
1834
- .assistant[data-running='true'] .assistant__status::after {
1966
+ .assistant__status--working::after,
1967
+ .assistant__step[data-state='running']::before {
1835
1968
  animation: none;
1836
1969
  }
1837
1970
  }
1838
1971
 
1972
+ /*
1973
+ * The work: each call as one muted line under the request, the newest at the
1974
+ * foot. Folded once the turn is over, under a line that says what it took.
1975
+ */
1976
+ .assistant__work {
1977
+ margin-top: 4px;
1978
+ }
1979
+ .assistant__work > summary {
1980
+ font-size: 12px;
1981
+ color: var(--ink-3);
1982
+ cursor: pointer;
1983
+ }
1984
+ .assistant__work > summary:hover {
1985
+ color: var(--ink-2);
1986
+ }
1987
+ .assistant__took {
1988
+ margin: 4px 0 0;
1989
+ font-size: 12px;
1990
+ color: var(--ink-3);
1991
+ }
1992
+ .assistant__steps {
1993
+ margin: 5px 0 0;
1994
+ padding: 0 0 0 10px;
1995
+ border-left: 2px solid var(--hairline);
1996
+ list-style: none;
1997
+ font-size: 12px;
1998
+ line-height: 1.45;
1999
+ color: var(--ink-2);
2000
+ }
2001
+ .assistant__step {
2002
+ display: flex;
2003
+ align-items: baseline;
2004
+ gap: 6px;
2005
+ min-width: 0;
2006
+ }
2007
+ .assistant__step + .assistant__step {
2008
+ margin-top: 3px;
2009
+ }
2010
+ .assistant__step::before {
2011
+ flex: none;
2012
+ width: 9px;
2013
+ font-size: 11px;
2014
+ text-align: center;
2015
+ }
2016
+ .assistant__step[data-state='done']::before {
2017
+ content: '✓';
2018
+ color: var(--good-ink);
2019
+ }
2020
+ .assistant__step[data-state='failed']::before {
2021
+ content: '✕';
2022
+ color: var(--critical);
2023
+ }
2024
+ .assistant__step[data-state='running']::before {
2025
+ align-self: center;
2026
+ }
2027
+ .assistant__step-text {
2028
+ flex: none;
2029
+ max-width: 60%;
2030
+ overflow: hidden;
2031
+ text-overflow: ellipsis;
2032
+ white-space: nowrap;
2033
+ }
2034
+ .assistant__step-detail {
2035
+ min-width: 0;
2036
+ overflow: hidden;
2037
+ text-overflow: ellipsis;
2038
+ white-space: nowrap;
2039
+ font-size: 11.5px;
2040
+ color: var(--ink-3);
2041
+ }
2042
+ /* What it said on the way: its own words, set apart from the calls by having no mark. */
2043
+ .assistant__step--message {
2044
+ display: block;
2045
+ padding-left: 15px;
2046
+ font-style: italic;
2047
+ color: var(--ink-3);
2048
+ white-space: pre-line;
2049
+ overflow-wrap: anywhere;
2050
+ }
2051
+
2052
+ /* What can be done with a finished answer, without leaving the panel. */
2053
+ .assistant__after {
2054
+ display: flex;
2055
+ flex-wrap: wrap;
2056
+ gap: 6px;
2057
+ margin-top: 6px;
2058
+ }
2059
+
1839
2060
  .assistant__quick {
1840
2061
  display: flex;
1841
2062
  flex-wrap: wrap;
1842
2063
  gap: 6px;
1843
- margin-bottom: 14px;
2064
+ margin-bottom: 10px;
1844
2065
  }
1845
2066
 
1846
2067
  .assistant__form {
@@ -1959,6 +2180,12 @@ body[data-flyout='open'] .layout__side {
1959
2180
  overflow-y: auto;
1960
2181
  padding: 16px 16px 20px;
1961
2182
  }
2183
+ /* The assistant's field and its canned asks, pinned under the body that scrolls. */
2184
+ .flyout__footer {
2185
+ flex: none;
2186
+ padding: 12px 16px 14px;
2187
+ border-top: 1px solid var(--hairline);
2188
+ }
1962
2189
  .flyout__detail {
1963
2190
  margin: 0 0 22px;
1964
2191
  font-size: 13px;
@@ -2080,13 +2307,14 @@ body[data-flyout='open'] .layout__side {
2080
2307
  text-transform: none;
2081
2308
  }
2082
2309
 
2083
- /* ---------- setup, before the first brief ---------- */
2310
+ /* ---------- the first brief, after setup ---------- */
2084
2311
 
2085
2312
  /*
2086
- * The page a new store opens on. Built from the objective's card, since it does
2087
- * the same job in its place: the first thing read, before anything else exists.
2313
+ * Today between the setup screen and the first brief. Built from the
2314
+ * objective's card, since it does the same job in its place: the first thing
2315
+ * read, before anything else exists.
2088
2316
  */
2089
- .setup {
2317
+ .first-brief {
2090
2318
  padding: 18px 20px;
2091
2319
  background: var(--surface);
2092
2320
  border: 1px solid var(--border);
@@ -2094,121 +2322,617 @@ body[data-flyout='open'] .layout__side {
2094
2322
  border-radius: var(--radius);
2095
2323
  box-shadow: var(--shadow);
2096
2324
  }
2097
- .setup__title {
2325
+ .first-brief__title {
2098
2326
  margin: 0 0 6px;
2099
2327
  font-size: 18px;
2100
2328
  letter-spacing: -0.01em;
2101
2329
  }
2102
- .setup__lede {
2103
- margin: 0 0 16px;
2330
+ .first-brief__text {
2331
+ margin: 0;
2104
2332
  color: var(--ink-2);
2105
2333
  font-size: 13.5px;
2106
2334
  line-height: 1.5;
2107
2335
  }
2108
- .setup__steps {
2109
- display: grid;
2110
- gap: 4px;
2111
- margin: 0;
2336
+ .first-brief__actions {
2337
+ display: flex;
2338
+ flex-wrap: wrap;
2339
+ gap: 8px;
2340
+ margin-top: 14px;
2341
+ }
2342
+
2343
+ /* ---------- the setup screen ---------- */
2344
+
2345
+ /*
2346
+ * The whole page while a new store is set up: one column, one question open at
2347
+ * a time, on a thread whose dots are the questions. Answered ones fold into a
2348
+ * sentence; the open one is the only card. The buttons here are larger than the
2349
+ * dashboard's: this page is read once, slowly, and each one is a decision.
2350
+ */
2351
+ /* The page's own margins are the dashboard's; this one runs edge to edge. */
2352
+ body[data-onboarding='true'] {
2112
2353
  padding: 0;
2113
- list-style: none;
2114
2354
  }
2115
- .setup__step {
2116
- display: grid;
2117
- grid-template-columns: 22px minmax(0, 1fr);
2118
- gap: 10px;
2119
- padding: 12px 0;
2120
- border-top: 1px solid var(--hairline);
2355
+ .onboarding {
2356
+ min-height: 100vh;
2357
+ background: var(--page);
2121
2358
  }
2122
- .setup__mark {
2123
- font-size: 15px;
2124
- line-height: 1.3;
2125
- color: var(--ink-3);
2126
- text-align: center;
2359
+ .onboarding__bar {
2360
+ position: sticky;
2361
+ top: 0;
2362
+ z-index: 2;
2363
+ display: flex;
2364
+ align-items: center;
2365
+ gap: 18px;
2366
+ padding: 14px 24px;
2367
+ background: var(--page);
2368
+ border-bottom: 1px solid var(--hairline);
2369
+ font-size: 13px;
2370
+ color: var(--ink-2);
2127
2371
  }
2128
- .setup__step[data-done='true'] .setup__mark {
2129
- color: var(--good-ink);
2372
+ .onboarding__name {
2373
+ color: var(--ink-1);
2374
+ font-weight: 600;
2375
+ font-size: 14px;
2130
2376
  }
2131
- .setup__step[data-done='false'] .setup__mark {
2132
- color: var(--accent);
2377
+ .onboarding__progress {
2378
+ flex: 1;
2379
+ display: flex;
2380
+ align-items: center;
2381
+ gap: 10px;
2133
2382
  }
2134
- .setup__step-title {
2135
- margin: 0 0 4px;
2136
- font-size: 14px;
2137
- font-weight: 600;
2383
+ .onboarding__track {
2384
+ flex: 1;
2385
+ max-width: 220px;
2386
+ height: 4px;
2387
+ border-radius: 2px;
2388
+ background: var(--hairline);
2389
+ overflow: hidden;
2138
2390
  }
2139
- .setup__body p {
2140
- margin: 0 0 8px;
2141
- color: var(--ink-2);
2142
- font-size: 13px;
2143
- line-height: 1.5;
2391
+ .onboarding__track i {
2392
+ display: block;
2393
+ height: 100%;
2394
+ background: var(--accent);
2395
+ border-radius: 2px;
2396
+ transition: width 0.3s ease;
2144
2397
  }
2145
- .setup__step[data-done='true'] .setup__body p {
2146
- color: var(--ink-3);
2398
+ .onboarding__column {
2399
+ max-width: 600px;
2400
+ margin: 0 auto;
2401
+ padding: 32px 24px 30vh;
2147
2402
  }
2148
- .setup__choices {
2149
- display: flex;
2150
- flex-wrap: wrap;
2151
- gap: 8px;
2403
+ .onboarding__lede {
2404
+ margin: 0 0 24px;
2405
+ padding-left: 30px;
2406
+ color: var(--ink-2);
2407
+ font-size: 15px;
2408
+ line-height: 1.55;
2152
2409
  }
2153
- .setup__boards {
2154
- display: grid;
2155
- gap: 8px;
2410
+ .onboarding__thread {
2411
+ position: relative;
2156
2412
  margin: 0;
2157
- padding: 0;
2413
+ padding: 0 0 0 30px;
2158
2414
  list-style: none;
2159
2415
  }
2160
- .setup__board {
2161
- display: grid;
2162
- grid-template-columns: 16px 104px minmax(0, 1fr) auto;
2163
- gap: 10px;
2164
- align-items: baseline;
2165
- font-size: 13px;
2166
- }
2167
- .setup__board-name {
2168
- font-weight: 500;
2416
+ /* The thread: one hairline the dots sit on. */
2417
+ .onboarding__thread::before {
2418
+ content: '';
2419
+ position: absolute;
2420
+ left: 6px;
2421
+ top: 10px;
2422
+ bottom: 10px;
2423
+ width: 1px;
2424
+ background: var(--hairline);
2169
2425
  }
2170
- .setup__board-text {
2171
- color: var(--ink-2);
2426
+ .onboarding__thread > li {
2427
+ position: relative;
2172
2428
  }
2173
- /*
2174
- * The mark says how a board is doing; the words beside it say it again, so the
2175
- * colour is never the only cue, and the words stay one colour for every state.
2176
- */
2177
- .setup__board-mark {
2178
- font-weight: 600;
2179
- text-align: center;
2180
- color: var(--ink-3);
2429
+ .onboarding__dot {
2430
+ position: absolute;
2431
+ left: -28px;
2432
+ top: 10px;
2433
+ width: 9px;
2434
+ height: 9px;
2435
+ border-radius: 50%;
2436
+ background: var(--ink-3);
2437
+ box-shadow: 0 0 0 3px var(--page);
2438
+ }
2439
+ .onboarding__dot--open {
2440
+ left: -30px;
2441
+ top: 11px;
2442
+ width: 13px;
2443
+ height: 13px;
2444
+ background: var(--accent);
2181
2445
  }
2182
- .setup__board[data-health='ok'] .setup__board-mark {
2183
- color: var(--good-ink);
2446
+ .onboarding__dot--looking,
2447
+ .onboarding__dot--later {
2448
+ left: -29px;
2449
+ top: 6px;
2450
+ width: 8px;
2451
+ height: 8px;
2452
+ background: var(--page);
2453
+ border: 1.5px solid var(--accent);
2184
2454
  }
2185
- .setup__board[data-health='problem'] .setup__board-mark {
2186
- color: var(--serious);
2455
+ .onboarding__dot--later {
2456
+ border-color: var(--hairline);
2457
+ background: var(--hairline);
2187
2458
  }
2188
- .setup__board[data-health='todo'] .setup__board-mark {
2189
- color: var(--accent);
2459
+ .onboarding__done {
2460
+ display: flex;
2461
+ align-items: baseline;
2462
+ gap: 12px;
2463
+ padding: 5px 0;
2464
+ color: var(--ink-2);
2465
+ font-size: 14px;
2466
+ line-height: 1.5;
2190
2467
  }
2191
- .setup__body .setup__note {
2468
+ .onboarding__done[data-status='later'] {
2192
2469
  color: var(--ink-3);
2193
2470
  }
2194
- .setup__body .setup__note--todo {
2195
- color: var(--serious);
2471
+ .onboarding__done[data-status='later'] .onboarding__dot {
2472
+ background: var(--page);
2473
+ border: 1.5px solid var(--ink-3);
2474
+ width: 6px;
2475
+ height: 6px;
2196
2476
  }
2197
- .setup__editor {
2198
- margin-top: 12px;
2477
+ .onboarding__summary {
2478
+ flex: 1;
2479
+ min-width: 0;
2199
2480
  }
2200
- /* The settings page's own fold and fields, inside a step. */
2201
- .setup__body .setup__advanced p {
2481
+ .onboarding__change {
2482
+ padding: 0;
2483
+ border: 0;
2484
+ background: none;
2485
+ color: var(--ink-3);
2486
+ font: inherit;
2487
+ font-size: 13px;
2488
+ cursor: pointer;
2489
+ }
2490
+ .onboarding__change:hover {
2491
+ color: var(--accent);
2492
+ }
2493
+ .onboarding__change:disabled {
2494
+ visibility: hidden;
2495
+ }
2496
+
2497
+ .onboarding__card {
2498
+ margin: 22px 0 28px;
2499
+ scroll-margin: 90px 0 120px;
2500
+ }
2501
+ .onboarding__card h2 {
2502
+ margin: 0 0 10px;
2503
+ font-size: 24px;
2504
+ line-height: 1.2;
2505
+ font-weight: 650;
2506
+ letter-spacing: -0.01em;
2507
+ text-wrap: balance;
2508
+ }
2509
+ .onboarding__card h2:focus {
2510
+ outline: none;
2511
+ }
2512
+ .onboarding__why {
2513
+ display: flex;
2514
+ gap: 10px;
2515
+ margin: 0 0 18px;
2516
+ color: var(--ink-2);
2517
+ font-size: 14.5px;
2518
+ line-height: 1.5;
2519
+ }
2520
+ /*
2521
+ * What it said and what the user told it, in order, under the question: its
2522
+ * lines as the reason always reads, the user's set off to the right.
2523
+ */
2524
+ .onboarding__talk {
2525
+ display: grid;
2526
+ gap: 10px;
2527
+ margin: 0 0 16px;
2528
+ padding: 0;
2529
+ list-style: none;
2530
+ }
2531
+ .onboarding__talk .onboarding__why {
2202
2532
  margin: 0;
2203
- font-size: 12px;
2533
+ }
2534
+ .onboarding__said {
2535
+ justify-self: end;
2536
+ max-width: 85%;
2537
+ padding: 7px 12px;
2538
+ border-radius: 12px 12px 4px 12px;
2539
+ background: var(--accent-wash);
2540
+ color: var(--ink-1);
2541
+ font-size: 14.5px;
2204
2542
  line-height: 1.45;
2205
2543
  }
2206
- .setup__advanced .field {
2207
- max-width: 480px;
2544
+ .onboarding__sparkle {
2545
+ flex: none;
2546
+ margin-top: 3px;
2547
+ color: var(--accent);
2548
+ }
2549
+ .onboarding__looking {
2550
+ margin: 0 0 16px;
2551
+ font-size: 14px;
2552
+ color: var(--ink-2);
2553
+ }
2554
+ .onboarding__looking p,
2555
+ .onboarding__next p {
2556
+ margin: 0 0 4px;
2557
+ }
2558
+ .onboarding__steps {
2559
+ margin: 0;
2560
+ padding: 0;
2561
+ list-style: none;
2562
+ font-size: 13px;
2563
+ color: var(--ink-3);
2564
+ }
2565
+ .onboarding__steps li {
2566
+ padding: 2px 0;
2567
+ overflow: hidden;
2568
+ text-overflow: ellipsis;
2569
+ white-space: nowrap;
2570
+ }
2571
+ .onboarding__steps li::before {
2572
+ content: '✓';
2573
+ display: inline-block;
2574
+ width: 17px;
2575
+ color: var(--good-ink);
2576
+ }
2577
+ .onboarding__steps li[data-state='failed']::before {
2578
+ content: '!';
2579
+ color: var(--serious);
2580
+ }
2581
+ .onboarding__steps li[data-state='running']::before {
2582
+ content: '';
2583
+ width: 8px;
2584
+ height: 8px;
2585
+ margin-right: 9px;
2586
+ border-radius: 50%;
2587
+ border: 1.5px solid var(--ink-3);
2588
+ border-top-color: transparent;
2589
+ animation: onboarding-spin 0.9s linear infinite;
2590
+ }
2591
+ @keyframes onboarding-spin {
2592
+ to {
2593
+ transform: rotate(360deg);
2594
+ }
2595
+ }
2596
+ @media (prefers-reduced-motion: reduce) {
2597
+ .onboarding__steps li[data-state='running']::before {
2598
+ animation: none;
2599
+ }
2600
+ .onboarding__track i {
2601
+ transition: none;
2602
+ }
2603
+ }
2604
+ .onboarding__note {
2605
+ margin: 0 0 14px;
2606
+ color: var(--ink-2);
2607
+ font-size: 13.5px;
2608
+ }
2609
+ .onboarding__problem {
2610
+ margin: 0 0 16px;
2611
+ padding: 2px 0 2px 12px;
2612
+ border-left: 3px solid var(--serious);
2613
+ color: var(--ink-2);
2614
+ font-size: 14px;
2615
+ line-height: 1.5;
2616
+ }
2617
+ .onboarding__problem p {
2618
+ margin: 0 0 8px;
2619
+ }
2620
+ .onboarding__links {
2621
+ display: flex;
2622
+ flex-wrap: wrap;
2623
+ gap: 16px;
2624
+ }
2625
+ .onboarding__links a {
2626
+ color: var(--accent);
2627
+ }
2628
+ .onboarding__problem[data-blocking='false'] {
2629
+ margin: 0;
2630
+ border-left-color: var(--hairline);
2631
+ font-size: 13.5px;
2632
+ }
2633
+ .onboarding__problem pre {
2634
+ margin: 0 0 10px;
2635
+ padding: 6px 10px;
2636
+ background: var(--surface-sunken);
2637
+ border-radius: var(--radius-sm);
2638
+ font-size: 13px;
2639
+ overflow-x: auto;
2640
+ }
2641
+ .onboarding__form {
2642
+ display: grid;
2643
+ gap: 16px;
2644
+ }
2645
+ .onboarding__choice {
2646
+ margin: 0;
2647
+ padding: 0;
2648
+ border: 0;
2649
+ min-width: 0;
2650
+ }
2651
+ .onboarding__legend {
2652
+ margin-bottom: 8px;
2653
+ padding: 0;
2654
+ color: var(--ink-3);
2655
+ font-size: 13px;
2656
+ font-weight: 600;
2657
+ }
2658
+ .onboarding__pills {
2659
+ display: flex;
2660
+ flex-wrap: wrap;
2661
+ gap: 8px;
2662
+ }
2663
+ .onboarding__pill {
2664
+ padding: 6px 13px;
2665
+ border: 1px solid var(--border);
2666
+ border-radius: 999px;
2667
+ background: var(--surface);
2668
+ color: var(--ink-1);
2669
+ font: inherit;
2670
+ font-size: 14px;
2671
+ cursor: pointer;
2672
+ }
2673
+ .onboarding__pill:hover {
2674
+ border-color: var(--ink-3);
2675
+ }
2676
+ .onboarding__pill[aria-checked='true'] {
2677
+ border-color: var(--accent);
2678
+ background: var(--accent-wash);
2679
+ color: var(--accent);
2680
+ font-weight: 600;
2681
+ }
2682
+ .onboarding__list {
2683
+ background: var(--surface);
2684
+ border: 1px solid var(--border);
2685
+ border-radius: var(--radius);
2686
+ box-shadow: var(--shadow);
2687
+ overflow: hidden;
2688
+ }
2689
+ .onboarding__group + .onboarding__group,
2690
+ .onboarding__adder {
2691
+ border-top: 1px solid var(--hairline);
2692
+ }
2693
+ .onboarding__group-name {
2694
+ margin: 0;
2695
+ padding: 12px 16px 4px;
2696
+ color: var(--ink-3);
2697
+ font-size: 12.5px;
2698
+ font-weight: 600;
2699
+ }
2700
+ .onboarding__option {
2701
+ position: relative;
2702
+ display: flex;
2703
+ align-items: flex-start;
2704
+ gap: 12px;
2705
+ padding: 8px 16px;
2706
+ cursor: pointer;
2707
+ }
2708
+ .onboarding__group > .onboarding__option:first-child {
2709
+ padding-top: 12px;
2710
+ }
2711
+ .onboarding__group > .onboarding__option:last-child {
2712
+ padding-bottom: 12px;
2713
+ }
2714
+ .onboarding__option:hover {
2715
+ background: var(--surface-sunken);
2716
+ }
2717
+ .onboarding__option input {
2718
+ position: absolute;
2719
+ opacity: 0;
2720
+ pointer-events: none;
2721
+ }
2722
+ .onboarding__box {
2723
+ flex: none;
2724
+ display: grid;
2725
+ place-items: center;
2726
+ width: 18px;
2727
+ height: 18px;
2728
+ margin-top: 1px;
2729
+ border: 1.5px solid var(--ink-3);
2730
+ border-radius: 5px;
2731
+ }
2732
+ .onboarding__box[data-kind='radio'] {
2733
+ border-radius: 50%;
2208
2734
  }
2209
- .setup__advanced-actions {
2735
+ .onboarding__option input:checked + .onboarding__box {
2736
+ border-color: var(--accent);
2737
+ background: var(--accent);
2738
+ }
2739
+ .onboarding__option input:checked + .onboarding__box[data-kind='check']::after {
2740
+ content: '';
2741
+ width: 9px;
2742
+ height: 5px;
2743
+ border-left: 2px solid #fff;
2744
+ border-bottom: 2px solid #fff;
2745
+ transform: translateY(-1px) rotate(-45deg);
2746
+ }
2747
+ .onboarding__option input:checked + .onboarding__box[data-kind='radio']::after {
2748
+ content: '';
2749
+ width: 6px;
2750
+ height: 6px;
2751
+ border-radius: 50%;
2752
+ background: #fff;
2753
+ }
2754
+ .onboarding__option input:focus-visible + .onboarding__box {
2755
+ outline: 2px solid var(--focus-ring);
2756
+ outline-offset: 2px;
2757
+ }
2758
+ .onboarding__option-text {
2210
2759
  display: flex;
2211
- justify-content: flex-start;
2760
+ flex-direction: column;
2761
+ font-size: 15px;
2762
+ }
2763
+ .onboarding__option-text small,
2764
+ .onboarding__field small {
2765
+ color: var(--ink-3);
2766
+ font-size: 13px;
2767
+ }
2768
+ .onboarding__none {
2769
+ margin: 0;
2770
+ padding: 12px 16px;
2771
+ color: var(--ink-3);
2772
+ font-size: 14px;
2773
+ }
2774
+ .onboarding__adder {
2775
+ padding: 4px 16px;
2776
+ }
2777
+ .onboarding__add-button {
2778
+ padding: 8px 0;
2779
+ border: 0;
2780
+ background: none;
2781
+ color: var(--accent);
2782
+ font: inherit;
2783
+ font-size: 14px;
2784
+ cursor: pointer;
2785
+ }
2786
+ .onboarding__pills .onboarding__add-button {
2787
+ padding: 6px 4px;
2788
+ }
2789
+ .onboarding__add {
2790
+ display: flex;
2791
+ gap: 8px;
2792
+ padding: 6px 0;
2793
+ }
2794
+ .onboarding__add input,
2795
+ .onboarding__field input,
2796
+ .onboarding__tell input {
2797
+ flex: 1;
2798
+ min-width: 0;
2799
+ height: 34px;
2800
+ padding: 0 10px;
2801
+ border: 1px solid var(--border);
2802
+ border-radius: var(--radius-sm);
2803
+ background: var(--surface);
2804
+ color: var(--ink-1);
2805
+ font: inherit;
2806
+ font-size: 14px;
2807
+ }
2808
+ .onboarding__fields {
2809
+ display: grid;
2810
+ gap: 14px;
2811
+ }
2812
+ .onboarding__field,
2813
+ .onboarding__field > label {
2814
+ display: grid;
2815
+ gap: 4px;
2816
+ }
2817
+ .onboarding__suggestions {
2818
+ display: grid;
2819
+ gap: 6px;
2820
+ margin: 4px 0 0;
2821
+ padding: 0;
2822
+ list-style: none;
2823
+ }
2824
+ .onboarding__suggestions button {
2825
+ display: grid;
2826
+ gap: 1px;
2827
+ width: 100%;
2828
+ padding: 8px 12px;
2829
+ border: 1px dashed var(--border);
2830
+ border-radius: var(--radius-sm);
2831
+ background: none;
2832
+ color: var(--ink-1);
2833
+ font: inherit;
2834
+ font-size: 14px;
2835
+ text-align: left;
2836
+ cursor: pointer;
2837
+ }
2838
+ .onboarding__suggestions button:hover,
2839
+ .onboarding__suggestions button[aria-pressed='true'] {
2840
+ border-style: solid;
2841
+ border-color: var(--accent);
2842
+ background: var(--accent-wash);
2843
+ }
2844
+ .onboarding__suggestions small {
2845
+ color: var(--ink-3);
2846
+ font-size: 12.5px;
2847
+ }
2848
+ /* Asked in place of the buttons, where the eye already is. */
2849
+ .onboarding__confirm {
2850
+ padding: 12px 14px;
2851
+ border-radius: var(--radius);
2852
+ background: var(--surface-sunken);
2853
+ }
2854
+ .onboarding__confirm p {
2855
+ flex-basis: 100%;
2856
+ margin: 0 0 4px;
2857
+ color: var(--ink-2);
2858
+ font-size: 14px;
2859
+ }
2860
+ .onboarding__field-label {
2861
+ font-size: 13px;
2862
+ font-weight: 500;
2863
+ color: var(--ink-2);
2864
+ }
2865
+ .onboarding__error {
2866
+ margin: 0;
2867
+ color: var(--critical);
2868
+ font-size: 13.5px;
2869
+ }
2870
+ .onboarding__actions {
2871
+ display: flex;
2872
+ flex-wrap: wrap;
2873
+ align-items: center;
2874
+ gap: 10px;
2875
+ }
2876
+ .onboarding .button {
2877
+ padding: 8px 16px;
2878
+ border-radius: 8px;
2879
+ font-size: 14px;
2880
+ font-weight: 550;
2881
+ }
2882
+ .onboarding .onboarding__quiet {
2883
+ border-color: transparent;
2884
+ background: none;
2885
+ color: var(--ink-2);
2886
+ }
2887
+ .onboarding .onboarding__quiet:hover {
2888
+ color: var(--ink-1);
2889
+ }
2890
+ .onboarding__tell {
2891
+ display: flex;
2892
+ gap: 8px;
2893
+ margin: 0 0 18px;
2894
+ }
2895
+ .onboarding .onboarding__tell .button {
2896
+ padding: 6px 12px;
2897
+ font-weight: 500;
2898
+ }
2899
+ .onboarding__ahead {
2900
+ color: var(--ink-3);
2901
+ font-size: 14px;
2902
+ }
2903
+ .onboarding__next {
2904
+ position: relative;
2905
+ margin-bottom: 14px;
2906
+ color: var(--ink-2);
2907
+ }
2908
+ .onboarding__then {
2909
+ position: relative;
2910
+ margin: 0;
2911
+ }
2912
+ .onboarding__preview {
2913
+ margin: 0 0 18px;
2914
+ }
2915
+ .onboarding__preview > summary {
2916
+ cursor: pointer;
2917
+ color: var(--ink-2);
2918
+ font-size: 14px;
2919
+ }
2920
+ .onboarding__preview pre {
2921
+ max-height: 360px;
2922
+ margin: 10px 0 0;
2923
+ padding: 12px 14px;
2924
+ overflow: auto;
2925
+ background: var(--surface);
2926
+ border: 1px solid var(--border);
2927
+ border-radius: var(--radius-sm);
2928
+ font-size: 12.5px;
2929
+ line-height: 1.5;
2930
+ white-space: pre-wrap;
2931
+ }
2932
+ .onboarding__preview p {
2933
+ margin: 8px 0 0;
2934
+ color: var(--ink-2);
2935
+ font-size: 13.5px;
2212
2936
  }
2213
2937
 
2214
2938
  /* ---------- settings ---------- */
@@ -2258,19 +2982,16 @@ body[data-flyout='open'] .layout__side {
2258
2982
  color: var(--serious);
2259
2983
  font-size: 13px;
2260
2984
  }
2261
- .settings-card__more,
2262
- .setup__advanced {
2985
+ .settings-card__more {
2263
2986
  margin-top: 6px;
2264
2987
  }
2265
- .settings-card__more > summary,
2266
- .setup__advanced > summary {
2988
+ .settings-card__more > summary {
2267
2989
  cursor: pointer;
2268
2990
  color: var(--ink-2);
2269
2991
  font-size: 13px;
2270
2992
  padding: 4px 0;
2271
2993
  }
2272
- .settings-card__more[open] > summary,
2273
- .setup__advanced[open] > summary {
2994
+ .settings-card__more[open] > summary {
2274
2995
  margin-bottom: 10px;
2275
2996
  }
2276
2997