@swimmingliu/autovpn 1.6.9 → 1.8.0

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.
@@ -21,6 +21,31 @@
21
21
  --terminal-soft: #1b2436;
22
22
  --terminal-text: #d6e2ff;
23
23
  --shadow: 0 20px 44px rgba(29, 39, 71, 0.08);
24
+ --z-sticky: 30;
25
+ --z-bottom-nav: 40;
26
+ --z-backdrop: 50;
27
+ --z-sheet: 60;
28
+ --z-toast: 70;
29
+ --safe-area-top: env(safe-area-inset-top, 0px);
30
+ --safe-area-right: env(safe-area-inset-right, 0px);
31
+ --safe-area-bottom: env(safe-area-inset-bottom, 0px);
32
+ --safe-area-left: env(safe-area-inset-left, 0px);
33
+ }
34
+
35
+ @font-face {
36
+ font-family: "AutoVPN Visual Test";
37
+ src: url("./assets/fonts/AutoVPNVisualTest-NotoSansSC.woff2") format("woff2");
38
+ font-style: normal;
39
+ font-weight: 100 900;
40
+ font-display: block;
41
+ }
42
+
43
+ html[data-visual-test] body,
44
+ html[data-visual-test] input,
45
+ html[data-visual-test] button,
46
+ html[data-visual-test] select,
47
+ html[data-visual-test] textarea {
48
+ font-family: "AutoVPN Visual Test", sans-serif;
24
49
  }
25
50
 
