esp32tool 1.4.1 → 1.6.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.
package/css/style.css CHANGED
@@ -539,12 +539,15 @@ div.clear {
539
539
  padding-top: 20px;
540
540
  border-top: 2px solid #ccc;
541
541
  display: flex;
542
- flex-direction: column;
542
+ flex-direction: row;
543
+ flex-wrap: wrap;
544
+ justify-content: center;
543
545
  align-items: center;
546
+ gap: 10px;
544
547
  }
545
548
 
546
549
  #commands .partition-table button {
547
- margin: 0 0 10px 0;
550
+ margin: 0;
548
551
  border-width: 2px;
549
552
  border-style: solid;
550
553
  padding: 2px 30px;
@@ -565,6 +568,12 @@ div.clear {
565
568
  #commands .partition-table .progress-bar {
566
569
  width: 400px;
567
570
  margin-bottom: 10px;
571
+ flex-basis: 100%;
572
+ }
573
+
574
+ #commands .partition-table #partitionList {
575
+ flex-basis: 100%;
576
+ width: 100%;
568
577
  }
569
578
 
570
579
  .partition-table-display {
@@ -2269,3 +2278,843 @@ body.console-active .main {
2269
2278
  padding-top: 0 !important;
2270
2279
  overflow: hidden !important;
2271
2280
  }
2281
+
2282
+ /* ========== Hex Editor Container ========== */
2283
+ .hexeditor-container {
2284
+ position: fixed;
2285
+ top: 0;
2286
+ left: 0;
2287
+ right: 0;
2288
+ bottom: 0;
2289
+ z-index: 1001;
2290
+ background-color: #1c1c1c;
2291
+ display: flex;
2292
+ flex-direction: column;
2293
+ font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace;
2294
+ color: #ddd;
2295
+ }
2296
+
2297
+ .hexeditor-container.hidden {
2298
+ display: none;
2299
+ }
2300
+
2301
+ /* Hide header and commands when hex editor is active */
2302
+ body.hexeditor-active .header {
2303
+ display: none !important;
2304
+ }
2305
+ body.hexeditor-active #commands {
2306
+ display: none !important;
2307
+ }
2308
+ body.hexeditor-active #notSupported {
2309
+ display: none !important;
2310
+ }
2311
+ body.hexeditor-active .main {
2312
+ padding-top: 0 !important;
2313
+ overflow: hidden !important;
2314
+ }
2315
+
2316
+ /* Hex Editor Header / Toolbar */
2317
+ .hexeditor-toolbar {
2318
+ display: flex;
2319
+ align-items: center;
2320
+ gap: 8px;
2321
+ padding: 6px 12px;
2322
+ background-color: #2a2a2a;
2323
+ border-bottom: 1px solid #444;
2324
+ flex-wrap: wrap;
2325
+ min-height: 40px;
2326
+ }
2327
+
2328
+ .hexeditor-toolbar h3 {
2329
+ margin: 0;
2330
+ font-size: 14px;
2331
+ font-weight: 600;
2332
+ white-space: nowrap;
2333
+ }
2334
+
2335
+ .hexeditor-toolbar .spacer {
2336
+ flex: 1;
2337
+ }
2338
+
2339
+ .hexeditor-toolbar button {
2340
+ padding: 4px 14px;
2341
+ font-size: 12px;
2342
+ background-color: #444;
2343
+ color: #ddd;
2344
+ border: 1px solid #555;
2345
+ border-radius: 3px;
2346
+ cursor: pointer;
2347
+ white-space: nowrap;
2348
+ }
2349
+
2350
+ .hexeditor-toolbar button:hover {
2351
+ background-color: #555;
2352
+ }
2353
+
2354
+ .hexeditor-toolbar button.primary {
2355
+ background-color: #2e7d32;
2356
+ border-color: #388e3c;
2357
+ }
2358
+
2359
+ .hexeditor-toolbar button.primary:hover {
2360
+ background-color: #388e3c;
2361
+ }
2362
+
2363
+ .hexeditor-toolbar button.danger {
2364
+ background-color: #c62828;
2365
+ border-color: #d32f2f;
2366
+ }
2367
+
2368
+ .hexeditor-toolbar button.danger:hover {
2369
+ background-color: #d32f2f;
2370
+ }
2371
+
2372
+ .hexeditor-toolbar button:disabled {
2373
+ opacity: 0.5;
2374
+ cursor: not-allowed;
2375
+ }
2376
+
2377
+ /* Search bar */
2378
+ .hexeditor-search {
2379
+ display: flex;
2380
+ align-items: center;
2381
+ gap: 6px;
2382
+ padding: 4px 12px;
2383
+ background-color: #252525;
2384
+ border-bottom: 1px solid #333;
2385
+ }
2386
+
2387
+ .hexeditor-search label {
2388
+ font-size: 12px;
2389
+ color: #aaa;
2390
+ white-space: nowrap;
2391
+ }
2392
+
2393
+ .hexeditor-search input[type="text"] {
2394
+ padding: 3px 8px;
2395
+ font-size: 12px;
2396
+ font-family: inherit;
2397
+ background-color: #333;
2398
+ color: #ddd;
2399
+ border: 1px solid #555;
2400
+ border-radius: 3px;
2401
+ outline: none;
2402
+ width: 200px;
2403
+ }
2404
+
2405
+ .hexeditor-search input[type="text"]:focus {
2406
+ border-color: #71ae1e;
2407
+ }
2408
+
2409
+ .hexeditor-search select {
2410
+ padding: 3px 6px;
2411
+ font-size: 12px;
2412
+ font-family: inherit;
2413
+ background-color: #333;
2414
+ color: #ddd;
2415
+ border: 1px solid #555;
2416
+ border-radius: 3px;
2417
+ outline: none;
2418
+ }
2419
+
2420
+ .hexeditor-search button {
2421
+ padding: 3px 10px;
2422
+ font-size: 12px;
2423
+ background-color: #444;
2424
+ color: #ddd;
2425
+ border: 1px solid #555;
2426
+ border-radius: 3px;
2427
+ cursor: pointer;
2428
+ }
2429
+
2430
+ .hexeditor-search button:hover {
2431
+ background-color: #555;
2432
+ }
2433
+
2434
+ .hexeditor-search .search-info {
2435
+ font-size: 11px;
2436
+ color: #888;
2437
+ margin-left: 4px;
2438
+ }
2439
+
2440
+ /* Status bar */
2441
+ .hexeditor-statusbar {
2442
+ display: flex;
2443
+ align-items: center;
2444
+ gap: 16px;
2445
+ padding: 4px 12px;
2446
+ background-color: #1a3a1a;
2447
+ border-top: 1px solid #444;
2448
+ font-size: 11px;
2449
+ color: #aaa;
2450
+ }
2451
+
2452
+ .hexeditor-statusbar .status-item {
2453
+ white-space: nowrap;
2454
+ }
2455
+
2456
+ .hexeditor-statusbar .status-modified {
2457
+ color: #ffab40;
2458
+ font-weight: 600;
2459
+ }
2460
+
2461
+ /* Main hex content area */
2462
+ .hexeditor-body {
2463
+ flex: 1;
2464
+ overflow: hidden;
2465
+ display: flex;
2466
+ flex-direction: column;
2467
+ position: relative;
2468
+ }
2469
+
2470
+ .hexeditor-viewport {
2471
+ flex: 1;
2472
+ overflow-y: auto;
2473
+ overflow-x: auto;
2474
+ position: relative;
2475
+ }
2476
+
2477
+ /* Row layout */
2478
+ .hexeditor-row {
2479
+ display: flex;
2480
+ line-height: 20px;
2481
+ height: 20px;
2482
+ white-space: nowrap;
2483
+ }
2484
+
2485
+ .hexeditor-row:hover {
2486
+ background-color: #2a2a2a;
2487
+ }
2488
+
2489
+ .hexeditor-row.highlight-row {
2490
+ background-color: #3a3a1a !important;
2491
+ }
2492
+
2493
+ /* Address gutter */
2494
+ .hexeditor-addr {
2495
+ width: 80px;
2496
+ min-width: 80px;
2497
+ text-align: right;
2498
+ padding-right: 12px;
2499
+ color: #6a9955;
2500
+ font-size: 12px;
2501
+ user-select: none;
2502
+ -webkit-user-select: none;
2503
+ }
2504
+
2505
+ /* Hex cells area */
2506
+ .hexeditor-hex {
2507
+ display: flex;
2508
+ gap: 0;
2509
+ padding-right: 16px;
2510
+ }
2511
+
2512
+ .hexeditor-hex .hex-cell {
2513
+ width: 26px;
2514
+ text-align: center;
2515
+ font-size: 12px;
2516
+ cursor: text;
2517
+ color: #ddd;
2518
+ border: 1px solid transparent;
2519
+ padding: 0 1px;
2520
+ box-sizing: border-box;
2521
+ }
2522
+
2523
+ .hexeditor-hex .hex-cell:nth-child(8n) {
2524
+ margin-right: 6px;
2525
+ }
2526
+
2527
+ .hexeditor-hex .hex-cell.modified {
2528
+ color: #ff6b6b;
2529
+ font-weight: bold;
2530
+ }
2531
+
2532
+ .hexeditor-hex .hex-cell.selected {
2533
+ background-color: #264f78;
2534
+ border-color: #3a7cbf;
2535
+ }
2536
+
2537
+ .hexeditor-hex .hex-cell.search-match {
2538
+ background-color: #5a5a00;
2539
+ border-color: #8a8a00;
2540
+ }
2541
+
2542
+ .hexeditor-hex .hex-cell.search-current {
2543
+ background-color: #8a6a00;
2544
+ border-color: #bb9b00;
2545
+ }
2546
+
2547
+ .hexeditor-hex .hex-cell.editing {
2548
+ background-color: #1e3a5f;
2549
+ border-color: #4a90d9;
2550
+ outline: none;
2551
+ }
2552
+
2553
+ .hexeditor-hex .hex-cell.zero {
2554
+ color: #555;
2555
+ }
2556
+
2557
+ .hexeditor-hex .hex-cell.ff {
2558
+ color: #666;
2559
+ }
2560
+
2561
+ /* Separator between hex and ASCII */
2562
+ .hexeditor-sep {
2563
+ width: 2px;
2564
+ min-width: 2px;
2565
+ background-color: #444;
2566
+ margin: 0 4px;
2567
+ }
2568
+
2569
+ /* ASCII area */
2570
+ .hexeditor-ascii {
2571
+ display: flex;
2572
+ gap: 0;
2573
+ }
2574
+
2575
+ .hexeditor-ascii .ascii-cell {
2576
+ width: 9px;
2577
+ text-align: center;
2578
+ font-size: 12px;
2579
+ cursor: text;
2580
+ color: #b5cea8;
2581
+ border: 1px solid transparent;
2582
+ box-sizing: border-box;
2583
+ }
2584
+
2585
+ .hexeditor-ascii .ascii-cell.non-printable {
2586
+ color: #555;
2587
+ }
2588
+
2589
+ .hexeditor-ascii .ascii-cell.modified {
2590
+ color: #ff6b6b;
2591
+ font-weight: bold;
2592
+ }
2593
+
2594
+ .hexeditor-ascii .ascii-cell.selected {
2595
+ background-color: #264f78;
2596
+ border-color: #3a7cbf;
2597
+ }
2598
+
2599
+ .hexeditor-ascii .ascii-cell.search-match {
2600
+ background-color: #5a5a00;
2601
+ border-color: #8a8a00;
2602
+ }
2603
+
2604
+ .hexeditor-ascii .ascii-cell.search-current {
2605
+ background-color: #8a6a00;
2606
+ border-color: #bb9b00;
2607
+ }
2608
+
2609
+ .hexeditor-ascii .ascii-cell.editing {
2610
+ background-color: #1e3a5f;
2611
+ border-color: #4a90d9;
2612
+ outline: none;
2613
+ }
2614
+
2615
+ /* Progress overlay for loading */
2616
+ .hexeditor-progress-overlay {
2617
+ position: absolute;
2618
+ top: 0; left: 0; right: 0; bottom: 0;
2619
+ background-color: rgba(0,0,0,0.85);
2620
+ display: flex;
2621
+ flex-direction: column;
2622
+ align-items: center;
2623
+ justify-content: center;
2624
+ z-index: 10;
2625
+ }
2626
+
2627
+ .hexeditor-progress-overlay.hidden {
2628
+ display: none;
2629
+ }
2630
+
2631
+ .hexeditor-progress-overlay .progress-text {
2632
+ font-size: 16px;
2633
+ color: #ddd;
2634
+ margin-bottom: 16px;
2635
+ }
2636
+
2637
+ .hexeditor-progress-overlay .progress-bar-outer {
2638
+ width: 400px;
2639
+ max-width: 80%;
2640
+ height: 20px;
2641
+ background-color: #333;
2642
+ border-radius: 10px;
2643
+ overflow: hidden;
2644
+ }
2645
+
2646
+ .hexeditor-progress-overlay .progress-bar-inner {
2647
+ height: 100%;
2648
+ background-color: #71ae1e;
2649
+ width: 0%;
2650
+ transition: width 0.15s linear;
2651
+ border-radius: 10px;
2652
+ }
2653
+
2654
+ /* Goto address input */
2655
+ .hexeditor-goto {
2656
+ display: flex;
2657
+ align-items: center;
2658
+ gap: 6px;
2659
+ }
2660
+
2661
+ .hexeditor-goto input {
2662
+ width: 100px;
2663
+ padding: 3px 8px;
2664
+ font-size: 12px;
2665
+ font-family: inherit;
2666
+ background-color: #333;
2667
+ color: #ddd;
2668
+ border: 1px solid #555;
2669
+ border-radius: 3px;
2670
+ outline: none;
2671
+ }
2672
+
2673
+ .hexeditor-goto input:focus {
2674
+ border-color: #71ae1e;
2675
+ }
2676
+
2677
+ /* Responsive hex editor for narrow viewports */
2678
+ @media (max-width: 768px) {
2679
+ .hexeditor-container {
2680
+ font-size: 11px;
2681
+ }
2682
+
2683
+ .hexeditor-toolbar {
2684
+ padding: 4px 8px;
2685
+ gap: 4px;
2686
+ }
2687
+
2688
+ .hexeditor-toolbar h3 {
2689
+ font-size: 12px;
2690
+ }
2691
+
2692
+ .hexeditor-toolbar button {
2693
+ padding: 3px 8px;
2694
+ font-size: 11px;
2695
+ }
2696
+
2697
+ .hexeditor-search {
2698
+ flex-wrap: wrap;
2699
+ gap: 4px;
2700
+ padding: 4px 8px;
2701
+ }
2702
+
2703
+ .hexeditor-search input[type="text"] {
2704
+ width: 140px;
2705
+ font-size: 11px;
2706
+ }
2707
+
2708
+ .hexeditor-addr {
2709
+ width: 64px;
2710
+ min-width: 64px;
2711
+ padding-right: 6px;
2712
+ font-size: 11px;
2713
+ }
2714
+
2715
+ .hexeditor-hex .hex-cell {
2716
+ width: 20px;
2717
+ font-size: 11px;
2718
+ }
2719
+
2720
+ .hexeditor-hex .hex-cell:nth-child(8n) {
2721
+ margin-right: 3px;
2722
+ }
2723
+
2724
+ .hexeditor-ascii .ascii-cell {
2725
+ width: 7px;
2726
+ font-size: 11px;
2727
+ }
2728
+
2729
+ .hexeditor-sep {
2730
+ margin: 0 2px;
2731
+ }
2732
+
2733
+ .hexeditor-statusbar {
2734
+ gap: 8px;
2735
+ padding: 3px 8px;
2736
+ font-size: 10px;
2737
+ flex-wrap: wrap;
2738
+ }
2739
+
2740
+ .hexeditor-goto input {
2741
+ width: 70px;
2742
+ }
2743
+ }
2744
+
2745
+ /* ========== NVS Editor Container ========== */
2746
+ .nvseditor-container {
2747
+ position: fixed;
2748
+ top: 0;
2749
+ left: 0;
2750
+ right: 0;
2751
+ bottom: 0;
2752
+ z-index: 1001;
2753
+ background-color: #1c1c1c;
2754
+ display: flex;
2755
+ flex-direction: column;
2756
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
2757
+ color: #ddd;
2758
+ }
2759
+
2760
+ .nvseditor-container.hidden {
2761
+ display: none;
2762
+ }
2763
+
2764
+ /* Hide header and commands when NVS editor is active */
2765
+ body.nvseditor-active .header {
2766
+ display: none !important;
2767
+ }
2768
+ body.nvseditor-active #commands {
2769
+ display: none !important;
2770
+ }
2771
+ body.nvseditor-active #notSupported {
2772
+ display: none !important;
2773
+ }
2774
+ body.nvseditor-active .main {
2775
+ padding-top: 0 !important;
2776
+ overflow: hidden !important;
2777
+ }
2778
+
2779
+ /* NVS Editor Toolbar */
2780
+ .nvseditor-toolbar {
2781
+ display: flex;
2782
+ align-items: center;
2783
+ gap: 10px;
2784
+ padding: 8px 12px;
2785
+ background: #252525;
2786
+ border-bottom: 1px solid #444;
2787
+ flex-shrink: 0;
2788
+ flex-wrap: wrap;
2789
+ }
2790
+
2791
+ .nvseditor-toolbar h3 {
2792
+ margin: 0;
2793
+ font-size: 15px;
2794
+ color: #eee;
2795
+ white-space: nowrap;
2796
+ }
2797
+
2798
+ .nvseditor-toolbar .nvs-info {
2799
+ font-size: 11px;
2800
+ color: #888;
2801
+ white-space: nowrap;
2802
+ }
2803
+
2804
+ .nvseditor-toolbar .spacer {
2805
+ flex: 1;
2806
+ }
2807
+
2808
+ .nvseditor-toolbar button {
2809
+ padding: 4px 12px;
2810
+ border: 1px solid #555;
2811
+ border-radius: 3px;
2812
+ background: #333;
2813
+ color: #ddd;
2814
+ cursor: pointer;
2815
+ font-size: 12px;
2816
+ white-space: nowrap;
2817
+ }
2818
+
2819
+ .nvseditor-toolbar button:hover {
2820
+ background: #444;
2821
+ }
2822
+
2823
+ .nvseditor-toolbar button.primary {
2824
+ background: #1565c0;
2825
+ border-color: #1976d2;
2826
+ color: #fff;
2827
+ }
2828
+
2829
+ .nvseditor-toolbar button.primary:hover {
2830
+ background: #1976d2;
2831
+ }
2832
+
2833
+ .nvseditor-toolbar button:disabled {
2834
+ opacity: 0.4;
2835
+ cursor: default;
2836
+ }
2837
+
2838
+ .nvseditor-filter input {
2839
+ padding: 3px 8px;
2840
+ border: 1px solid #555;
2841
+ border-radius: 3px;
2842
+ background: #2a2a2a;
2843
+ color: #ddd;
2844
+ font-size: 12px;
2845
+ width: 200px;
2846
+ }
2847
+
2848
+ .nvseditor-filter input:focus {
2849
+ border-color: #1976d2;
2850
+ outline: none;
2851
+ }
2852
+
2853
+ /* NVS Editor Body */
2854
+ .nvseditor-body {
2855
+ flex: 1;
2856
+ overflow-y: auto;
2857
+ padding: 10px;
2858
+ position: relative;
2859
+ }
2860
+
2861
+ /* Progress overlay */
2862
+ .nvseditor-progress-overlay {
2863
+ position: absolute;
2864
+ top: 0;
2865
+ left: 0;
2866
+ right: 0;
2867
+ bottom: 0;
2868
+ display: flex;
2869
+ flex-direction: column;
2870
+ align-items: center;
2871
+ justify-content: center;
2872
+ background: rgba(28, 28, 28, 0.92);
2873
+ z-index: 10;
2874
+ }
2875
+
2876
+ .nvseditor-progress-overlay.hidden {
2877
+ display: none;
2878
+ }
2879
+
2880
+ .nvseditor-progress-overlay .progress-text {
2881
+ color: #ccc;
2882
+ margin-bottom: 12px;
2883
+ font-size: 14px;
2884
+ }
2885
+
2886
+ .nvseditor-progress-overlay .progress-bar-outer {
2887
+ width: 300px;
2888
+ height: 8px;
2889
+ background: #333;
2890
+ border-radius: 4px;
2891
+ overflow: hidden;
2892
+ }
2893
+
2894
+ .nvseditor-progress-overlay .progress-bar-inner {
2895
+ height: 100%;
2896
+ background: #1976d2;
2897
+ transition: width 0.15s;
2898
+ border-radius: 4px;
2899
+ }
2900
+
2901
+ /* Status bar */
2902
+ .nvseditor-statusbar {
2903
+ display: flex;
2904
+ gap: 16px;
2905
+ padding: 4px 12px;
2906
+ background: #252525;
2907
+ border-top: 1px solid #444;
2908
+ font-size: 11px;
2909
+ color: #888;
2910
+ flex-shrink: 0;
2911
+ }
2912
+
2913
+ /* NVS Page */
2914
+ .nvs-page {
2915
+ margin-bottom: 16px;
2916
+ border: 1px solid #3a3a3a;
2917
+ border-radius: 6px;
2918
+ overflow: hidden;
2919
+ }
2920
+
2921
+ .nvs-page-header {
2922
+ display: flex;
2923
+ align-items: center;
2924
+ gap: 16px;
2925
+ padding: 8px 12px;
2926
+ background: #2a2a2a;
2927
+ font-size: 12px;
2928
+ color: #bbb;
2929
+ border-bottom: 1px solid #3a3a3a;
2930
+ }
2931
+
2932
+ .nvs-page-header.state-active { border-left: 4px solid #43a047; }
2933
+ .nvs-page-header.state-full { border-left: 4px solid #ffa726; }
2934
+ .nvs-page-header.state-freeing { border-left: 4px solid #ef5350; }
2935
+ .nvs-page-header.state-other { border-left: 4px solid #666; }
2936
+
2937
+ .nvs-page-state {
2938
+ font-weight: bold;
2939
+ padding: 2px 8px;
2940
+ border-radius: 3px;
2941
+ font-size: 11px;
2942
+ text-transform: uppercase;
2943
+ }
2944
+
2945
+ .state-active .nvs-page-state { background: #1b5e20; color: #a5d6a7; }
2946
+ .state-full .nvs-page-state { background: #e65100; color: #ffcc80; }
2947
+ .state-freeing .nvs-page-state { background: #b71c1c; color: #ef9a9a; }
2948
+ .state-other .nvs-page-state { background: #424242; color: #999; }
2949
+
2950
+ /* NVS Namespace */
2951
+ .nvs-namespace {
2952
+ margin: 0;
2953
+ }
2954
+
2955
+ .nvs-namespace-header {
2956
+ display: flex;
2957
+ align-items: center;
2958
+ gap: 8px;
2959
+ padding: 6px 12px;
2960
+ background: #262626;
2961
+ border-bottom: 1px solid #333;
2962
+ font-size: 13px;
2963
+ }
2964
+
2965
+ .nvs-ns-icon {
2966
+ font-size: 14px;
2967
+ }
2968
+
2969
+ .nvs-ns-name {
2970
+ font-weight: 600;
2971
+ color: #90caf9;
2972
+ }
2973
+
2974
+ .nvs-ns-count {
2975
+ color: #777;
2976
+ font-size: 11px;
2977
+ }
2978
+
2979
+ /* NVS Table */
2980
+ .nvs-table {
2981
+ width: 100%;
2982
+ border-collapse: collapse;
2983
+ font-size: 12px;
2984
+ }
2985
+
2986
+ .nvs-table thead th {
2987
+ background: #222;
2988
+ color: #999;
2989
+ padding: 5px 8px;
2990
+ text-align: left;
2991
+ font-weight: 600;
2992
+ border-bottom: 1px solid #3a3a3a;
2993
+ position: sticky;
2994
+ top: 0;
2995
+ z-index: 1;
2996
+ }
2997
+
2998
+ .nvs-table tbody tr {
2999
+ border-bottom: 1px solid #2a2a2a;
3000
+ }
3001
+
3002
+ .nvs-table tbody tr:hover {
3003
+ background: #2a2a2a;
3004
+ }
3005
+
3006
+ .nvs-table td {
3007
+ padding: 4px 8px;
3008
+ vertical-align: middle;
3009
+ }
3010
+
3011
+ .nvs-key {
3012
+ font-weight: 500;
3013
+ color: #e0e0e0;
3014
+ max-width: 160px;
3015
+ overflow: hidden;
3016
+ text-overflow: ellipsis;
3017
+ white-space: nowrap;
3018
+ }
3019
+
3020
+ .nvs-type {
3021
+ color: #a5d6a7;
3022
+ white-space: nowrap;
3023
+ width: 80px;
3024
+ }
3025
+
3026
+ .nvs-value {
3027
+ color: #fff;
3028
+ max-width: 400px;
3029
+ overflow: hidden;
3030
+ text-overflow: ellipsis;
3031
+ white-space: nowrap;
3032
+ font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;
3033
+ font-size: 11px;
3034
+ }
3035
+
3036
+ .nvs-crc {
3037
+ width: 30px;
3038
+ text-align: center;
3039
+ }
3040
+
3041
+ .nvs-crc.crc-ok {
3042
+ color: #66bb6a;
3043
+ }
3044
+
3045
+ .nvs-crc.crc-bad {
3046
+ color: #ef5350;
3047
+ font-weight: bold;
3048
+ }
3049
+
3050
+ .nvs-offset {
3051
+ font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;
3052
+ font-size: 11px;
3053
+ color: #888;
3054
+ white-space: nowrap;
3055
+ }
3056
+
3057
+ .nvs-actions {
3058
+ white-space: nowrap;
3059
+ width: 70px;
3060
+ }
3061
+
3062
+ .nvs-actions button {
3063
+ padding: 2px 6px;
3064
+ margin-right: 2px;
3065
+ border: 1px solid #555;
3066
+ border-radius: 3px;
3067
+ background: #333;
3068
+ color: #ddd;
3069
+ cursor: pointer;
3070
+ font-size: 12px;
3071
+ }
3072
+
3073
+ .nvs-actions button:hover {
3074
+ background: #444;
3075
+ }
3076
+
3077
+ .nvs-btn-delete:hover {
3078
+ background: #c62828 !important;
3079
+ border-color: #e53935 !important;
3080
+ color: #fff !important;
3081
+ }
3082
+
3083
+ .nvs-btn-edit:hover {
3084
+ background: #1565c0 !important;
3085
+ border-color: #1976d2 !important;
3086
+ color: #fff !important;
3087
+ }
3088
+
3089
+ /* Empty state */
3090
+ .nvs-empty {
3091
+ text-align: center;
3092
+ padding: 60px 20px;
3093
+ color: #666;
3094
+ font-size: 16px;
3095
+ }
3096
+
3097
+ /* NVS content area */
3098
+ .nvseditor-content {
3099
+ min-height: 100%;
3100
+ }
3101
+
3102
+ /* ─── Responsive NVS Editor ─── */
3103
+ @media (max-width: 700px) {
3104
+ .nvseditor-toolbar {
3105
+ padding: 6px 8px;
3106
+ gap: 6px;
3107
+ }
3108
+
3109
+ .nvseditor-filter input {
3110
+ width: 140px;
3111
+ }
3112
+
3113
+ .nvs-value {
3114
+ max-width: 150px;
3115
+ }
3116
+
3117
+ .nvs-offset {
3118
+ display: none;
3119
+ }
3120
+ }