26
51
  * {
@@ -804,12 +829,33 @@ body[data-page="logs"] .page-content {
804
829
  }
805
830
 
806
831
  .run-control-panel {
832
+ display: block;
833
+ }
834
+
835
+ .mobile-run-bar {
807
836
  display: grid;
808
- grid-template-columns: repeat(3, minmax(160px, 1fr));
809
- align-items: center;
837
+ grid-template-columns: repeat(2, minmax(160px, 1fr));
838
+ grid-column: 1 / -1;
839
+ align-self: start;
810
840
  gap: 14px;
811
841
  }
812
842
 
843
+ #runsWorkspace {
844
+ display: block;
845
+ }
846
+
847
+ #runsWorkspace > .runs-grid {
848
+ margin-top: 16px;
849
+ }
850
+
851
+ .run-secondary-controls > summary {
852
+ display: none;
853
+ }
854
+
855
+ .run-secondary-controls:not([open]) > :not(summary) {
856
+ display: block;
857
+ }
858
+
813
859
  .retry-control-card {
814
860
  grid-column: 1 / -1;
815
861
  display: grid;
@@ -880,7 +926,6 @@ body[data-page="logs"] .page-content {
880
926
 
881
927
  .run-options,
882
928
  .format-row {
883
- grid-column: 1 / -1;
884
929
  display: flex;
885
930
  flex-wrap: wrap;
886
931
  gap: 8px;
@@ -890,7 +935,7 @@ body[data-page="logs"] .page-content {
890
935
  position: fixed;
891
936
  top: 58px;
892
937
  right: 28px;
893
- z-index: 40;
938
+ z-index: var(--z-toast);
894
939
  display: grid;
895
940
  gap: 8px;
896
941
  pointer-events: none;
@@ -969,6 +1014,25 @@ body[data-page="logs"] .page-content {
969
1014
  margin-top: 16px;
970
1015
  }
971
1016
 
1017
+ .log-utility-actions,
1018
+ .log-destructive-actions {
1019
+ display: flex;
1020
+ gap: 8px;
1021
+ }
1022
+
1023
+ .log-destructive-actions {
1024
+ margin-left: 8px;
1025
+ padding-left: 12px;
1026
+ border-left: 1px solid rgba(255, 135, 148, 0.45);
1027
+ }
1028
+
1029
+ .log-jump-latest,
1030
+ .log-undo-clear {
1031
+ justify-self: end;
1032
+ margin: 8px 0;
1033
+ min-height: 44px;
1034
+ }
1035
+
972
1036
  .compact-result-table {
973
1037
  min-width: 560px;
974
1038
  }
@@ -1020,7 +1084,7 @@ body[data-page="logs"] #logsWorkspace > .panel {
1020
1084
 
1021
1085
  body[data-page="logs"] #logsWorkspace > .panel {
1022
1086
  display: grid;
1023
- grid-template-rows: auto minmax(0, 1fr);
1087
+ grid-template-rows: auto auto auto minmax(0, 1fr);
1024
1088
  }
1025
1089
 
1026
1090
  body[data-page="logs"] #logCenterTable {
@@ -1338,7 +1402,7 @@ body[data-page="logs"] #logCenterTable {
1338
1402
  align-items: center;
1339
1403
  justify-content: center;
1340
1404
  padding: 24px;
1341
- z-index: 30;
1405
+ z-index: var(--z-backdrop);
1342
1406
  }
1343
1407
 
1344
1408
  .settings-drawer-shell[data-open="false"] {
@@ -1350,6 +1414,9 @@ body[data-page="logs"] #logCenterTable {
1350
1414
  }
1351
1415
 
1352
1416
  .settings-drawer-backdrop {
1417
+ position: absolute;
1418
+ inset: 0;
1419
+ border: 0;
1353
1420
  background: rgba(17, 24, 38, 0.22);
1354
1421
  opacity: 0;
1355
1422
  transition: opacity 0.18s ease;
@@ -1364,7 +1431,7 @@ body[data-page="logs"] #logCenterTable {
1364
1431
  max-width: 1320px;
1365
1432
  max-height: min(88vh, 960px);
1366
1433
  padding: 26px 26px 24px;
1367
- background: rgba(255, 255, 255, 0.96);
1434
+ background: #fff;
1368
1435
  border: 1px solid var(--border);
1369
1436
  border-radius: 26px;
1370
1437
  box-shadow: 0 16px 48px rgba(29, 39, 71, 0.16);
@@ -1375,6 +1442,7 @@ body[data-page="logs"] #logCenterTable {
1375
1442
  opacity: 0;
1376
1443
  transition: transform 0.2s ease, opacity 0.2s ease;
1377
1444
  position: relative;
1445
+ z-index: var(--z-sheet);
1378
1446
  }
1379
1447
 
1380
1448
  .settings-drawer-shell[data-section="availability_targets"] .settings-drawer-panel {
@@ -1395,6 +1463,10 @@ body[data-page="logs"] #logCenterTable {
1395
1463
  cursor: grab;
1396
1464
  }
1397
1465
 
1466
+ .settings-drawer-close {
1467
+ flex: 0 0 auto;
1468
+ }
1469
+
1398
1470
  .settings-drawer-head:active {
1399
1471
  cursor: grabbing;
1400
1472
  }
@@ -1729,6 +1801,19 @@ body[data-page="logs"] #logCenterTable {
1729
1801
  font-weight: 650;
1730
1802
  }
1731
1803
 
1804
+ .qr-status {
1805
+ display: grid;
1806
+ justify-items: center;
1807
+ gap: 10px;
1808
+ max-width: 260px;
1809
+ text-align: center;
1810
+ color: var(--text-soft);
1811
+ }
1812
+
1813
+ .node-card-field {
1814
+ display: none;
1815
+ }
1816
+
1732
1817
  .qr-grid {
1733
1818
  width: 162px;
1734
1819
  display: grid;
@@ -1984,6 +2069,17 @@ body[data-page="logs"] #logCenterTable {
1984
2069
  padding-bottom: 4px;
1985
2070
  }
1986
2071
 
2072
+ .nav-copy {
2073
+ display: block;
2074
+ }
2075
+
2076
+ .nav-item {
2077
+ justify-content: flex-start;
2078
+ min-width: 112px;
2079
+ min-height: 44px;
2080
+ padding-inline: 10px;
2081
+ }
2082
+
1987
2083
  .main-shell {
1988
2084
  min-height: calc(100vh - 132px);
1989
2085
  }
@@ -2022,6 +2118,50 @@ body[data-page="logs"] #logCenterTable {
2022
2118
  }
2023
2119
 
2024
2120
  @media (max-width: 720px) {
2121
+
2122
+ .subscriptions-primary-panel .action-grid .btn {
2123
+ min-height: 48px;
2124
+ }
2125
+
2126
+ .decoded-node-table thead {
2127
+ display: none;
2128
+ }
2129
+
2130
+ .decoded-node-table,
2131
+ .decoded-node-table tbody,
2132
+ .decoded-node-table tr,
2133
+ .decoded-node-table td {
2134
+ display: block;
2135
+ width: 100%;
2136
+ }
2137
+
2138
+ .decoded-node-table {
2139
+ min-width: 0;
2140
+ }
2141
+
2142
+ .decoded-node-table tr {
2143
+ display: grid;
2144
+ gap: 10px;
2145
+ padding: 14px;
2146
+ border: 1px solid var(--border);
2147
+ border-radius: 16px;
2148
+ overflow-wrap: anywhere;
2149
+ }
2150
+
2151
+ .decoded-node-table td {
2152
+ display: grid;
2153
+ grid-template-columns: minmax(72px, 0.35fr) minmax(0, 1fr);
2154
+ gap: 10px;
2155
+ padding: 0;
2156
+ border: 0;
2157
+ }
2158
+
2159
+ .node-card-field {
2160
+ display: inline;
2161
+ color: var(--text-soft);
2162
+ font-family: inherit;
2163
+ font-weight: 700;
2164
+ }
2025
2165
  html,
2026
2166
  body,
2027
2167
  .app-frame,
@@ -2029,11 +2169,153 @@ body[data-page="logs"] #logCenterTable {
2029
2169
  min-height: 100%;
2030
2170
  }
2031
2171
 
2172
+ .app-frame {
2173
+ height: auto;
2174
+ }
2175
+
2176
+ .app-content-shell {
2177
+ overflow: visible;
2178
+ }
2179
+
2180
+ html {
2181
+ scroll-padding-bottom: calc(86px + var(--safe-area-bottom));
2182
+ }
2183
+
2184
+ #settingsWorkspace button,
2185
+ #settingsWorkspace input,
2186
+ #settingsWorkspace select {
2187
+ scroll-margin-bottom: calc(86px + var(--safe-area-bottom));
2188
+ }
2189
+
2190
+ #settingsWorkspace {
2191
+ padding-bottom: calc(86px + var(--safe-area-bottom));
2192
+ }
2193
+
2032
2194
  body {
2033
2195
  overflow: auto;
2034
2196
  background: linear-gradient(180deg, #fbfcff 0%, var(--bg) 100%);
2035
2197
  }
2036
2198
 
2199
+ .settings-drawer-shell {
2200
+ padding: 0;
2201
+ }
2202
+
2203
+ .settings-drawer-panel,
2204
+ .settings-drawer-shell[data-section="availability_targets"] .settings-drawer-panel {
2205
+ width: 100vw;
2206
+ max-width: none;
2207
+ height: 100vh;
2208
+ height: 100dvh;
2209
+ max-height: none;
2210
+ padding: 0;
2211
+ gap: 0;
2212
+ border: 0;
2213
+ border-radius: 0;
2214
+ transform: none !important;
2215
+ overflow: hidden;
2216
+ background: #fff;
2217
+ }
2218
+
2219
+ .settings-drawer-head {
2220
+ padding: calc(14px + var(--safe-area-top)) 16px 14px;
2221
+ border-bottom: 1px solid var(--border);
2222
+ cursor: default;
2223
+ }
2224
+
2225
+ .settings-drawer-head h3 {
2226
+ font-size: 22px;
2227
+ }
2228
+
2229
+ .settings-drawer-body {
2230
+ max-height: none;
2231
+ padding: 16px;
2232
+ overflow-y: auto;
2233
+ overflow-x: hidden;
2234
+ overscroll-behavior: contain;
2235
+ }
2236
+
2237
+ .settings-drawer-actions {
2238
+ position: sticky;
2239
+ bottom: 0;
2240
+ padding: 12px 16px calc(12px + var(--safe-area-bottom));
2241
+ background: rgba(255, 255, 255, 0.98);
2242
+ border-top: 1px solid var(--border);
2243
+ }
2244
+
2245
+ .settings-drawer-actions .btn {
2246
+ flex: 1;
2247
+ min-height: 48px;
2248
+ }
2249
+
2250
+ .settings-source-table,
2251
+ .availability-target-table {
2252
+ min-width: 0;
2253
+ }
2254
+
2255
+ .settings-source-table thead,
2256
+ .settings-source-table colgroup,
2257
+ .availability-target-table thead,
2258
+ .availability-target-table colgroup {
2259
+ display: none;
2260
+ }
2261
+
2262
+ .settings-source-table tbody,
2263
+ .settings-source-table tr,
2264
+ .settings-source-table td,
2265
+ .availability-target-table tbody,
2266
+ .availability-target-table tr,
2267
+ .availability-target-table td {
2268
+ display: block;
2269
+ width: 100%;
2270
+ }
2271
+
2272
+ .settings-source-table tr,
2273
+ .availability-target-table tr {
2274
+ margin-bottom: 14px;
2275
+ padding: 12px;
2276
+ border: 1px solid var(--border);
2277
+ border-radius: 14px;
2278
+ }
2279
+
2280
+ .settings-source-table td,
2281
+ .availability-target-table td {
2282
+ padding: 6px 0;
2283
+ border: 0;
2284
+ }
2285
+
2286
+ .settings-source-table td::before,
2287
+ .availability-target-table td::before {
2288
+ content: attr(data-field-label);
2289
+ display: block;
2290
+ margin-bottom: 5px;
2291
+ color: var(--text-soft);
2292
+ font-size: 12px;
2293
+ font-weight: 700;
2294
+ }
2295
+
2296
+ .settings-source-table input,
2297
+ .settings-source-table textarea,
2298
+ .availability-target-table input,
2299
+ .availability-target-table textarea,
2300
+ .availability-target-table button {
2301
+ width: 100%;
2302
+ max-width: 100%;
2303
+ min-height: 44px;
2304
+ }
2305
+
2306
+ .settings-source-table input,
2307
+ .availability-target-table input {
2308
+ min-height: 44px;
2309
+ }
2310
+
2311
+ .settings-source-table input[type="checkbox"],
2312
+ .availability-target-table input[type="checkbox"] {
2313
+ width: 44px;
2314
+ min-width: 44px;
2315
+ height: 44px;
2316
+ min-height: 44px;
2317
+ }
2318
+
2037
2319
  .app-frame {
2038
2320
  display: block;
2039
2321
  height: auto;
@@ -2042,7 +2324,7 @@ body[data-page="logs"] #logCenterTable {
2042
2324
  .workspace-shell {
2043
2325
  display: block;
2044
2326
  min-height: 100vh;
2045
- padding-bottom: calc(76px + env(safe-area-inset-bottom));
2327
+ padding-bottom: calc(76px + var(--safe-area-bottom));
2046
2328
  }
2047
2329
 
2048
2330
  .sidebar {
@@ -2050,9 +2332,9 @@ body[data-page="logs"] #logCenterTable {
2050
2332
  left: 0;
2051
2333
  right: 0;
2052
2334
  bottom: 0;
2053
- z-index: 80;
2335
+ z-index: var(--z-bottom-nav);
2054
2336
  display: block;
2055
- padding: 8px 10px calc(8px + env(safe-area-inset-bottom));
2337
+ padding: 8px 10px calc(8px + var(--safe-area-bottom));
2056
2338
  border: 1px solid rgba(207, 215, 239, 0.82);
2057
2339
  border-width: 1px 0 0;
2058
2340
  background: rgba(255, 255, 255, 0.96);
@@ -2068,11 +2350,13 @@ body[data-page="logs"] #logCenterTable {
2068
2350
  display: grid;
2069
2351
  grid-template-columns: repeat(6, minmax(0, 1fr));
2070
2352
  gap: 4px;
2071
- overflow: visible;
2353
+ overflow-x: auto;
2354
+ overscroll-behavior-x: contain;
2072
2355
  padding: 0;
2073
2356
  }
2074
2357
 
2075
2358
  .nav-item {
2359
+ min-width: 0;
2076
2360
  min-height: 58px;
2077
2361
  display: grid;
2078
2362
  justify-items: center;
@@ -2103,13 +2387,13 @@ body[data-page="logs"] #logCenterTable {
2103
2387
  .main-shell {
2104
2388
  display: block;
2105
2389
  min-height: auto;
2106
- padding: 12px 12px 18px;
2390
+ padding: max(12px, var(--safe-area-top)) max(12px, var(--safe-area-right)) 18px max(12px, var(--safe-area-left));
2107
2391
  }
2108
2392
 
2109
2393
  .topbar {
2110
2394
  position: sticky;
2111
2395
  top: 0;
2112
- z-index: 40;
2396
+ z-index: var(--z-sticky);
2113
2397
  grid-template-columns: 1fr;
2114
2398
  gap: 12px;
2115
2399
  padding: 14px;
@@ -2141,7 +2425,7 @@ body[data-page="logs"] #logCenterTable {
2141
2425
  .topbar-actions .btn {
2142
2426
  min-width: 0;
2143
2427
  padding: 0 8px;
2144
- min-height: 42px;
2428
+ min-height: 48px;
2145
2429
  border-radius: 12px;
2146
2430
  font-size: 13px;
2147
2431
  }
@@ -2234,20 +2518,64 @@ body[data-page="logs"] #logCenterTable {
2234
2518
  }
2235
2519
 
2236
2520
  .run-control-panel {
2237
- position: sticky;
2238
- bottom: calc(76px + env(safe-area-inset-bottom));
2239
- z-index: 35;
2521
+ position: static;
2522
+ }
2523
+
2524
+ .mobile-run-bar {
2525
+ position: fixed;
2526
+ inset: auto max(12px, var(--safe-area-right)) calc(76px + var(--safe-area-bottom)) max(12px, var(--safe-area-left));
2527
+ z-index: var(--z-sticky);
2240
2528
  grid-template-columns: repeat(2, minmax(0, 1fr));
2241
2529
  gap: 10px;
2530
+ padding: 10px;
2242
2531
  background: rgba(255, 255, 255, 0.98);
2243
2532
  backdrop-filter: blur(16px);
2533
+ border: 1px solid var(--border);
2534
+ border-radius: 16px;
2535
+ }
2536
+
2537
+ #runsCurrentStage {
2538
+ scroll-margin-bottom: 170px;
2244
2539
  }
2245
2540
 
2541
+ #runsWorkspace {
2542
+ padding-bottom: 170px;
2543
+ }
2544
+
2545
+ .run-secondary-controls > summary {
2546
+ display: list-item;
2547
+ min-height: 44px;
2548
+ margin-top: 12px;
2549
+ padding: 12px;
2550
+ cursor: pointer;
2551
+ font-weight: 750;
2552
+ }
2553
+
2554
+ .run-secondary-controls:not([open]) > :not(summary) {
2555
+ display: none;
2556
+ }
2557
+
2558
+ .timeline { display: grid; grid-template-columns: 1fr; }
2559
+
2246
2560
  .run-big {
2247
2561
  min-height: 50px;
2248
2562
  border-radius: 14px;
2249
2563
  }
2250
2564
 
2565
+ .btn.small,
2566
+ .retry-field select,
2567
+ .retry-stage-button,
2568
+ .checkbox-chip,
2569
+ .subtab {
2570
+ min-width: 44px;
2571
+ min-height: 44px;
2572
+ }
2573
+
2574
+ .icon-btn {
2575
+ width: 44px;
2576
+ height: 44px;
2577
+ }
2578
+
2251
2579
  .retry-control-card {
2252
2580
  grid-template-columns: 1fr;
2253
2581
  gap: 10px;
@@ -2274,6 +2602,21 @@ body[data-page="logs"] #logCenterTable {
2274
2602
  width: 100%;
2275
2603
  }
2276
2604
 
2605
+ .log-utility-actions,
2606
+ .log-destructive-actions {
2607
+ display: grid;
2608
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2609
+ margin-left: 0;
2610
+ padding-left: 0;
2611
+ border-left: 0;
2612
+ }
2613
+
2614
+ .log-destructive-actions {
2615
+ grid-template-columns: 1fr;
2616
+ padding-top: 8px;
2617
+ border-top: 1px solid rgba(255, 135, 148, 0.45);
2618
+ }
2619
+
2277
2620
  .terminal-output,
2278
2621
  .log-stream {
2279
2622
  max-height: 58vh;
@@ -2302,13 +2645,14 @@ body[data-page="logs"] #logCenterTable {
2302
2645
  width: 100vw;
2303
2646
  max-width: none;
2304
2647
  height: 100vh;
2648
+ height: 100dvh;
2305
2649
  max-height: none;
2306
2650
  border-radius: 0;
2307
2651
  transform: none !important;
2308
2652
  }
2309
2653
 
2310
2654
  .settings-drawer-body {
2311
- max-height: calc(100vh - 154px);
2655
+ max-height: none;
2312
2656
  overflow: auto;
2313
2657
  }
2314
2658
 
@@ -2319,7 +2663,54 @@ body[data-page="logs"] #logCenterTable {
2319
2663
  .toast-root {
2320
2664
  left: 12px;
2321
2665
  right: 12px;
2322
- bottom: calc(86px + env(safe-area-inset-bottom));
2666
+ bottom: calc(86px + var(--safe-area-bottom));
2667
+ }
2668
+ }
2669
+
2670
+ @media (max-width: 320px) {
2671
+ .sidebar-nav {
2672
+ grid-template-columns: none;
2673
+ grid-auto-flow: column;
2674
+ grid-auto-columns: 56px;
2675
+ }
2676
+ }
2677
+
2678
+ @media (orientation: landscape) and (max-height: 500px) {
2679
+ .btn.small,
2680
+ .subtab {
2681
+ min-width: 44px;
2682
+ min-height: 44px;
2683
+ }
2684
+ .topbar {
2685
+ position: static;
2686
+ }
2687
+
2688
+ .topbar-heading p,
2689
+ .page-header-card {
2690
+ display: none;
2691
+ }
2692
+
2693
+ .terminal-output,
2694
+ .log-stream,
2695
+ body[data-page="logs"] #logCenterTable {
2696
+ min-height: 180px;
2697
+ height: 46dvh;
2698
+ max-height: 46dvh;
2699
+ }
2700
+ }
2701
+
2702
+ @media (prefers-reduced-motion: reduce) {
2703
+ *,
2704
+ *::before,
2705
+ *::after {
2706
+ scroll-behavior: auto !important;
2707
+ transition-duration: 0.01ms !important;
2708
+ animation-duration: 0.01ms !important;
2709
+ animation-iteration-count: 1 !important;
2710
+ }
2711
+
2712
+ .settings-drawer-panel {
2713
+ transform: none !important;
2323
2714
  }
2324
2715
  }
2325
2716