DFS_Shuo_Chen 1 месяц назад
Родитель
Сommit
5752195d36

+ 2 - 0
.gitignore

@@ -22,3 +22,5 @@ EasyTemplate.Blazor.Web/publish/
 tmptest/.vs/
 文档/~$重构时间评估.xlsx
 tmptestproject/.vs/
+build_log.txt
+build_output.txt

+ 1063 - 0
EasyTemplate.Blazor.Web/Components/Pages/Dashboard/Home2.razor

@@ -0,0 +1,1063 @@
+@page "/home2"
+@rendermode InteractiveServer
+@attribute [ReuseTabsPage(Title = "主页 2", Pin = true, Closable = false, Order = 1)]
+@using EasyTemplate.Tool.Util
+@using EasyTemplate.Service
+@using System.Timers
+
+<div class="main-container">
+    <!-- 1. Header Section -->
+    @* <header class="header-section">
+
+        <!-- Global System Status Summary -->
+        <div class="global-status">
+            <div class="status-item status-normal">
+                <span class="status-dot animate-ping"></span>
+                <span class="status-text">正常:<span class="status-count">@normalCount</span></span>
+            </div>
+            <div class="status-divider"></div>
+            <div class="status-item status-warning">
+                <span class="status-dot"></span>
+                <span class="status-text">预警:<span class="status-count">@warningCount</span></span>
+            </div>
+            <div class="status-divider"></div>
+            <div class="status-item status-alarm">
+                <span class="status-dot animate-pulse"></span>
+                <span class="status-text">报警:<span class="status-count">@alarmCount</span></span>
+            </div>
+        </div>
+
+    </header> *@
+
+
+    <!-- 2. Main Nozzle Grid Section -->
+    <main class="main-content">
+        <div class="nozzle-grid">
+            @if (items.Any())
+            {
+                int i = 0;
+
+                foreach (var item in items)
+                {
+                    i++;
+                    int num_page = ShowNozzleItem_Row * ShowNozzle_Col;
+
+                    if (i >= (currentPage-1) * num_page+1 && i <= currentPage * num_page)
+                    {
+                        <NozzleCard NozNo="@item.Value.noz.ToString()"
+                                    OilName="@item.Value.oil"
+                                    VLR="@item.Value.VLR"
+                                    warnstate="@item.Value.warnstate"
+                                    nozzlestate="@item.Value.nozzlestate" />
+                    }
+                }
+
+               @*  @foreach (var item in items)
+                {
+                    <NozzleCard 
+                        NozNo="@item.Value.noz.ToString()"
+                        OilName="@item.Value.oil"
+                        VLR="@item.Value.VLR"
+                        warnstate="@item.Value.warnstate"
+                        nozzlestate="@item.Value.nozzlestate" />
+                } *@
+            }
+            else
+            {
+                @for (int i = 1; i <= 32; i++)
+                {
+                    var num = i.ToString("D2");
+                    var fuelTypes = new[] { "92#", "95#", "98#", "0#" };
+                    var fuel = fuelTypes[i % fuelTypes.Length];
+                    var state = i switch
+                    {
+                        5 => 1, // Warning
+                        6 => 2, // Alarm
+                        4 or 15 or 22 => 3, // Offline
+                        _ => i % 3 == 0 ? 0 : (i % 2 == 0 ? -1 : 0) // Normal or Idle
+                    };
+                    
+                    <NozzleCard 
+                        NozNo="@(num)"
+                        OilName="@(fuel)"
+                        VLR="@(state == 0 || state == 1 ? (1.0 + (i % 10) * 0.01).ToString("F2") : "--")"
+                        warnstate="@(state)"
+                        nozzlestate="@(state == 0 || state == 1 ? 1 : 0)" />
+                }
+            }
+        </div>
+	</main>
+
+	<!-- 3. Top Status Bar (Key Metrics & Remote Platforms) -->
+	<section class="top-status-bar">
+		<!-- Key Metrics (Left) -->
+		<div class="key-metrics">
+			<!-- Tank Pressure -->
+			<div class="metric-card metric-normal">
+				<div class="metric-corner"></div>
+				<div class="metric-icon">
+					<span>📊</span>
+				</div>
+				<div class="metric-content">
+					<div class="metric-label">油罐压力</div>
+					<div class="metric-value">
+						<span>@tankPressure.Value</span>
+						<span class="metric-unit">kPa</span>
+					</div>
+				</div>
+				<div class="metric-status">
+					<span class="status-icon">✓</span>
+					<span class="status-label">正常</span>
+				</div>
+			</div>
+
+			<!-- Vapor Concentration -->
+			<div class="metric-card metric-warning">
+				<div class="metric-corner"></div>
+				<div class="metric-icon">
+					<span>💧</span>
+				</div>
+				<div class="metric-content">
+					<div class="metric-label">油气浓度</div>
+					<div class="metric-value">
+						<span>@vaporConcentration.Value</span>
+						<span class="metric-unit">g/m³</span>
+					</div>
+				</div>
+				<div class="metric-status">
+					<span class="status-icon animate-pulse">⚠</span>
+					<span class="status-label">偏高</span>
+				</div>
+			</div>
+
+			<!-- Pipeline Pressure -->
+			<div class="metric-card metric-normal">
+				<div class="metric-corner"></div>
+				<div class="metric-icon">
+					<span>🔧</span>
+				</div>
+				<div class="metric-content">
+					<div class="metric-label">管线压力</div>
+					<div class="metric-value">
+						<span>@pipelinePressure.Value</span>
+						<span class="metric-unit">kPa</span>
+					</div>
+				</div>
+				<div class="metric-status">
+					<span class="status-icon">✓</span>
+					<span class="status-label">正常</span>
+				</div>
+			</div>
+
+			<!-- Tank Temperature -->
+			<div class="metric-card metric-alarm">
+				<div class="metric-corner"></div>
+				<div class="metric-icon">
+					<span>🌡</span>
+				</div>
+				<div class="metric-content">
+					<div class="metric-label">油罐温度</div>
+					<div class="metric-value">
+						<span>@tankTemperature.Value</span>
+						<span class="metric-unit">°C</span>
+					</div>
+				</div>
+				<div class="metric-status">
+					<span class="status-icon animate-bounce">✕</span>
+					<span class="status-label">超限</span>
+				</div>
+			</div>
+		</div>
+
+		<!-- Remote Platform Status (Right) -->
+		<div class="remote-platforms">
+			<div class="platform-title">
+				<span>☁️</span>
+				<span>数据远传状态</span>
+			</div>
+			<div class="platform-grid">
+				<div class="platform-item">
+					<span class="platform-name">市环保局</span>
+					<div class="platform-status status-uploading">
+						<span class="sync-icon animate-spin">🔄</span>
+						<span>上传中</span>
+					</div>
+				</div>
+				<div class="platform-item">
+					<span class="platform-name">省质监局</span>
+					<div class="platform-status status-synced">
+						<span class="status-dot-small"></span>
+						<span>已同步</span>
+					</div>
+				</div>
+				<div class="platform-item">
+					<span class="platform-name">集团总部</span>
+					<div class="platform-status status-uploading">
+						<span class="sync-icon animate-spin">🔄</span>
+						<span>上传中</span>
+					</div>
+				</div>
+				<div class="platform-item platform-delayed">
+					<span class="platform-name">应急管理</span>
+					<div class="platform-status status-delayed">
+						<span class="status-dot-small animate-pulse"></span>
+						<span>网络延迟</span>
+					</div>
+				</div>
+			</div>
+		</div>
+	</section>
+
+    <!-- 4. Pagination Control (Fixed Bottom) -->
+    <footer class="pagination-footer">
+        <!-- Legend -->
+        <div class="legend">
+            <span class="legend-title">状态图例:</span>
+            <div class="legend-item">
+                <span class="legend-dot legend-normal"></span>
+                <span class="legend-text">正常 (加油/空闲)</span>
+            </div>
+            <div class="legend-item">
+                <span class="legend-dot legend-offline"></span>
+                <span class="legend-text">离线</span>
+            </div>
+            <div class="legend-item">
+                <span class="legend-dot legend-warning"></span>
+                <span class="legend-text">预警</span>
+            </div>
+            <div class="legend-item">
+                <span class="legend-dot legend-alarm"></span>
+                <span class="legend-text">报警</span>
+            </div>
+        </div>
+
+        <!-- Pagination Center -->
+        <div class="pagination-center">
+            <span class="pagination-info">
+                第 <span class="page-number">@currentPage</span> 页 / 共 @totalPages 页 (@items.Count 条)
+            </span>
+            <div class="pagination-buttons">
+                <button class="page-btn" disabled="@(currentPage <= 1)" @onclick="PreviousPage">
+                    ← 上一页
+                </button>
+                
+                @for (int i = 1; i <= totalPages; i++)
+                {
+                    var hasWarning = i == 2;
+                    var hasAlarm = i == 1;
+                    var isAllNormal = i == 3;
+                    
+                    <button class="page-btn @(i == currentPage ? "active" : "") @(hasAlarm ? "btn-alarm" : "") @(hasWarning && !hasAlarm ? "btn-warning" : "") @(isAllNormal && !hasAlarm && !hasWarning ? "btn-normal" : "")"
+                            @onclick="() => GoToPage(i)">
+                        @i
+                        @if (hasWarning && !hasAlarm)
+                        {
+                            <span class="page-indicator"></span>
+                        }
+                    </button>
+                }
+                
+                <button class="page-btn" disabled="@(currentPage >= totalPages)" @onclick="NextPage">
+                    下一页 →
+                </button>
+            </div>
+        </div>
+
+        <!-- Quick Jump -->
+        <div class="quick-jump">
+            <span class="jump-label">跳转至</span>
+            <select class="jump-select" @onchange="OnQuickJump">
+                @for (int i = 1; i <= totalPages; i++)
+                {
+                    <option value="@i">@i</option>
+                }
+            </select>
+            <span class="jump-label">页</span>
+        </div>
+    </footer>
+</div>
+
+@code {
+    private Dictionary<int, NozzleState> items = new Dictionary<int, NozzleState>();
+    
+    private const int ShowNozzleItem_Row = 8; // 每行显示的枪数
+    private const int ShowNozzle_Col = 4; // 每页显示的行数
+    private const int ItemsPerPage = ShowNozzleItem_Row * ShowNozzle_Col;
+
+    private int currentPage = 1;
+    private int totalPages = 1;
+
+    // Status counts
+    private int normalCount = 0;
+    private int warningCount = 0;
+    private int alarmCount = 0;
+
+    // Current time
+    private DateTime currentTime = DateTime.Now;
+
+    // Sensor data
+    private SensorData tankPressure = new() { Value = "1.25", Status = 0 };
+    private SensorData vaporConcentration = new() { Value = "18.5", Status = 1 };
+    private SensorData pipelinePressure = new() { Value = "3.80", Status = 0 };
+    private SensorData tankTemperature = new() { Value = "42.5", Status = 2 };
+
+    private Timer? timer;
+
+    protected override async Task OnInitializedAsync()
+    {
+        await RefreshData();
+        StartTimer();
+    }
+
+    private void StartTimer()
+    {
+        timer = new Timer(1000); // 1 秒间隔
+        timer.Elapsed += async (sender, e) => await RefreshData();
+        timer.Start();
+    }
+
+    private async Task RefreshData()
+    {
+        var nozzlestates = GlobalTool.g_mNozzleState;
+        
+        try
+        {
+            await InvokeAsync(() =>
+            {
+                items = nozzlestates;
+                currentTime = DateTime.Now;
+                
+                // Calculate status counts
+                normalCount = items.Count(x => x.Value.warnstate == 0 || x.Value.warnstate == -1);
+                warningCount = items.Count(x => x.Value.warnstate == 1);
+                alarmCount = items.Count(x => x.Value.warnstate == 2);
+                
+                // Update sensor data from real data if available
+                UpdateSensorData();
+                
+                // Calculate total pages
+                totalPages = Math.Max(1, (int)Math.Ceiling(items.Count / (double)ItemsPerPage));
+                
+                StateHasChanged();
+            });
+        }
+        catch (Exception ex)
+        {
+            Console.WriteLine($"数据刷新失败:{ex.Message}");
+        }
+    }
+
+    private void UpdateSensorData()
+    {
+        // TODO: Replace with actual sensor data from database or service
+        // For now, using mock data
+    }
+
+    private void PreviousPage()
+    {
+        if (currentPage > 1)
+        {
+            currentPage--;
+            StateHasChanged();
+        }
+    }
+
+    private void NextPage()
+    {
+        if (currentPage < totalPages)
+        {
+            currentPage++;
+            StateHasChanged();
+        }
+    }
+
+    private void GoToPage(int page)
+    {
+        if (page >= 1 && page <= totalPages)
+        {
+            currentPage = page;
+            StateHasChanged();
+        }
+    }
+
+    private void OnQuickJump(ChangeEventArgs e)
+    {
+        if (int.TryParse(e.Value?.ToString(), out int page))
+        {
+            GoToPage(page);
+        }
+    }
+
+    public void Dispose()
+    {
+        timer?.Stop();
+        timer?.Dispose();
+    }
+
+    public class SensorData
+    {
+        public string Value { get; set; } = "";
+        public int Status { get; set; }
+    }
+}
+
+<style>
+/* Main Container */
+.main-container {
+    display: flex;
+    flex-direction: column;
+    height: 100vh;
+    background-color: #f8fafc;
+    color: #0f172a;
+    font-family: 'Satoshi', Arial, sans-serif;
+    overflow: hidden;
+}
+
+/* Header Section */
+.header-section {
+    height: 64px;
+    background-color: rgba(255, 255, 255, 0.9);
+    backdrop-filter: blur(10px);
+    border-bottom: 1px solid #e2e8f0;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    padding: 0 24px;
+    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
+    z-index: 20;
+    flex-shrink: 0;
+}
+
+.header-left {
+    display: flex;
+    align-items: center;
+    gap: 16px;
+}
+
+.logo-icon {
+    width: 40px;
+    height: 40px;
+    border-radius: 8px;
+    background: linear-gradient(135deg, #10b981, #059669);
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    box-shadow: 0 4px 6px rgba(16, 185, 129, 0.2);
+}
+
+.icon-leaf {
+    font-size: 24px;
+    color: white;
+}
+
+.app-title {
+    font-size: 20px;
+    font-weight: bold;
+    letter-spacing: 0.5px;
+    color: #1e293b;
+}
+
+/* Global Status */
+.global-status {
+    display: flex;
+    align-items: center;
+    gap: 24px;
+    background-color: #f8fafc;
+    padding: 8px 20px;
+    border-radius: 9999px;
+    border: 1px solid #e2e8f0;
+}
+
+.status-item {
+    display: flex;
+    align-items: center;
+    gap: 8px;
+}
+
+.status-dot {
+    width: 12px;
+    height: 12px;
+    border-radius: 50%;
+    position: relative;
+}
+
+.status-normal .status-dot {
+    background-color: #10b981;
+}
+
+.status-warning .status-dot {
+    background-color: #f59e0b;
+}
+
+.status-alarm .status-dot {
+    background-color: #ef4444;
+}
+
+.animate-ping {
+    animation: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;
+}
+
+@@keyframes ping {
+    75%, 100% {
+        transform: scale(2);
+        opacity: 0;
+    }
+}
+
+.animate-pulse {
+    animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
+}
+
+@@keyframes pulse {
+    0%, 100% {
+        opacity: 1;
+    }
+    50% {
+        opacity: 0.5;
+    }
+}
+
+.status-text {
+    font-size: 14px;
+    color: #475569;
+}
+
+.status-count {
+    font-family: monospace;
+    font-weight: bold;
+}
+
+.status-normal .status-count {
+    color: #10b981;
+}
+
+.status-warning .status-count {
+    color: #f59e0b;
+}
+
+.status-alarm .status-count {
+    color: #ef4444;
+}
+
+.status-divider {
+    width: 1px;
+    height: 32px;
+    background-color: #cbd5e1;
+}
+
+/* Header Right */
+.header-right {
+    display: flex;
+    align-items: center;
+    gap: 24px;
+}
+
+.clock-display {
+    display: flex;
+    flex-direction: column;
+    align-items: flex-end;
+}
+
+.clock-time {
+    font-family: monospace;
+    font-size: 20px;
+    font-weight: bold;
+    color: #1e293b;
+}
+
+.clock-date {
+    font-size: 12px;
+    color: #64748b;
+    font-family: monospace;
+}
+
+.user-button {
+    width: 40px;
+    height: 40px;
+    border-radius: 50%;
+    background-color: #f8fafc;
+    border: 1px solid #e2e8f0;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    cursor: pointer;
+    transition: background-color 0.2s;
+}
+
+.user-button:hover {
+    background-color: #f1f5f9;
+}
+
+/* Top Status Bar */
+.top-status-bar {
+    display: grid;
+    grid-template-columns: 2fr 1fr;
+    gap: 16px;
+    padding: 16px 24px;
+    flex-shrink: 0;
+}
+
+/* Key Metrics */
+.key-metrics {
+    display: grid;
+    grid-template-columns: repeat(4, 1fr);
+    gap: 16px;
+}
+
+.metric-card {
+    background-color: white;
+    border-radius: 12px;
+    padding: 16px;
+    display: flex;
+    align-items: center;
+    gap: 16px;
+    position: relative;
+    overflow: hidden;
+    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
+}
+
+.metric-normal {
+    border: 1px solid #e2e8f0;
+}
+
+.metric-warning {
+    border: 1px solid rgba(245, 158, 11, 0.3);
+}
+
+.metric-alarm {
+    border: 2px solid rgba(239, 68, 68, 0.4);
+    box-shadow: 0 0 16px rgba(239, 68, 68, 0.2);
+}
+
+.metric-corner {
+    position: absolute;
+    top: 0;
+    right: 0;
+    width: 64px;
+    height: 64px;
+    background-color: rgba(16, 185, 129, 0.1);
+    border-radius: 0 0 0 64px;
+}
+
+.metric-warning .metric-corner {
+    background-color: rgba(245, 158, 11, 0.1);
+}
+
+.metric-alarm .metric-corner {
+    background-color: rgba(239, 68, 68, 0.1);
+}
+
+.metric-icon {
+    width: 48px;
+    height: 48px;
+    border-radius: 50%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    flex-shrink: 0;
+    font-size: 24px;
+}
+
+.metric-normal .metric-icon {
+    background-color: rgba(16, 185, 129, 0.1);
+    border: 1px solid rgba(16, 185, 129, 0.2);
+}
+
+.metric-warning .metric-icon {
+    background-color: rgba(245, 158, 11, 0.1);
+    border: 1px solid rgba(245, 158, 11, 0.3);
+}
+
+.metric-alarm .metric-icon {
+    background-color: rgba(239, 68, 68, 0.1);
+    border: 1px solid rgba(239, 68, 68, 0.3);
+}
+
+.metric-content {
+    flex: 1;
+}
+
+.metric-label {
+    font-size: 12px;
+    color: #64748b;
+    margin-bottom: 4px;
+}
+
+.metric-value {
+    display: flex;
+    align-items: baseline;
+    gap: 4px;
+}
+
+.metric-value span:first-child {
+    font-size: 24px;
+    font-family: monospace;
+    font-weight: bold;
+    color: #1e293b;
+}
+
+.metric-warning .metric-value span:first-child {
+    color: #f59e0b;
+}
+
+.metric-alarm .metric-value span:first-child {
+    color: #ef4444;
+}
+
+.metric-unit {
+    font-size: 12px;
+    color: #64748b;
+    font-family: monospace;
+}
+
+.metric-status {
+    display: flex;
+    flex-direction: column;
+    align-items: flex-end;
+}
+
+.status-icon {
+    font-size: 16px;
+}
+
+.metric-normal .status-icon {
+    color: #10b981;
+}
+
+.metric-warning .status-icon {
+    color: #f59e0b;
+}
+
+.metric-alarm .status-icon {
+    color: #ef4444;
+}
+
+.status-label {
+    font-size: 10px;
+    margin-top: 4px;
+}
+
+.metric-normal .status-label {
+    color: #10b981;
+}
+
+.metric-warning .status-label {
+    color: #f59e0b;
+}
+
+.metric-alarm .status-label {
+    color: #ef4444;
+    font-weight: bold;
+}
+
+.animate-bounce {
+    animation: bounce 1s infinite;
+}
+
+@@keyframes bounce {
+    0%, 100% {
+        transform: translateY(-25%);
+        animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
+    }
+    50% {
+        transform: translateY(0);
+        animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
+    }
+}
+
+.animate-spin {
+    animation: spin 2s linear infinite;
+}
+
+@@keyframes spin {
+    from {
+        transform: rotate(0deg);
+    }
+    to {
+        transform: rotate(360deg);
+    }
+}
+
+/* Remote Platforms */
+.remote-platforms {
+    background-color: white;
+    border-radius: 12px;
+    border: 1px solid #e2e8f0;
+    padding: 16px;
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
+}
+
+.platform-title {
+    font-size: 14px;
+    font-weight: medium;
+    color: #334155;
+    display: flex;
+    align-items: center;
+    gap: 8px;
+    margin-bottom: 8px;
+}
+
+.platform-grid {
+    display: grid;
+    grid-template-columns: repeat(2, 1fr);
+    gap: 8px;
+}
+
+.platform-item {
+    background-color: #f8fafc;
+    border: 1px solid #f1f5f9;
+    border-radius: 6px;
+    padding: 8px 12px;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+}
+
+.platform-delayed {
+    background-color: rgba(251, 146, 60, 0.05);
+    border-color: rgba(245, 158, 11, 0.3);
+}
+
+.platform-name {
+    font-size: 12px;
+    color: #475569;
+}
+
+.platform-status {
+    display: flex;
+    align-items: center;
+    gap: 6px;
+    font-size: 10px;
+}
+
+.status-dot-small {
+    width: 8px;
+    height: 8px;
+    border-radius: 50%;
+    background-color: #10b981;
+}
+
+.status-uploading {
+    color: #10b981;
+}
+
+.status-synced {
+    color: #64748b;
+}
+
+.status-delayed {
+    color: #f59e0b;
+}
+
+.sync-icon {
+    font-size: 12px;
+}
+
+/* Main Content */
+.main-content {
+    flex: 1;
+    overflow-y: hidden;
+    padding: 0 24px 192px;
+}
+
+.nozzle-grid {
+    display: grid;
+    grid-template-columns: repeat(8, 1fr);
+    gap: 4px;
+}
+
+/* Pagination Footer */
+.pagination-footer {
+    position: fixed;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    height: 56px;
+    background-color: rgba(255, 255, 255, 0.95);
+    backdrop-filter: blur(10px);
+    border-top: 1px solid #e2e8f0;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    padding: 0 24px;
+    z-index: 40;
+    box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.02);
+}
+
+.legend {
+    display: flex;
+    align-items: center;
+    gap: 16px;
+    font-size: 12px;
+}
+
+.legend-title {
+    color: #64748b;
+}
+
+.legend-item {
+    display: flex;
+    align-items: center;
+    gap: 6px;
+}
+
+.legend-dot {
+    width: 10px;
+    height: 10px;
+    border-radius: 50%;
+}
+
+.legend-normal {
+    background-color: #10b981;
+    box-shadow: 0 0 8px rgba(16, 185, 129, 0.3);
+}
+
+.legend-offline {
+    background-color: #cbd5e1;
+    border: 1px solid #94a3b8;
+}
+
+.legend-warning {
+    background-color: #f59e0b;
+    box-shadow: 0 0 8px rgba(245, 158, 11, 0.4);
+}
+
+.legend-alarm {
+    background-color: #ef4444;
+    box-shadow: 0 0 10px rgba(239, 68, 68, 0.4);
+}
+
+.legend-text {
+    color: #475569;
+}
+
+.pagination-center {
+    display: flex;
+    align-items: center;
+    gap: 24px;
+}
+
+.pagination-info {
+    font-size: 14px;
+    color: #64748b;
+}
+
+.page-number {
+    color: #1e293b;
+    font-weight: bold;
+}
+
+.pagination-buttons {
+    display: flex;
+    align-items: center;
+    gap: 8px;
+}
+
+.page-btn {
+    min-width: 28px;
+    height: 28px;
+    border-radius: 6px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    font-size: 13px;
+    font-weight: bold;
+    cursor: pointer;
+    transition: all 0.2s;
+    border: 1px solid transparent;
+    position: relative;
+}
+
+.page-btn:disabled {
+    opacity: 0.5;
+    cursor: not-allowed;
+}
+
+.page-btn:not(:disabled):hover {
+    transform: translateY(-1px);
+}
+
+.page-btn.active {
+    background-color: #ef4444;
+    color: white;
+    box-shadow: 0 2px 4px rgba(239, 68, 68, 0.3);
+}
+
+.btn-warning {
+    background-color: #fef3c7;
+    color: #f59e0b;
+    border-color: rgba(245, 158, 11, 0.3);
+}
+
+.btn-warning:hover:not(:disabled) {
+    background-color: #fde68a;
+}
+
+.btn-normal {
+    background-color: #d1fae5;
+    color: #059669;
+    border-color: rgba(16, 185, 129, 0.2);
+}
+
+.btn-normal:hover:not(:disabled) {
+    background-color: #a7f3d0;
+}
+
+.page-indicator {
+    position: absolute;
+    top: -4px;
+    right: -4px;
+    width: 8px;
+    height: 8px;
+    background-color: #f59e0b;
+    border-radius: 50%;
+}
+
+.quick-jump {
+    display: flex;
+    align-items: center;
+    gap: 8px;
+    font-size: 14px;
+}
+
+.jump-label {
+    color: #64748b;
+}
+
+.jump-select {
+    background-color: white;
+    border: 1px solid #cbd5e1;
+    border-radius: 6px;
+    padding: 4px 8px;
+    font-size: 13px;
+    outline: none;
+    cursor: pointer;
+}
+
+.jump-select:focus {
+    border-color: #10b981;
+    box-shadow: 0 0 0 2px rgba(16, 185, 129, 0.1);
+}
+
+/* Scrollbar */
+::-webkit-scrollbar {
+    width: 6px;
+    height: 6px;
+}
+
+::-webkit-scrollbar-track {
+    background: #f1f5f9;
+}
+
+::-webkit-scrollbar-thumb {
+    background: #cbd5e1;
+    border-radius: 3px;
+}
+
+::-webkit-scrollbar-thumb:hover {
+    background: #94a3b8;
+}
+</style>

+ 363 - 0
EasyTemplate.Blazor.Web/Components/Pages/Dashboard/NozzleCard.razor

@@ -0,0 +1,363 @@
+@using EasyTemplate.Service
+
+<article class="nozzle-card @cardClass">
+    <div class="nozzle-header">
+        <span class="nozzle-number">@NozNo#</span>
+        <span class="oil-type">@OilName</span>
+    </div>
+    
+    <div class="nozzle-body">
+        <div class="icon-container @iconContainerClass">
+            @if (showFlowAnimation)
+            {
+                <div class="flow-indicator">
+                    <span class="flow-chevron">⌃</span>
+                    <span class="flow-chevron">⌃</span>
+                </div>
+            }
+            
+            @if (hasAlarmDot)
+            {
+                <div class="alarm-dot"></div>
+            }
+            
+            <span class="fuel-icon">⛽</span>
+        </div>
+    </div>
+    
+    <div class="nozzle-footer">
+        <div class="air-liquid-ratio">
+            <span class="ratio-label">气液比</span>
+            <span class="ratio-value @ratioValueClass">@VLR</span>
+        </div>
+        
+        @if (!string.IsNullOrEmpty(statusText))
+        {
+            <span class="status-badge @statusBadgeClass">@statusText</span>
+        }
+    </div>
+</article>
+
+@code {
+    [Parameter] public string NozNo { get; set; } = "";
+    [Parameter] public string OilName { get; set; } = "";
+    [Parameter] public string VLR { get; set; } = "";
+    [Parameter] public int warnstate { get; set; }
+    [Parameter] public int nozzlestate { get; set; }
+
+    private string cardClass => warnstate switch
+    {
+        1 => "warning",
+        2 => "alarm",
+        3 => "offline",
+        _ => "normal"
+    };
+
+    private string iconContainerClass => warnstate switch
+    {
+        1 => "icon-warning",
+        2 => "icon-alarm",
+        3 => "icon-offline",
+        _ when nozzlestate == GlobalTool.NozzleState_Filling => "icon-filling",
+        _ => "icon-normal"
+    };
+
+    private bool showFlowAnimation => nozzlestate == GlobalTool.NozzleState_Filling && (warnstate == 0 || warnstate == 1);
+    
+    private bool hasAlarmDot => warnstate == 2;
+    
+    private string statusText => nozzlestate switch
+    {
+        GlobalTool.NozzleState_Filling when warnstate != 2 => "加油中",
+        GlobalTool.NozzleState_Idle => "空闲",
+        GlobalTool.NozzleState_Offline => "离线",
+        _ => ""
+    };
+
+    private string statusBadgeClass => warnstate switch
+    {
+        1 => "badge-warning",
+        2 => "badge-alarm",
+        3 => "badge-offline",
+        _ when nozzlestate == GlobalTool.NozzleState_Filling => "badge-filling",
+        _ => "badge-idle"
+    };
+
+    private string ratioValueClass => warnstate switch
+    {
+        1 => "text-warning",
+        2 => "text-alarm",
+        3 => "text-offline",
+        _ => "text-normal"
+    };
+}
+
+<style>
+.nozzle-card {
+    background-color: white;
+    border: 1px solid #e2e8f0;
+    border-radius: 8px;
+    padding: 8px;
+    display: flex;
+    flex-direction: column;
+    gap: 4px;
+    transition: all 0.3s ease;
+    position: relative;
+    overflow: hidden;
+}
+
+.nozzle-card:hover {
+    transform: translateY(-2px);
+    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
+}
+
+.nozzle-card.normal {
+    border-color: #10b981;
+}
+
+.nozzle-card.warning {
+    border: 2px solid #f59e0b;
+    background-color: rgba(251, 146, 60, 0.03);
+}
+
+.nozzle-card.alarm {
+    border: 2px solid #ef4444;
+    background-color: rgba(239, 68, 68, 0.03);
+    box-shadow: 0 0 16px rgba(239, 68, 68, 0.2);
+}
+
+.nozzle-card.offline {
+    border-color: #cbd5e1;
+    opacity: 0.75;
+}
+
+.nozzle-header {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+}
+
+.nozzle-number {
+    font-size: 14px;
+    font-family: monospace;
+    font-weight: bold;
+    color: #1e293b;
+}
+
+.oil-type {
+    font-size: 10px;
+    padding: 2px 6px;
+    border-radius: 4px;
+    background-color: #f1f5f9;
+    color: #475569;
+    border: 1px solid #e2e8f0;
+}
+
+.nozzle-card.warning .oil-type {
+    background-color: #fef3c7;
+    color: #f59e0b;
+    border-color: #fcd34d;
+}
+
+.nozzle-card.alarm .oil-type {
+    background-color: #fee2e2;
+    color: #ef4444;
+    border-color: #fca5a5;
+}
+
+.nozzle-card.offline .oil-type {
+    background-color: #f1f5f9;
+    color: #94a3b8;
+    border-color: #cbd5e1;
+}
+
+.nozzle-body {
+    flex: 1;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    padding: 6px 0;
+}
+
+.icon-container {
+    position: relative;
+    width: 48px;
+    height: 48px;
+    border-radius: 50%;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    font-size: 24px;
+    border-width: 2px;
+    border-style: solid;
+}
+
+.icon-normal {
+    background-color: #f8fafc;
+    border-color: #10b981;
+    color: #10b981;
+}
+
+.icon-filling {
+    background-color: rgba(16, 185, 129, 0.1);
+    border-color: #10b981;
+    color: #10b981;
+    box-shadow: 0 0 12px rgba(16, 185, 129, 0.3);
+}
+
+.icon-warning {
+    background-color: rgba(245, 158, 11, 0.1);
+    border-color: #f59e0b;
+    color: #f59e0b;
+    box-shadow: 0 0 12px rgba(245, 158, 11, 0.3);
+}
+
+.icon-alarm {
+    background-color: rgba(239, 68, 68, 0.1);
+    border-color: #ef4444;
+    color: #ef4444;
+    box-shadow: 0 0 16px rgba(239, 68, 68, 0.4);
+}
+
+.icon-offline {
+    background-color: #f8fafc;
+    border-color: #cbd5e1;
+    color: #94a3b8;
+}
+
+.flow-indicator {
+    position: absolute;
+    right: -8px;
+    top: 50%;
+    transform: translateY(-50%);
+    display: flex;
+    flex-direction: column;
+    gap: 2px;
+}
+
+.flow-chevron {
+    font-size: 8px;
+    color: #10b981;
+    animation: flowUp 1s linear infinite;
+}
+
+.flow-chevron:nth-child(2) {
+    animation-delay: 0.3s;
+}
+
+@@keyframes flowUp {
+    0% {
+        transform: translateY(8px);
+        opacity: 0;
+    }
+    50% {
+        opacity: 1;
+    }
+    100% {
+        transform: translateY(-8px);
+        opacity: 0;
+    }
+}
+
+.alarm-dot {
+    position: absolute;
+    top: -4px;
+    right: -4px;
+    width: 12px;
+    height: 12px;
+    background-color: #ef4444;
+    border-radius: 50%;
+    animation: bounce 1s infinite;
+    box-shadow: 0 2px 4px rgba(239, 68, 68, 0.4);
+}
+
+@@keyframes bounce {
+    0%, 100% {
+        transform: translateY(-25%);
+    }
+    50% {
+        transform: translateY(0);
+    }
+}
+
+.fuel-icon {
+    z-index: 1;
+}
+
+.nozzle-footer {
+    display: flex;
+    justify-content: space-between;
+    align-items: flex-end;
+    height: 20px;
+    margin-top: 4px;
+}
+
+.air-liquid-ratio {
+    display: flex;
+    flex-direction: column;
+    line-height: 1.2;
+}
+
+.ratio-label {
+    font-size: 9px;
+    color: #64748b;
+}
+
+.ratio-value {
+    font-size: 12px;
+    font-family: monospace;
+    font-weight: bold;
+}
+
+.text-normal {
+    color: #10b981;
+}
+
+.text-warning {
+    color: #f59e0b;
+}
+
+.text-alarm {
+    color: #ef4444;
+}
+
+.text-offline {
+    color: #94a3b8;
+}
+
+.status-badge {
+    font-size: 9px;
+    padding: 2px 6px;
+    border-radius: 4px;
+}
+
+.badge-filling {
+    background-color: rgba(16, 185, 129, 0.1);
+    color: #10b981;
+    border: 1px solid rgba(16, 185, 129, 0.2);
+}
+
+.badge-idle {
+    background-color: #f1f5f9;
+    color: #64748b;
+    border: 1px solid #e2e8f0;
+}
+
+.badge-warning {
+    background-color: rgba(245, 158, 11, 0.1);
+    color: #f59e0b;
+    border: 1px solid rgba(245, 158, 11, 0.3);
+}
+
+.badge-alarm {
+    background-color: rgba(239, 68, 68, 0.1);
+    color: #ef4444;
+    border: 1px solid rgba(239, 68, 68, 0.3);
+}
+
+.badge-offline {
+    background-color: #f1f5f9;
+    color: #94a3b8;
+    border: 1px solid #e2e8f0;
+}
+</style>

+ 1280 - 0
EasyTemplate.Blazor.Web/Components/Pages/Dashboard/home2.html

@@ -0,0 +1,1280 @@
+
+<!DOCTYPE html>
+<html lang="zh-CN">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>油气回收在线监控系统</title>
+    <script src="https://cdn.tailwindcss.com"></script>
+    <script src="https://code.iconify.design/iconify-icon/1.0.7/iconify-icon.min.js"></script>
+    <link href="https://api.fontshare.com/v2/css?f[]=satoshi@400,500,700&f[]=jetbrains-mono@400,700&display=swap" rel="stylesheet">
+    <script>
+        tailwind.config = {
+            theme: {
+                extend: {
+                    fontFamily: {
+                        sans: ['Satoshi', 'sans-serif'],
+                        mono: ['JetBrains Mono', 'monospace'],
+                    },
+                    colors: {
+                        system: {
+                            bg: '#f8fafc',      // Light theme background
+                            card: '#ffffff',    // Light theme card
+                            border: '#e2e8f0',  // Light theme border
+                            normal: '#10b981',  // Emerald 500
+                            warning: '#f59e0b', // Amber 500
+                            alarm: '#ef4444',   // Red 500
+                            text: '#0f172a',    // Dark text for light bg
+                            muted: '#64748b'    // Muted text
+                        }
+                    },
+                    animation: {
+                        'flow-up': 'flow-up 1s linear infinite',
+                        'pulse-slow': 'pulse 3s cubic-bezier(0.4, 0, 0.6, 1) infinite',
+                        'spin-slow': 'spin 3s linear infinite',
+                    },
+                    keyframes: {
+                        'flow-up': {
+                            '0%': { transform: 'translateY(10px)', opacity: '0' },
+                            '50%': { opacity: '1' },
+                            '100%': { transform: 'translateY(-10px)', opacity: '0' }
+                        }
+                    }
+                }
+            }
+        }
+    </script>
+    <style>
+        /* Custom Scrollbar for light dashboard feel */
+        ::-webkit-scrollbar {
+            width: 6px;
+            height: 6px;
+        }
+
+        ::-webkit-scrollbar-track {
+            background: #f1f5f9;
+        }
+
+        ::-webkit-scrollbar-thumb {
+            background: #cbd5e1;
+            border-radius: 3px;
+        }
+
+            ::-webkit-scrollbar-thumb:hover {
+                background: #94a3b8;
+            }
+
+        /* Glowing effect for status indicators - adjusted for light mode */
+        .glow-normal {
+            box-shadow: 0 0 12px rgba(16, 185, 129, 0.3);
+        }
+
+        .glow-warning {
+            box-shadow: 0 0 12px rgba(245, 158, 11, 0.4);
+        }
+
+        .glow-alarm {
+            box-shadow: 0 0 16px rgba(239, 68, 68, 0.4);
+        }
+    </style>
+
+    <meta name="preview-version" content="6b5723dc-a31d-45f5-8dff-da5335066aea" />
+    <meta name="preview-timestamp" content="2026-03-04T05:55:35.649Z" />
+
+    <style>
+        html::-webkit-scrollbar, body::-webkit-scrollbar, *::-webkit-scrollbar {
+            display: none !important;
+            width: 0 !important;
+            height: 0 !important;
+        }
+
+        html, body, * {
+            -ms-overflow-style: none !important;
+            scrollbar-width: none !important;
+        }
+    </style>
+    <style>
+        body:not(.sd-ready) {
+            opacity: 0 !important;
+        }
+
+        body.sd-ready {
+            opacity: 1 !important;
+            transition: opacity 0.1s ease-in;
+        }
+
+        sd-component {
+            display: block;
+        }
+    </style>
+
+    <script type="module">
+  (function() {
+    document.addEventListener('wheel', function(e) {
+      if (e.ctrlKey) e.preventDefault();
+    }, { passive: false });
+  })();
+    </script>
+    <script type="module">
+    // SuperDesign Runtime
+    console.log('[SuperDesign] Preview loaded for versionId:', "6b5723dc-a31d-45f5-8dff-da5335066aea");
+
+    window.__SUPERDESIGN_PREVIEW__ = {
+      versionId: "6b5723dc-a31d-45f5-8dff-da5335066aea",
+      timestamp: "2026-03-04T05:55:35.649Z",
+      _modernScreenshotModule: null,
+
+      sendMessage: function(type, data) {
+        if (window.parent) {
+          window.parent.postMessage({
+            source: 'superdesign-preview',
+            type: type,
+            data: data,
+            versionId: this.versionId
+          }, '*');
+        }
+      },
+
+      ready: function() {
+        this.sendMessage('ready', { timestamp: Date.now() });
+      },
+
+
+      _captureScreenshotInternal: async function() {
+        if (!this._modernScreenshotModule) {
+          console.log('[SuperDesign] Loading modern-screenshot library...');
+          this._modernScreenshotModule = await import('https://esm.sh/modern-screenshot@4.6.6');
+        }
+        var modernScreenshot = this._modernScreenshotModule;
+        if (!modernScreenshot || !modernScreenshot.domToCanvas) {
+          throw new Error('modern-screenshot library not loaded');
+        }
+
+        var scrollX = window.scrollX || window.pageXOffset;
+        var scrollY = window.scrollY || window.pageYOffset;
+        var viewportWidth = window.innerWidth;
+        var viewportHeight = window.innerHeight;
+        var documentWidth = Math.max(
+          document.documentElement.scrollWidth,
+          document.documentElement.offsetWidth,
+          document.documentElement.clientWidth,
+          document.body.scrollWidth,
+          document.body.offsetWidth
+        );
+        var documentHeight = Math.max(
+          document.documentElement.scrollHeight,
+          document.documentElement.offsetHeight,
+          document.documentElement.clientHeight,
+          document.body.scrollHeight,
+          document.body.offsetHeight
+        );
+
+        var isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
+        var pixelRatio = isMobile ? 1 : (window.devicePixelRatio || 1);
+
+        var dataUrl;
+
+        if (isMobile) {
+          var wrapper = document.createElement('div');
+          wrapper.style.cssText = 'position:fixed;top:0;left:0;width:' + viewportWidth + 'px;height:' + viewportHeight + 'px;overflow:hidden;z-index:999999;pointer-events:none;';
+          var clone = document.body.cloneNode(true);
+          clone.style.cssText = 'position:absolute;top:' + (-scrollY) + 'px;left:' + (-scrollX) + 'px;margin:0;width:' + documentWidth + 'px;';
+          wrapper.appendChild(clone);
+          document.body.appendChild(wrapper);
+          try {
+            var viewportCanvas = await modernScreenshot.domToCanvas(wrapper, {
+              scale: 1, backgroundColor: '#ffffff',
+              width: viewportWidth, height: viewportHeight,
+            });
+            dataUrl = viewportCanvas.toDataURL('image/png', 0.5);
+          } finally {
+            document.body.removeChild(wrapper);
+          }
+        } else {
+          var fullCanvas = await modernScreenshot.domToCanvas(document.documentElement, {
+            scale: pixelRatio, backgroundColor: '#ffffff',
+            width: documentWidth, height: documentHeight,
+          });
+          var viewportCanvas = document.createElement('canvas');
+          viewportCanvas.width = viewportWidth * pixelRatio;
+          viewportCanvas.height = viewportHeight * pixelRatio;
+          var ctx = viewportCanvas.getContext('2d');
+          if (!ctx) throw new Error('Failed to get canvas context');
+          ctx.drawImage(
+            fullCanvas,
+            scrollX * pixelRatio, scrollY * pixelRatio,
+            viewportWidth * pixelRatio, viewportHeight * pixelRatio,
+            0, 0, viewportWidth * pixelRatio, viewportHeight * pixelRatio
+          );
+          dataUrl = viewportCanvas.toDataURL('image/png', 1.0);
+        }
+
+        if (!dataUrl || !dataUrl.startsWith('data:image/png;base64,') || dataUrl.length < 100) {
+          throw new Error('Invalid screenshot data');
+        }
+
+        return {
+          dataUrl: dataUrl,
+          viewportWidth: viewportWidth,
+          viewportHeight: viewportHeight,
+          pixelRatio: pixelRatio
+        };
+      },
+
+      autoCapture: async function() {
+        if (window === window.parent) return;
+        try {
+          var result = await this._captureScreenshotInternal();
+          this.sendMessage('auto-screenshot', {
+            dataUrl: result.dataUrl,
+            timestamp: Date.now(),
+            viewportWidth: result.viewportWidth,
+            viewportHeight: result.viewportHeight,
+            pixelRatio: result.pixelRatio,
+          });
+        } catch (error) {
+          console.error('[SuperDesign] Auto-capture failed:', error);
+        }
+      },
+
+      captureScreenshot: async function(requestId, autoCaptureId) {
+        try {
+          this._currentRequestId = requestId;
+          this._currentAutoCaptureId = autoCaptureId;
+          var result = await this._captureScreenshotInternal();
+          this.sendMessage('screenshot-captured', {
+            dataUrl: result.dataUrl,
+            timestamp: Date.now(),
+            viewportWidth: result.viewportWidth,
+            viewportHeight: result.viewportHeight,
+            pixelRatio: result.pixelRatio,
+            requestId: this._currentRequestId,
+            autoCaptureId: this._currentAutoCaptureId
+          });
+          return result.dataUrl;
+        } catch (error) {
+          console.error('[SuperDesign] Screenshot capture failed:', error);
+          this.sendMessage('screenshot-error', {
+            error: error.message || String(error),
+            timestamp: Date.now(),
+            requestId: this._currentRequestId,
+            autoCaptureId: this._currentAutoCaptureId
+          });
+          throw error;
+        }
+      }
+
+    };
+
+
+    // Font loading helpers
+    window.__SUPERDESIGN_PREVIEW__.loadedFonts = new Set();
+    window.__SUPERDESIGN_PREVIEW__.loadGoogleFont = function(fontFamily) {
+      if (!fontFamily || this.loadedFonts.has(fontFamily)) return;
+      if (fontFamily.startsWith('Custom-')) return;
+
+      var systemFonts = ['system-ui', '-apple-system', 'BlinkMacSystemFont', 'Segoe UI',
+        'Roboto', 'Helvetica', 'Arial', 'sans-serif', 'Georgia', 'Times New Roman',
+        'Times', 'serif', 'Menlo', 'Monaco', 'Consolas', 'Courier New', 'monospace'];
+      if (systemFonts.some(function(sf) { return fontFamily.toLowerCase().includes(sf.toLowerCase()); })) return;
+
+      if (!document.querySelector('link[href*="fonts.googleapis.com"]')) {
+        var preconnect1 = document.createElement('link');
+        preconnect1.rel = 'preconnect';
+        preconnect1.href = 'https://fonts.googleapis.com';
+        document.head.appendChild(preconnect1);
+        var preconnect2 = document.createElement('link');
+        preconnect2.rel = 'preconnect';
+        preconnect2.href = 'https://fonts.gstatic.com';
+        preconnect2.crossOrigin = 'anonymous';
+        document.head.appendChild(preconnect2);
+      }
+
+      var linkId = 'google-font-' + fontFamily.replace(/\\s+/g, '-').toLowerCase();
+      if (!document.getElementById(linkId)) {
+        var link = document.createElement('link');
+        link.id = linkId;
+        link.rel = 'stylesheet';
+        link.href = 'https://fonts.googleapis.com/css2?family=' + encodeURIComponent(fontFamily) + ':wght@400;500;600;700&display=swap';
+        link.onerror = function() { console.error('[SuperDesign] Failed to load Google Font:', fontFamily); };
+        document.head.appendChild(link);
+      }
+      this.loadedFonts.add(fontFamily);
+    };
+
+    window.__SUPERDESIGN_PREVIEW__.loadedCustomFonts = new Set();
+    window.__SUPERDESIGN_PREVIEW__.loadCustomFont = function(fontInfo) {
+      if (!fontInfo || !fontInfo.family || !fontInfo.url) return;
+      if (this.loadedCustomFonts.has(fontInfo.family)) return;
+      var styleId = 'custom-font-' + fontInfo.family.replace(/[^a-zA-Z0-9]/g, '-');
+      if (document.getElementById(styleId)) return;
+      var style = document.createElement('style');
+      style.id = styleId;
+      style.textContent = '@font-face { ' +
+        'font-family: "' + fontInfo.family + '"; ' +
+        'src: url("' + fontInfo.url + '") format("' + (fontInfo.format || 'woff2') + '"); ' +
+        'font-weight: 100 900; font-style: normal; font-display: swap; }';
+      document.head.appendChild(style);
+      this.loadedCustomFonts.add(fontInfo.family);
+    };
+
+
+    // Theme sync
+    window.__SUPERDESIGN_PREVIEW__.applyTheme = function(payload, isDark) {
+      var root = document.documentElement;
+      var colorVars = isDark ? payload.dark : payload.light;
+      for (var name in colorVars) {
+        if (colorVars.hasOwnProperty(name)) {
+          root.style.setProperty(name, colorVars[name]);
+        }
+      }
+
+      if (payload.customFonts && Array.isArray(payload.customFonts)) {
+        payload.customFonts.forEach(function(fontInfo) {
+          window.__SUPERDESIGN_PREVIEW__.loadCustomFont(fontInfo);
+        });
+      }
+
+      if (payload.typography) {
+        var t = payload.typography;
+        if (t.fontSans && !t.fontSans.startsWith('Custom-')) window.__SUPERDESIGN_PREVIEW__.loadGoogleFont(t.fontSans);
+        if (t.fontSerif && !t.fontSerif.startsWith('Custom-')) window.__SUPERDESIGN_PREVIEW__.loadGoogleFont(t.fontSerif);
+        if (t.fontMono && !t.fontMono.startsWith('Custom-')) window.__SUPERDESIGN_PREVIEW__.loadGoogleFont(t.fontMono);
+
+        var formatFontValue = function(ff) {
+          if (!ff) return ff;
+          var first = ff.split(',')[0].trim().replace(/^["']|["']$/g, '');
+          return first.startsWith('var(') ? first : '"' + first + '"';
+        };
+        root.style.setProperty('--font-sans', formatFontValue(t.fontSans));
+        root.style.setProperty('--font-serif', formatFontValue(t.fontSerif));
+        root.style.setProperty('--font-mono', formatFontValue(t.fontMono));
+        root.style.setProperty('--font-size', t.fontSize);
+        root.style.setProperty('--line-height', t.lineHeight);
+        root.style.setProperty('--letter-spacing-body', t.letterSpacing);
+        root.style.setProperty('--letter-spacing-heading', t.headingLetterSpacing);
+        root.style.setProperty('--font-weight-regular', t.fontWeightRegular);
+        root.style.setProperty('--font-weight-bold', t.fontWeightBold);
+      }
+
+      if (payload.effects) {
+        root.style.setProperty('--radius', payload.effects.radius);
+        root.style.setProperty('--shadow', payload.effects.shadow);
+      }
+
+      if (isDark) { root.classList.add('dark'); } else { root.classList.remove('dark'); }
+    };
+
+
+    // Message listener
+    window.addEventListener('message', function(event) {
+      if (event.data && event.data.type === 'request-screenshot') {
+        if (window.__SUPERDESIGN_PREVIEW__) {
+          window.__SUPERDESIGN_PREVIEW__.captureScreenshot(event.data.requestId, event.data.autoCaptureId);
+        }
+      }
+
+      if (event.data && event.data.type === 'superdesign-theme-update') {
+        if (window.__SUPERDESIGN_PREVIEW__ && event.data.payload) {
+          var isDark = event.data.isDark || false;
+          window.__SUPERDESIGN_PREVIEW__.applyTheme(event.data.payload, isDark);
+          window.__SUPERDESIGN_PREVIEW__.sendMessage('theme-applied', { timestamp: Date.now(), isDark: isDark });
+        }
+      }
+
+      if (event.data && event.data.type === 'navigate-to-route') {
+        var route = event.data.route;
+        if (route) {
+          if (route === '/') {
+            if (window.location.hash) {
+              history.pushState(null, '', window.location.pathname + window.location.search);
+              window.dispatchEvent(new HashChangeEvent('hashchange'));
+            }
+          } else {
+            var newHash = '#' + route;
+            if (window.location.hash !== newHash) {
+              window.location.hash = route;
+            }
+          }
+        }
+      }
+    });
+
+
+    // Page lifecycle
+    if (document.readyState === 'loading') {
+      document.addEventListener('DOMContentLoaded', function() { window.__SUPERDESIGN_PREVIEW__.ready(); });
+    } else {
+      window.__SUPERDESIGN_PREVIEW__.ready();
+    }
+
+    function onPageFullyLoaded() {
+      requestAnimationFrame(function() {
+        requestAnimationFrame(function() {
+          setTimeout(function() {
+            window.__SUPERDESIGN_PREVIEW__.sendMessage('loaded', { timestamp: Date.now() });
+          }, 1500);
+          // Auto-capture disabled for this preview type
+        });
+      });
+    }
+
+    if (document.readyState === 'complete') {
+      onPageFullyLoaded();
+    } else {
+      window.addEventListener('load', onPageFullyLoaded);
+    }
+
+    </script>
+    <script src="https://cdn.jsdelivr.net/npm/petite-vue@0.4.1/dist/petite-vue.iife.js"></script>
+</head>
+<body>
+    <!-- Root Container -->
+    <div class="min-h-screen bg-system-bg text-system-text font-sans flex flex-col overflow-hidden selection:bg-system-normal/20">
+
+        <!-- 1. Header Section -->
+        <header class="h-16 bg-white/90 backdrop-blur-md border-b border-system-border flex items-center justify-between px-6 z-20 shrink-0 shadow-sm">
+            <div class="flex items-center gap-4">
+                <div class="w-10 h-10 rounded-lg bg-gradient-to-br from-system-normal to-emerald-600 flex items-center justify-center shadow-md shadow-system-normal/20">
+                    <iconify-icon icon="mdi:leaf" class="text-2xl text-white"></iconify-icon>
+                </div>
+                <h1 class="text-xl tracking-wide font-bold text-slate-800">
+                    油气回收在线监控系统
+                </h1>
+            </div>
+
+            <!-- Global System Status Summary -->
+            <div class="flex items-center gap-6 bg-slate-50 px-5 py-2 rounded-full border border-slate-200">
+                <div class="flex items-center gap-2">
+                    <span class="relative flex h-3 w-3">
+                        <span class="animate-ping absolute inline-flex h-full w-full rounded-full bg-system-normal opacity-75"></span>
+                        <span class="relative inline-flex rounded-full h-3 w-3 bg-system-normal"></span>
+                    </span>
+                    <span class="text-sm text-slate-600">正常: <span class="font-mono font-bold text-system-normal">88</span></span>
+                </div>
+                <div class="w-px h-4 bg-slate-300"></div>
+                <div class="flex items-center gap-2">
+                    <span class="relative flex h-3 w-3">
+                        <span class="relative inline-flex rounded-full h-3 w-3 bg-system-warning"></span>
+                    </span>
+                    <span class="text-sm text-slate-600">预警: <span class="font-mono font-bold text-system-warning">2</span></span>
+                </div>
+                <div class="w-px h-4 bg-slate-300"></div>
+                <div class="flex items-center gap-2">
+                    <span class="relative flex h-3 w-3">
+                        <span class="animate-pulse absolute inline-flex h-full w-full rounded-full bg-system-alarm opacity-75"></span>
+                        <span class="relative inline-flex rounded-full h-3 w-3 bg-system-alarm"></span>
+                    </span>
+                    <span class="text-sm text-slate-600">报警: <span class="font-mono font-bold text-system-alarm">2</span></span>
+                </div>
+            </div>
+
+            <!-- Clock & User -->
+            <div class="flex items-center gap-6">
+                <div class="flex flex-col items-end">
+                    <span class="font-mono text-lg font-bold text-slate-800 tracking-wider">14:32:45</span>
+                    <span class="text-xs text-system-muted font-mono">2023-10-27 星期五</span>
+                </div>
+                <button class="w-10 h-10 rounded-full bg-slate-50 border border-slate-200 flex items-center justify-center hover:bg-slate-100 transition-colors">
+                    <iconify-icon icon="mdi:account-cog" class="text-xl text-slate-600"></iconify-icon>
+                </button>
+            </div>
+        </header>
+
+        <!-- 2. Top Status Bar (Key Metrics & Remote Platforms) -->
+        <section class="px-6 py-4 grid grid-cols-12 gap-4 shrink-0 z-10">
+            <!-- Key Metrics (Left 8 columns) -->
+            <div class="col-span-8 grid grid-cols-4 gap-4">
+                <!-- Tank Pressure: Normal -->
+                <div class="bg-system-card rounded-xl border border-system-border shadow-sm p-4 flex items-center gap-4 relative overflow-hidden">
+                    <div class="absolute top-0 right-0 w-16 h-16 bg-system-normal/10 rounded-bl-full"></div>
+                    <div class="w-12 h-12 rounded-full bg-system-normal/10 flex items-center justify-center border border-system-normal/20 shrink-0">
+                        <iconify-icon icon="mdi:gauge" class="text-2xl text-system-normal"></iconify-icon>
+                    </div>
+                    <div class="flex-1">
+                        <div class="text-xs text-system-muted mb-1">油罐压力</div>
+                        <div class="flex items-baseline gap-1">
+                            <span class="text-2xl font-mono font-bold text-slate-800">1.25</span>
+                            <span class="text-xs text-system-muted font-mono">kPa</span>
+                        </div>
+                    </div>
+                    <div class="flex flex-col items-end">
+                        <iconify-icon icon="mdi:check-circle" class="text-system-normal"></iconify-icon>
+                        <span class="text-[10px] text-system-normal mt-1">正常</span>
+                    </div>
+                </div>
+
+                <!-- Vapor Concentration: Warning -->
+                <div class="bg-system-card rounded-xl border border-system-warning/30 shadow-sm p-4 flex items-center gap-4 relative overflow-hidden">
+                    <div class="absolute top-0 right-0 w-16 h-16 bg-system-warning/10 rounded-bl-full"></div>
+                    <div class="w-12 h-12 rounded-full bg-system-warning/10 flex items-center justify-center border border-system-warning/30 shrink-0">
+                        <iconify-icon icon="mdi:water-percent" class="text-2xl text-system-warning"></iconify-icon>
+                    </div>
+                    <div class="flex-1">
+                        <div class="text-xs text-system-muted mb-1">油气浓度</div>
+                        <div class="flex items-baseline gap-1">
+                            <span class="text-2xl font-mono font-bold text-system-warning">18.5</span>
+                            <span class="text-xs text-system-muted font-mono">g/m³</span>
+                        </div>
+                    </div>
+                    <div class="flex flex-col items-end">
+                        <iconify-icon icon="mdi:alert-outline" class="text-system-warning animate-pulse"></iconify-icon>
+                        <span class="text-[10px] text-system-warning mt-1">偏高</span>
+                    </div>
+                </div>
+
+                <!-- Pipeline Pressure: Normal -->
+                <div class="bg-system-card rounded-xl border border-system-border shadow-sm p-4 flex items-center gap-4 relative overflow-hidden">
+                    <div class="absolute top-0 right-0 w-16 h-16 bg-system-normal/10 rounded-bl-full"></div>
+                    <div class="w-12 h-12 rounded-full bg-system-normal/10 flex items-center justify-center border border-system-normal/20 shrink-0">
+                        <iconify-icon icon="mdi:pipe" class="text-2xl text-system-normal"></iconify-icon>
+                    </div>
+                    <div class="flex-1">
+                        <div class="text-xs text-system-muted mb-1">管线压力</div>
+                        <div class="flex items-baseline gap-1">
+                            <span class="text-2xl font-mono font-bold text-slate-800">3.80</span>
+                            <span class="text-xs text-system-muted font-mono">kPa</span>
+                        </div>
+                    </div>
+                    <div class="flex flex-col items-end">
+                        <iconify-icon icon="mdi:check-circle" class="text-system-normal"></iconify-icon>
+                        <span class="text-[10px] text-system-normal mt-1">正常</span>
+                    </div>
+                </div>
+
+                <!-- Tank Temperature: Alarm -->
+                <div class="bg-system-card rounded-xl border border-system-alarm/40 shadow-sm p-4 flex items-center gap-4 relative overflow-hidden glow-alarm">
+                    <div class="absolute top-0 right-0 w-16 h-16 bg-system-alarm/10 rounded-bl-full"></div>
+                    <div class="w-12 h-12 rounded-full bg-system-alarm/10 flex items-center justify-center border border-system-alarm/30 shrink-0">
+                        <iconify-icon icon="mdi:thermometer-alert" class="text-2xl text-system-alarm"></iconify-icon>
+                    </div>
+                    <div class="flex-1">
+                        <div class="text-xs text-system-muted mb-1">油罐温度</div>
+                        <div class="flex items-baseline gap-1">
+                            <span class="text-2xl font-mono font-bold text-system-alarm">42.5</span>
+                            <span class="text-xs text-system-muted font-mono">°C</span>
+                        </div>
+                    </div>
+                    <div class="flex flex-col items-end">
+                        <iconify-icon icon="mdi:close-octagon" class="text-system-alarm animate-bounce"></iconify-icon>
+                        <span class="text-[10px] text-system-alarm mt-1 font-bold">超限</span>
+                    </div>
+                </div>
+            </div>
+
+            <!-- Remote Platform Status (Right 4 columns) -->
+            <div class="col-span-4 bg-system-card rounded-xl border border-system-border shadow-sm p-4 flex flex-col justify-between">
+                <div class="text-sm font-medium text-slate-700 flex items-center gap-2 mb-2">
+                    <iconify-icon icon="mdi:cloud-upload-outline" class="text-slate-500"></iconify-icon>
+                    数据远传状态
+                </div>
+                <div class="grid grid-cols-2 gap-2 h-full">
+                    <div class="bg-slate-50 border border-slate-100 rounded px-3 py-2 flex items-center justify-between">
+                        <span class="text-xs text-slate-600">市环保局</span>
+                        <div class="flex items-center gap-1.5">
+                            <iconify-icon icon="mdi:sync" class="text-system-normal text-xs animate-spin-slow"></iconify-icon>
+                            <span class="text-[10px] text-system-normal">上传中</span>
+                        </div>
+                    </div>
+                    <div class="bg-slate-50 border border-slate-100 rounded px-3 py-2 flex items-center justify-between">
+                        <span class="text-xs text-slate-600">省质监局</span>
+                        <div class="flex items-center gap-1.5">
+                            <span class="w-2 h-2 rounded-full bg-system-normal"></span>
+                            <span class="text-[10px] text-slate-500">已同步</span>
+                        </div>
+                    </div>
+                    <div class="bg-slate-50 border border-slate-100 rounded px-3 py-2 flex items-center justify-between">
+                        <span class="text-xs text-slate-600">集团总部</span>
+                        <div class="flex items-center gap-1.5">
+                            <iconify-icon icon="mdi:sync" class="text-system-normal text-xs animate-spin-slow"></iconify-icon>
+                            <span class="text-[10px] text-system-normal">上传中</span>
+                        </div>
+                    </div>
+                    <div class="bg-orange-50/50 border border-system-warning/30 rounded px-3 py-2 flex items-center justify-between">
+                        <span class="text-xs text-slate-600">应急管理</span>
+                        <div class="flex items-center gap-1.5">
+                            <span class="w-2 h-2 rounded-full bg-system-warning animate-pulse"></span>
+                            <span class="text-[10px] text-system-warning">网络延迟</span>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </section>
+
+        <!-- 3. Main Nozzle Grid Section -->
+        <main class="flex-1 overflow-y-auto px-6 pb-24">
+            <!-- Dense Grid Layout -->
+            <div class="grid grid-cols-5 md:grid-cols-6 lg:grid-cols-8 xl:grid-cols-10 2xl:grid-cols-12 gap-1.5">
+
+                <!-- Card 01: Normal Fueling (Green Icon/Border, Green Tag) -->
+                <article class="group relative bg-system-card border border-system-normal shadow-sm rounded-lg p-2 flex flex-col gap-1 transition-all duration-300">
+                    <div class="flex justify-between items-center">
+                        <span class="text-sm font-mono font-bold text-slate-800">01#</span>
+                        <span class="text-[10px] px-1 py-0.5 rounded bg-slate-100 text-slate-600 border border-slate-200">92#</span>
+                    </div>
+                    <div class="flex-1 flex justify-center items-center py-1.5">
+                        <div class="relative w-12 h-12 rounded-full border-2 border-system-normal flex justify-center items-center bg-system-normal/10 glow-normal">
+                            <iconify-icon icon="mdi:fuel" class="text-lg text-system-normal"></iconify-icon>
+                            <div class="absolute -right-2 top-1/2 -translate-y-1/2 flex flex-col gap-0.5">
+                                <iconify-icon icon="mdi:chevron-up" class="text-[8px] text-system-normal animate-flow-up" style="animation-delay: 0s"></iconify-icon>
+                                <iconify-icon icon="mdi:chevron-up" class="text-[8px] text-system-normal animate-flow-up" style="animation-delay: 0.3s"></iconify-icon>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="flex justify-between items-end mt-1 h-5">
+                        <div class="flex flex-col leading-tight">
+                            <span class="text-[9px] text-system-muted">气液比</span>
+                            <span class="text-xs font-mono text-system-normal font-bold">1.05</span>
+                        </div>
+                        <span class="text-[9px] text-system-normal bg-system-normal/10 px-1 py-0.5 rounded border border-system-normal/20">加油中</span>
+                    </div>
+                </article>
+
+                <!-- Card 02: Normal Idle (Green Icon/Border, Gray Tag) -->
+                <article class="group relative bg-system-card border border-system-normal/60 hover:border-system-normal shadow-sm rounded-lg p-2 flex flex-col gap-1 transition-all duration-300 opacity-90">
+                    <div class="flex justify-between items-center">
+                        <span class="text-sm font-mono font-bold text-slate-800">02#</span>
+                        <span class="text-[10px] px-1 py-0.5 rounded bg-slate-100 text-slate-600 border border-slate-200">92#</span>
+                    </div>
+                    <div class="flex-1 flex justify-center items-center py-1.5">
+                        <div class="relative w-12 h-12 rounded-full border-2 border-system-normal flex justify-center items-center bg-slate-50">
+                            <iconify-icon icon="mdi:fuel" class="text-lg text-system-normal"></iconify-icon>
+                        </div>
+                    </div>
+                    <div class="flex justify-between items-end mt-1 h-5">
+                        <div class="flex flex-col leading-tight">
+                            <span class="text-[9px] text-system-muted">气液比</span>
+                            <span class="text-xs font-mono text-slate-500 font-bold">--</span>
+                        </div>
+                        <span class="text-[9px] text-slate-500 bg-slate-100 px-1 py-0.5 rounded border border-slate-200">空闲</span>
+                    </div>
+                </article>
+
+                <!-- Card 03: Normal Idle -->
+                <article class="group relative bg-system-card border border-system-normal/60 hover:border-system-normal shadow-sm rounded-lg p-2 flex flex-col gap-1 transition-all duration-300 opacity-90">
+                    <div class="flex justify-between items-center">
+                        <span class="text-sm font-mono font-bold text-slate-800">03#</span>
+                        <span class="text-[10px] px-1 py-0.5 rounded bg-slate-100 text-slate-600 border border-slate-200">95#</span>
+                    </div>
+                    <div class="flex-1 flex justify-center items-center py-1.5">
+                        <div class="relative w-12 h-12 rounded-full border-2 border-system-normal flex justify-center items-center bg-slate-50">
+                            <iconify-icon icon="mdi:fuel" class="text-lg text-system-normal"></iconify-icon>
+                        </div>
+                    </div>
+                    <div class="flex justify-between items-end mt-1 h-5">
+                        <div class="flex flex-col leading-tight">
+                            <span class="text-[9px] text-system-muted">气液比</span>
+                            <span class="text-xs font-mono text-slate-500 font-bold">--</span>
+                        </div>
+                        <span class="text-[9px] text-slate-500 bg-slate-100 px-1 py-0.5 rounded border border-slate-200">空闲</span>
+                    </div>
+                </article>
+
+                <!-- Card 04: Offline (Gray Icon/Border, Gray Tag) -->
+                <article class="group relative bg-system-card border border-slate-300 hover:border-slate-400 shadow-sm rounded-lg p-2 flex flex-col gap-1 transition-all duration-300 opacity-75">
+                    <div class="flex justify-between items-center">
+                        <span class="text-sm font-mono font-bold text-slate-600">04#</span>
+                        <span class="text-[10px] px-1 py-0.5 rounded bg-slate-100 text-slate-400 border border-slate-200">95#</span>
+                    </div>
+                    <div class="flex-1 flex justify-center items-center py-1.5">
+                        <div class="relative w-12 h-12 rounded-full border-2 border-slate-300 flex justify-center items-center bg-slate-50">
+                            <iconify-icon icon="mdi:fuel" class="text-lg text-slate-400"></iconify-icon>
+                        </div>
+                    </div>
+                    <div class="flex justify-between items-end mt-1 h-5">
+                        <div class="flex flex-col leading-tight">
+                            <span class="text-[9px] text-slate-400">气液比</span>
+                            <span class="text-xs font-mono text-slate-400 font-bold">--</span>
+                        </div>
+                        <span class="text-[9px] text-slate-500 bg-slate-100 px-1 py-0.5 rounded border border-slate-200">离线</span>
+                    </div>
+                </article>
+
+                <!-- Card 05: WARNING (Yellow Color Only, No Text Tag) -->
+                <article class="group relative bg-system-card border-2 border-system-warning shadow-sm rounded-lg p-2 flex flex-col gap-1 transition-all duration-300 bg-orange-50/30">
+                    <div class="flex justify-between items-center">
+                        <span class="text-sm font-mono font-bold text-slate-800">05#</span>
+                        <span class="text-[10px] px-1 py-0.5 rounded bg-orange-100 text-system-warning border border-orange-200">98#</span>
+                    </div>
+                    <div class="flex-1 flex justify-center items-center py-1.5">
+                        <div class="relative w-12 h-12 rounded-full border-2 border-system-warning flex justify-center items-center bg-system-warning/10 glow-warning">
+                            <iconify-icon icon="mdi:fuel" class="text-lg text-system-warning"></iconify-icon>
+                        </div>
+                    </div>
+                    <div class="flex justify-between items-end mt-1 h-5">
+                        <div class="flex flex-col leading-tight">
+                            <span class="text-[9px] text-system-muted">气液比</span>
+                            <span class="text-xs font-mono text-system-warning font-bold">1.28</span>
+                        </div>
+                        <!-- Deliberately left empty, warning relies entirely on border/icon color -->
+                    </div>
+                </article>
+
+                <!-- Card 06: ALARM (Red Color Only, No Text Tag) -->
+                <article class="group relative bg-system-card border-2 border-system-alarm shadow-sm rounded-lg p-2 flex flex-col gap-1 transition-all duration-300 bg-red-50/30">
+                    <div class="flex justify-between items-center">
+                        <span class="text-sm font-mono font-bold text-slate-800">06#</span>
+                        <span class="text-[10px] px-1 py-0.5 rounded bg-red-100 text-system-alarm border border-red-200">92#</span>
+                    </div>
+                    <div class="flex-1 flex justify-center items-center py-1.5">
+                        <div class="relative w-12 h-12 rounded-full border-2 border-system-alarm flex justify-center items-center bg-system-alarm/10 glow-alarm">
+                            <iconify-icon icon="mdi:fuel" class="text-lg text-system-alarm"></iconify-icon>
+                            <div class="absolute -top-1 -right-1 w-3 h-3 bg-system-alarm rounded-full flex items-center justify-center animate-bounce shadow-md">
+                            </div>
+                        </div>
+                    </div>
+                    <div class="flex justify-between items-end mt-1 h-5">
+                        <div class="flex flex-col leading-tight">
+                            <span class="text-[9px] text-system-muted">气液比</span>
+                            <span class="text-xs font-mono text-system-alarm font-bold">0.00</span>
+                        </div>
+                        <!-- Deliberately left empty, alarm relies entirely on border/icon color -->
+                    </div>
+                </article>
+
+                <!-- Generate remaining cards -->
+                <script>
+                    const fuelTypes = ['92#', '95#', '98#', '0#'];
+                    for(let i=7; i<=32; i++) {
+                        let num = i < 10 ? '0'+i : i;
+                        let fuel = fuelTypes[Math.floor(Math.random() * fuelTypes.length)];
+                        let rand = Math.random();
+
+                        if(i === 15) {
+                             // Warning (Yellow, No Text Tag)
+                             document.write(`
+                                <article class="group relative bg-system-card border-2 border-system-warning shadow-sm rounded-lg p-2 flex flex-col gap-1 transition-all duration-300 bg-orange-50/30">
+                                    <div class="flex justify-between items-center">
+                                        <span class="text-sm font-mono font-bold text-slate-800">${num}#</span>
+                                        <span class="text-[10px] px-1 py-0.5 rounded bg-orange-100 text-system-warning border border-orange-200">${fuel}</span>
+                                    </div>
+                                    <div class="flex-1 flex justify-center items-center py-1.5">
+                                        <div class="relative w-12 h-12 rounded-full border-2 border-system-warning flex justify-center items-center bg-system-warning/10 glow-warning">
+                                             <iconify-icon icon="mdi:fuel" class="text-lg text-system-warning"></iconify-icon>
+                                             <div class="absolute -right-2 top-1/2 -translate-y-1/2 flex flex-col gap-0.5">
+                                                 <iconify-icon icon="mdi:chevron-up" class="text-[8px] text-system-warning animate-flow-up" style="animation-delay: 0s"></iconify-icon>
+                                                 <iconify-icon icon="mdi:chevron-up" class="text-[8px] text-system-warning animate-flow-up" style="animation-delay: 0.3s"></iconify-icon>
+                                             </div>
+                                        </div>
+                                    </div>
+                                    <div class="flex justify-between items-end mt-1 h-5">
+                                        <div class="flex flex-col leading-tight">
+                                            <span class="text-[9px] text-system-muted">气液比</span>
+                                            <span class="text-xs font-mono text-system-warning font-bold">0.85</span>
+                                        </div>
+                                    </div>
+                                </article>
+                             `);
+                        } else if(i === 22) {
+                             // Alarm (Red, No Text Tag)
+                              document.write(`
+                                <article class="group relative bg-system-card border-2 border-system-alarm shadow-sm rounded-lg p-2 flex flex-col gap-1 transition-all duration-300 bg-red-50/30">
+                                    <div class="flex justify-between items-center">
+                                        <span class="text-sm font-mono font-bold text-slate-800">${num}#</span>
+                                        <span class="text-[10px] px-1 py-0.5 rounded bg-red-100 text-system-alarm border border-red-200">${fuel}</span>
+                                    </div>
+                                    <div class="flex-1 flex justify-center items-center py-1.5">
+                                        <div class="relative w-12 h-12 rounded-full border-2 border-system-alarm flex justify-center items-center bg-system-alarm/10 glow-alarm">
+                                             <iconify-icon icon="mdi:fuel" class="text-lg text-system-alarm"></iconify-icon>
+                                        </div>
+                                    </div>
+                                    <div class="flex justify-between items-end mt-1 h-5">
+                                        <div class="flex flex-col leading-tight">
+                                            <span class="text-[9px] text-system-muted">气液比</span>
+                                            <span class="text-xs font-mono text-system-alarm font-bold">2.50</span>
+                                        </div>
+                                    </div>
+                                </article>
+                             `);
+                        } else if (rand > 0.85) {
+                             // Offline (Gray, Gray Tag)
+                             document.write(`
+                                <article class="group relative bg-system-card border border-slate-300 hover:border-slate-400 shadow-sm rounded-lg p-2 flex flex-col gap-1 transition-all duration-300 opacity-75">
+                                    <div class="flex justify-between items-center">
+                                        <span class="text-sm font-mono font-bold text-slate-600">${num}#</span>
+                                        <span class="text-[10px] px-1 py-0.5 rounded bg-slate-100 text-slate-400 border border-slate-200">${fuel}</span>
+                                    </div>
+                                    <div class="flex-1 flex justify-center items-center py-1.5">
+                                        <div class="relative w-12 h-12 rounded-full border-2 border-slate-300 flex justify-center items-center bg-slate-50">
+                                             <iconify-icon icon="mdi:fuel" class="text-lg text-slate-400"></iconify-icon>
+                                        </div>
+                                    </div>
+                                    <div class="flex justify-between items-end mt-1 h-5">
+                                        <div class="flex flex-col leading-tight">
+                                            <span class="text-[9px] text-slate-400">气液比</span>
+                                            <span class="text-xs font-mono text-slate-400 font-bold">--</span>
+                                        </div>
+                                        <span class="text-[9px] text-slate-500 bg-slate-100 px-1 py-0.5 rounded border border-slate-200">离线</span>
+                                    </div>
+                                </article>
+                             `);
+                        } else if (rand > 0.4) {
+                            // Fueling (Green border/icon, Green Tag)
+                            let al = (1.0 + Math.random() * 0.15).toFixed(2);
+                            document.write(`
+                                <article class="group relative bg-system-card border border-system-normal shadow-sm rounded-lg p-2 flex flex-col gap-1 transition-all duration-300">
+                                    <div class="flex justify-between items-center">
+                                        <span class="text-sm font-mono font-bold text-slate-800">${num}#</span>
+                                        <span class="text-[10px] px-1 py-0.5 rounded bg-slate-100 text-slate-600 border border-slate-200">${fuel}</span>
+                                    </div>
+                                    <div class="flex-1 flex justify-center items-center py-1.5">
+                                        <div class="relative w-12 h-12 rounded-full border-2 border-system-normal flex justify-center items-center bg-system-normal/10 glow-normal">
+                                             <iconify-icon icon="mdi:fuel" class="text-lg text-system-normal"></iconify-icon>
+                                             <div class="absolute -right-2 top-1/2 -translate-y-1/2 flex flex-col gap-0.5">
+                                                 <iconify-icon icon="mdi:chevron-up" class="text-[8px] text-system-normal animate-flow-up" style="animation-delay: 0s"></iconify-icon>
+                                                 <iconify-icon icon="mdi:chevron-up" class="text-[8px] text-system-normal animate-flow-up" style="animation-delay: 0.3s"></iconify-icon>
+                                             </div>
+                                        </div>
+                                    </div>
+                                    <div class="flex justify-between items-end mt-1 h-5">
+                                        <div class="flex flex-col leading-tight">
+                                            <span class="text-[9px] text-system-muted">气液比</span>
+                                            <span class="text-xs font-mono text-system-normal font-bold">${al}</span>
+                                        </div>
+                                        <span class="text-[9px] text-system-normal bg-system-normal/10 px-1 py-0.5 rounded border border-system-normal/20">加油中</span>
+                                    </div>
+                                </article>
+                            `);
+                        } else {
+                            // Idle (Green border/icon, Gray Tag)
+                            document.write(`
+                                <article class="group relative bg-system-card border border-system-normal/60 hover:border-system-normal shadow-sm rounded-lg p-2 flex flex-col gap-1 transition-all duration-300 opacity-90">
+                                    <div class="flex justify-between items-center">
+                                        <span class="text-sm font-mono font-bold text-slate-800">${num}#</span>
+                                        <span class="text-[10px] px-1 py-0.5 rounded bg-slate-100 text-slate-600 border border-slate-200">${fuel}</span>
+                                    </div>
+                                    <div class="flex-1 flex justify-center items-center py-1.5">
+                                        <div class="relative w-12 h-12 rounded-full border-2 border-system-normal flex justify-center items-center bg-slate-50">
+                                             <iconify-icon icon="mdi:fuel" class="text-lg text-system-normal"></iconify-icon>
+                                        </div>
+                                    </div>
+                                    <div class="flex justify-between items-end mt-1 h-5">
+                                        <div class="flex flex-col leading-tight">
+                                            <span class="text-[9px] text-system-muted">气液比</span>
+                                            <span class="text-xs font-mono text-slate-500 font-bold">--</span>
+                                        </div>
+                                        <span class="text-[9px] text-slate-500 bg-slate-100 px-1 py-0.5 rounded border border-slate-200">空闲</span>
+                                    </div>
+                                </article>
+                            `);
+                        }
+                    }
+                </script>
+            </div>
+        </main>
+
+        <!-- 4. Pagination Control (Fixed Bottom) -->
+        <footer class="fixed bottom-0 w-full h-14 bg-white/95 backdrop-blur-md border-t border-system-border px-6 flex items-center justify-between z-40 shadow-[0_-2px_10px_rgba(0,0,0,0.02)]">
+            <!-- Legend -->
+            <div class="flex items-center gap-4 text-xs">
+                <span class="text-slate-500">状态图例:</span>
+                <div class="flex items-center gap-1.5">
+                    <span class="w-2.5 h-2.5 rounded-full bg-system-normal glow-normal border border-system-normal/20"></span>
+                    <span class="text-slate-600">正常(加油/空闲)</span>
+                </div>
+                <div class="flex items-center gap-1.5">
+                    <span class="w-2.5 h-2.5 rounded-full bg-slate-300 border border-slate-400"></span>
+                    <span class="text-slate-600">离线</span>
+                </div>
+                <div class="flex items-center gap-1.5">
+                    <span class="w-2.5 h-2.5 rounded-full bg-system-warning glow-warning"></span>
+                    <span class="text-slate-600">预警</span>
+                </div>
+                <div class="flex items-center gap-1.5">
+                    <span class="w-2.5 h-2.5 rounded-full bg-system-alarm glow-alarm"></span>
+                    <span class="text-slate-600">报警</span>
+                </div>
+            </div>
+
+            <!-- Pagination Center -->
+            <div class="flex items-center gap-6">
+                <span class="text-sm text-slate-500">第 <span class="text-slate-800 font-bold">1</span> 页 / 共 3 页 (96条)</span>
+
+                <div class="flex items-center gap-2">
+                    <button class="px-3 py-1 rounded bg-white border border-slate-200 text-slate-400 transition-colors disabled:opacity-50 text-sm" disabled>
+                        <iconify-icon icon="mdi:chevron-left" class="inline-block align-middle"></iconify-icon> 上一页
+                    </button>
+
+                    <!-- Page 1: Current, has Alarm (Red) -->
+                    <button class="w-7 h-7 rounded flex items-center justify-center bg-system-alarm text-white font-bold shadow-sm transition-all">
+                        1
+                    </button>
+
+                    <!-- Page 2: Has Warning (Yellow) -->
+                    <button class="w-7 h-7 rounded flex items-center justify-center bg-orange-50 text-system-warning border border-system-warning/30 hover:bg-orange-100 transition-all relative" title="该页存在预警项">
+                        2
+                        <div class="absolute -top-1 -right-1 w-2 h-2 bg-system-warning rounded-full"></div>
+                    </button>
+
+                    <!-- Page 3: All Normal (Green) -->
+                    <button class="w-7 h-7 rounded flex items-center justify-center bg-emerald-50 text-emerald-700 border border-emerald-200 hover:bg-emerald-100 transition-all" title="该页全正常">
+                        3
+                    </button>
+
+                    <button class="px-3 py-1 rounded bg-white border border-slate-200 text-slate-600 hover:text-slate-800 hover:bg-slate-50 transition-colors text-sm">
+                        下一页 <iconify-icon icon="mdi:chevron-right" class="inline-block align-middle"></iconify-icon>
+                    </button>
+                </div>
+            </div>
+
+            <!-- Quick Jump -->
+            <div class="flex items-center gap-2 text-sm">
+                <span class="text-slate-500">跳转至</span>
+                <select class="bg-white border border-slate-300 text-slate-700 text-sm rounded focus:ring-system-normal focus:border-system-normal block px-2 py-1 outline-none">
+                    <option>1</option>
+                    <option>2</option>
+                    <option>3</option>
+                </select>
+                <span class="text-slate-500">页</span>
+            </div>
+        </footer>
+
+    </div>
+
+    <script defer type="module">
+  window.addEventListener('error', function(event) {
+    var msg = event.message || '';
+    var name = (event.error && event.error.name) || msg.split(':')[0] || '';
+    if (name === 'HierarchyRequestError' || msg.includes("Failed to execute 'appendChild' on 'Node'")) return;
+    if (window.__SUPERDESIGN_PREVIEW__) {
+      var err = event.error;
+      window.__SUPERDESIGN_PREVIEW__.sendMessage('error', {
+        message: event.message, filename: event.filename,
+        lineno: event.lineno, colno: event.colno,
+        name: (err && err.name) || name || 'Error',
+        stack: (err && err.stack) || null
+      });
+    }
+  });
+  window.addEventListener('unhandledrejection', function(event) {
+    var reason = event.reason;
+    var msg = (reason && reason.message) || (typeof reason === 'string' ? reason : '');
+    var name = (reason && reason.name) || 'UnhandledRejection';
+    if (name === 'HierarchyRequestError' || msg.includes("Failed to execute 'appendChild' on 'Node'")) return;
+    if (window.__SUPERDESIGN_PREVIEW__) {
+      window.__SUPERDESIGN_PREVIEW__.sendMessage('unhandled-rejection', {
+        reason: (reason && reason.message) || String(reason),
+        name: name,
+        stack: (reason && reason.stack) || null
+      });
+    }
+  });
+    </script>
+    <script defer type="module">import '/__visual-edit-bridge/iframe-runtime.mjs?v=e62d2259';</script>
+    <script defer type="module">
+  (function() {
+    'use strict';
+
+    var MAX_RENDER_DEPTH = 5;
+
+    function showPage() {
+      document.body.classList.add('sd-ready');
+    }
+
+    var componentRegistry = new Map();
+    var instanceRegistry = new Map();
+    var API_BASE = "https://api.superdesign.dev";
+    var DRAFT_ID = "6b5723dc-a31d-45f5-8dff-da5335066aea";
+
+    function buildDefaultProps(definition) {
+      var defaultProps = {};
+      var props = definition.props;
+      if (!props || !Array.isArray(props)) return defaultProps;
+      for (var i = 0; i < props.length; i++) {
+        var prop = props[i];
+        if (prop.defaultValue === undefined) continue;
+        var path = prop.name.split('.');
+        var current = defaultProps;
+        for (var j = 0; j < path.length - 1; j++) {
+          var key = path[j];
+          if (!(key in current) || typeof current[key] !== 'object' || current[key] === null) {
+            current[key] = {};
+          }
+          current = current[key];
+        }
+        current[path[path.length - 1]] = prop.defaultValue;
+      }
+      return defaultProps;
+    }
+
+    function deepMerge(target, source) {
+      var result = Object.assign({}, target);
+      for (var key in source) {
+        if (!source.hasOwnProperty(key)) continue;
+        if (
+          source[key] && typeof source[key] === 'object' && !Array.isArray(source[key]) &&
+          result[key] && typeof result[key] === 'object' && !Array.isArray(result[key])
+        ) {
+          result[key] = deepMerge(result[key], source[key]);
+        } else {
+          result[key] = source[key];
+        }
+      }
+      return result;
+    }
+
+    function registerComponent(id, definition) {
+      componentRegistry.set(id, definition);
+      console.log('[SDComponent] Registered component:', id);
+    }
+
+    function renderComponent(element, depth) {
+      depth = depth || 0;
+      var componentId = element.getAttribute('componentid') || element.getAttribute('ref');
+      var instanceId = element.getAttribute('instance');
+      var propsAttr = element.getAttribute('props');
+
+      if (!componentId) {
+        console.warn('[SDComponent] Missing componentId attribute on sd-component');
+        return;
+      }
+
+      if (depth >= MAX_RENDER_DEPTH) {
+        console.warn('[SDComponent] Max render depth reached for:', componentId);
+        element.setAttribute('data-error', 'max-depth');
+        return;
+      }
+
+      var definition = componentRegistry.get(componentId);
+      if (!definition) {
+        console.warn('[SDComponent] Component not found:', componentId);
+        element.setAttribute('data-pending', 'true');
+        return;
+      }
+
+      var instanceProps = {};
+      if (propsAttr) {
+        try { instanceProps = JSON.parse(propsAttr); }
+        catch (e) { console.warn('[SDComponent] Invalid props JSON:', propsAttr); }
+      }
+
+      var defaultProps = buildDefaultProps(definition);
+      var finalProps = deepMerge(defaultProps, instanceProps);
+
+      element.innerHTML = definition.htmlContent;
+
+      if (window.PetiteVue) {
+        finalProps.$emit = function(eventName, payload) {
+          if (payload && typeof payload === 'object' && payload.href) {
+            window.location.href = payload.href;
+            return;
+          }
+          var customEvent = new CustomEvent('sd-' + eventName, {
+            detail: payload, bubbles: true, composed: true,
+          });
+          element.dispatchEvent(customEvent);
+        };
+        window.PetiteVue.createApp(finalProps).mount(element);
+      } else {
+        console.warn('[SDComponent] Petite-Vue not loaded, template syntax will not be resolved');
+      }
+
+      instanceRegistry.set(instanceId, {
+        componentId: componentId,
+        element: element,
+        props: finalProps,
+        version: definition.version,
+      });
+
+      element.removeAttribute('data-pending');
+      element.setAttribute('data-rendered', 'true');
+      element.setAttribute('data-version', String(definition.version));
+      console.log('[SDComponent] Rendered:', componentId, instanceId);
+
+      // Render any nested sd-component children that were just injected
+      var nestedElements = element.querySelectorAll('sd-component[componentid], sd-component[ref]');
+      if (nestedElements.length > 0) {
+        var missingIds = [];
+        nestedElements.forEach(function(nested) {
+          var nestedId = nested.getAttribute('componentid') || nested.getAttribute('ref');
+          if (nestedId && !componentRegistry.has(nestedId)) {
+            missingIds.push(nestedId);
+          }
+        });
+
+        if (missingIds.length > 0) {
+          // Fetch missing nested components, then render
+          loadComponentsByIds(missingIds).then(function() {
+            nestedElements.forEach(function(nested) {
+              if (!nested.getAttribute('data-rendered')) {
+                renderComponent(nested, depth + 1);
+              }
+            });
+          });
+        } else {
+          // All nested definitions already loaded — render immediately
+          nestedElements.forEach(function(nested) {
+            if (!nested.getAttribute('data-rendered')) {
+              renderComponent(nested, depth + 1);
+            }
+          });
+        }
+      }
+    }
+
+    function updateComponentInstances(componentId) {
+      var elements = document.querySelectorAll('sd-component[componentid="' + componentId + '"], sd-component[ref="' + componentId + '"]');
+      elements.forEach(function(el) { renderComponent(el); });
+    }
+
+    function initializeComponents() {
+      var elements = document.querySelectorAll('sd-component[componentid], sd-component[ref]');
+      elements.forEach(function(el) {
+        if (!el.getAttribute('data-rendered')) { renderComponent(el); }
+      });
+    }
+
+    async function loadComponentsByIds(ids) {
+      if (!ids || ids.length === 0) return;
+      // Deduplicate and filter already-loaded
+      var uniqueIds = ids.filter(function(id, i, arr) {
+        return arr.indexOf(id) === i && !componentRegistry.has(id);
+      });
+      if (uniqueIds.length === 0) return;
+
+      try {
+        console.log('[SDComponent] Batch loading components:', uniqueIds);
+        var response = await fetch(API_BASE + '/v1/design-drafts/components/batch', {
+          method: 'POST',
+          headers: { 'Content-Type': 'application/json' },
+          body: JSON.stringify({ componentIds: uniqueIds }),
+        });
+        if (!response.ok) throw new Error('Batch load failed: ' + response.status);
+        var components = await response.json();
+        console.log('[SDComponent] Batch loaded', components.length, 'components');
+        components.forEach(function(comp) { registerComponent(comp.id, comp); });
+      } catch (error) {
+        console.error('[SDComponent] Failed to batch load components:', error);
+      }
+    }
+
+    async function loadComponentsForDraft() {
+      if (!DRAFT_ID) {
+        console.warn('[SDComponent] No draft ID configured');
+        showPage();
+        return;
+      }
+      try {
+        console.log('[SDComponent] Loading components for draft:', DRAFT_ID);
+        var response = await fetch(API_BASE + '/v1/design-drafts/' + DRAFT_ID + '/components', {
+          method: 'GET',
+          headers: { 'Content-Type': 'application/json' },
+        });
+        if (!response.ok) throw new Error('Failed to load components: ' + response.status);
+        var components = await response.json();
+        console.log('[SDComponent] Loaded', components.length, 'components');
+        components.forEach(function(comp) { registerComponent(comp.id, comp); });
+        initializeComponents();
+        showPage();
+      } catch (error) {
+        console.error('[SDComponent] Failed to load components:', error);
+        showPage();
+      }
+    }
+
+    function findReferencedComponents() {
+      var elements = document.querySelectorAll('sd-component[componentid], sd-component[ref]');
+      var ids = new Set();
+      elements.forEach(function(el) {
+        var ref = el.getAttribute('componentid') || el.getAttribute('ref');
+        if (ref) ids.add(ref);
+      });
+      return Array.from(ids);
+    }
+
+    window.__SD_COMPONENTS__ = {
+      register: registerComponent,
+      render: renderComponent,
+      update: updateComponentInstances,
+      loadForDraft: loadComponentsForDraft,
+      loadByIds: loadComponentsByIds,
+      init: initializeComponents,
+      findRefs: findReferencedComponents,
+      getRegistry: function() { return componentRegistry; },
+      getInstances: function() { return instanceRegistry; },
+      getDraftId: function() { return DRAFT_ID; },
+    };
+
+    window.addEventListener('message', function(event) {
+      if (event.data && event.data.type === 'SD_COMPONENT_UPDATE') {
+        var cId = event.data.componentId;
+        var def = event.data.definition;
+        if (cId && def) { registerComponent(cId, def); updateComponentInstances(cId); }
+      }
+      if (event.data && event.data.type === 'SD_COMPONENTS_REGISTER') {
+        var comps = event.data.components;
+        if (Array.isArray(comps)) {
+          comps.forEach(function(c) { registerComponent(c.id, c); });
+          initializeComponents();
+        }
+      }
+    });
+
+    function bootComponents() {
+      // Pre-register components from __SD_COMPONENT_PRELOAD__ (injected by backend for standalone previews)
+      if (window.__SD_COMPONENT_PRELOAD__ && Array.isArray(window.__SD_COMPONENT_PRELOAD__)) {
+        console.log('[SDComponent] Pre-registering', window.__SD_COMPONENT_PRELOAD__.length, 'preloaded components');
+        window.__SD_COMPONENT_PRELOAD__.forEach(function(comp) {
+          registerComponent(comp.id, comp);
+        });
+      }
+
+      var refs = findReferencedComponents();
+      var unloaded = refs.filter(function(id) { return !componentRegistry.has(id); });
+
+      if (unloaded.length > 0) {
+        if (DRAFT_ID) {
+          loadComponentsForDraft();
+        } else {
+          // No draft ID — try batch loading the missing IDs directly
+          loadComponentsByIds(unloaded).then(function() {
+            initializeComponents();
+            showPage();
+          });
+        }
+      } else if (refs.length > 0) {
+        // All components already registered (e.g. from preload) — render immediately
+        initializeComponents();
+        showPage();
+      } else {
+        showPage();
+      }
+    }
+
+    if (document.readyState === 'loading') {
+      document.addEventListener('DOMContentLoaded', bootComponents);
+    } else {
+      bootComponents();
+    }
+
+    var observer = new MutationObserver(function(mutations) {
+      var hasNew = false;
+      mutations.forEach(function(m) {
+        m.addedNodes.forEach(function(node) {
+          if (node.nodeType === 1) {
+            if (node.tagName === 'SD-COMPONENT') { hasNew = true; }
+            else if (node.querySelector) {
+              if (node.querySelectorAll('sd-component[componentid], sd-component[ref]').length > 0) hasNew = true;
+            }
+          }
+        });
+      });
+      if (hasNew) {
+        var refs = findReferencedComponents();
+        var unloaded = refs.filter(function(id) { return !componentRegistry.has(id); });
+        if (unloaded.length > 0) {
+          loadComponentsByIds(unloaded).then(function() {
+            initializeComponents();
+          });
+        } else {
+          initializeComponents();
+        }
+      }
+    });
+    observer.observe(document.body, { childList: true, subtree: true });
+
+    console.log('[SDComponent] Runtime initialized');
+  })();
+    </script>
+</body>
+</html>

+ 1 - 0
EasyTemplate.Tool/Entity/System/SystemMenu.cs

@@ -100,6 +100,7 @@ public class SystemMenuSeedData : ISeedData<SystemMenu>
             new SystemMenu() { Id = 21, ParentId = 0, Path="/setting/nozzlesetting", Name="油枪配置", Key="setting.nozzle", Icon="snippets", Sort=2, Enabled=true, CreateTime = DateTime.Now },
             new SystemMenu() { Id = 22, ParentId = 0, Path="/setting/unifiedsetting", Name="整合配置", Key="setting.unified", Icon="snippets", Sort=2, Enabled=true, CreateTime = DateTime.Now },
             new SystemMenu() { Id = 23, ParentId = 0, Path="/warning_day", Name="35天预报警", Key="warning_day", Icon="snippets", Sort=2, Enabled=true, CreateTime = DateTime.Now },
+            new SystemMenu() { Id = 24, ParentId = 0, Path="/home2", Name="home2", Key="home2", Icon="snippets", Sort=2, Enabled=true, CreateTime = DateTime.Now },
 
         ];
 }

BIN
tmptestproject/.vs/BlazorWeb1/CopilotIndices/17.13.444.19527/CodeChunks.db


BIN
tmptestproject/.vs/BlazorWeb1/CopilotIndices/17.13.444.19527/SemanticSymbols.db


BIN
tmptestproject/.vs/BlazorWeb1/FileContentIndex/6b4e9cbd-5106-42bf-9ff4-425b512aa9da.vsidx


+ 0 - 677
tmptestproject/.vs/BlazorWeb1/v17/DocumentLayout.backup.json

@@ -1,677 +0,0 @@
-{
-  "Version": 1,
-  "WorkspaceRootPath": "C:\\bitbucket\\VRSystem\\tmptestproject\\",
-  "Documents": [
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\server\\udplistenerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\server\\udplistenerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\server\\serialportservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\server\\serialportservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\server\\handledata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\server\\handledata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\home.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\home.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\nozzle.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\nozzle.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\server\\globaltool.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\server\\globaltool.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\sensorbutton.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\sensorbutton.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\pageswitcher.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\pageswitcher.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\error.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\error.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\counter2.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\counter2.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\counter.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\counter.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\child3.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\child3.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\child.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\child.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\server\\todoitem.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\server\\todoitem.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\server\\myservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\server\\myservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\layout\\navmenu.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\layout\\navmenu.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\models\\pizzaspecial.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\models\\pizzaspecial.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\app.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\app.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\sensordetailmodal.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\sensordetailmodal.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\10049567\\AppData\\Local\\Temp\\.vsdbgsrc\\c5b2729678e1a03df19e65899b4ad191802bd617a3623b940d97308bcc2b98d9\\ClientProxyExtensions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\server\\pizzaservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\server\\pizzaservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\routes.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\routes.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\layout\\mainlayout.razor.css||{A5401142-F49D-43DB-90B1-F57BA349E55C}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\layout\\mainlayout.razor.css||{A5401142-F49D-43DB-90B1-F57BA349E55C}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\wwwroot\\css\\site.css||{A5401142-F49D-43DB-90B1-F57BA349E55C}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\wwwroot\\css\\site.css||{A5401142-F49D-43DB-90B1-F57BA349E55C}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\layout\\nav-o.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\layout\\nav-o.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\wwwroot\\app.css||{A5401142-F49D-43DB-90B1-F57BA349E55C}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\wwwroot\\app.css||{A5401142-F49D-43DB-90B1-F57BA349E55C}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\_imports.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\_imports.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\blazorweb1.csproj||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\blazorweb1.csproj||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\userprofile.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\userprofile.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\models\\pizzasalesstate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\models\\pizzasalesstate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\weather.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\weather.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\buypizza.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\buypizza.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\todo.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\todo.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\wwwroot\\css\\bootstrap\\bootstrap.min.css||{A5401142-F49D-43DB-90B1-F57BA349E55C}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\wwwroot\\css\\bootstrap\\bootstrap.min.css||{A5401142-F49D-43DB-90B1-F57BA349E55C}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\wwwroot\\css\\font\\quicksand.css||{A5401142-F49D-43DB-90B1-F57BA349E55C}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\wwwroot\\css\\font\\quicksand.css||{A5401142-F49D-43DB-90B1-F57BA349E55C}"
-    }
-  ],
-  "DocumentGroupContainers": [
-    {
-      "Orientation": 0,
-      "VerticalTabListWidth": 256,
-      "DocumentGroups": [
-        {
-          "DockedWidth": 200,
-          "SelectedChildIndex": 2,
-          "Children": [
-            {
-              "$type": "Document",
-              "DocumentIndex": 4,
-              "Title": "Home.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Home.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\Home.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Home.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\Home.razor",
-              "ViewState": "AgIAANkAAAAAAAAAAAAlwOIAAAA0AAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-26T03:18:12.845Z",
-              "IsPinned": true,
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 5,
-              "Title": "Nozzle.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Nozzle.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\Nozzle.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Nozzle.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\Nozzle.razor",
-              "ViewState": "AgIAACEAAAAAAAAAAAAlwCwAAAAqAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-27T09:17:04.218Z",
-              "IsPinned": true,
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 0,
-              "Title": "UdpListenerService.cs",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\UdpListenerService.cs",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Server\\UdpListenerService.cs",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\UdpListenerService.cs",
-              "RelativeToolTip": "BlazorWeb1\\Server\\UdpListenerService.cs",
-              "ViewState": "AgIAACsAAAAAAAAAAAAkwDMAAAAMAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-01-29T01:49:40.072Z",
-              "IsPinned": true,
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 2,
-              "Title": "SerialPortService.cs",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\SerialPortService.cs",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Server\\SerialPortService.cs",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\SerialPortService.cs",
-              "RelativeToolTip": "BlazorWeb1\\Server\\SerialPortService.cs",
-              "ViewState": "AgIAABgAAAAAAAAAAAAEwFUBAAAmAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-05T03:47:42.787Z",
-              "IsPinned": true,
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 1,
-              "Title": "Program.cs",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Program.cs",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Program.cs",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Program.cs",
-              "RelativeToolTip": "BlazorWeb1\\Program.cs",
-              "ViewState": "AgIAACQAAAAAAAAAAAAEwBgAAAAOAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-01-26T03:17:18.129Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 3,
-              "Title": "HandleData.cs",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\HandleData.cs",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Server\\HandleData.cs",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\HandleData.cs",
-              "RelativeToolTip": "BlazorWeb1\\Server\\HandleData.cs",
-              "ViewState": "AgIAAF4AAAAAAAAAAAAlwG4AAAAmAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-05T08:06:24.424Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 6,
-              "Title": "GlobalTool.cs",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\GlobalTool.cs",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Server\\GlobalTool.cs",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\GlobalTool.cs",
-              "RelativeToolTip": "BlazorWeb1\\Server\\GlobalTool.cs",
-              "ViewState": "AgIAAP8BAAAAAAAAAAAAAMMBAAAgAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-01-29T01:48:36.528Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 7,
-              "Title": "SensorButton.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\SensorButton.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\SensorButton.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\SensorButton.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\SensorButton.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAA8AAAANAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-29T08:50:33.377Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 8,
-              "Title": "PageSwitcher.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\PageSwitcher.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\PageSwitcher.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\PageSwitcher.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\PageSwitcher.razor",
-              "ViewState": "AgIAADwAAAAAAAAAAAAiwEwAAAAIAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-02-25T06:12:28.128Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 10,
-              "Title": "Counter2.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Counter2.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\Counter2.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Counter2.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\Counter2.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-26T03:55:49.42Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 11,
-              "Title": "Counter.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Counter.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\Counter.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Counter.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\Counter.razor",
-              "ViewState": "AgIAABMAAAAAAAAAAAAAABcAAAAgAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-26T03:18:20.811Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 9,
-              "Title": "Error.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Error.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\Error.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Error.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\Error.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-26T03:18:26.12Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 12,
-              "Title": "Child3.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Child3.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\Child3.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Child3.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\Child3.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAQAAAAHAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-26T10:17:41.097Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 13,
-              "Title": "Child.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Child.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\Child.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Child.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\Child.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-26T09:41:08.302Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 15,
-              "Title": "MyService.cs",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\MyService.cs",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Server\\MyService.cs",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\MyService.cs",
-              "RelativeToolTip": "BlazorWeb1\\Server\\MyService.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAAaAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-09T10:18:06.552Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 14,
-              "Title": "TodoItem.cs",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\TodoItem.cs",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Server\\TodoItem.cs",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\TodoItem.cs",
-              "RelativeToolTip": "BlazorWeb1\\Server\\TodoItem.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAIAAAAZAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-01-26T06:41:56.682Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 18,
-              "Title": "App.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\App.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\App.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\App.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\App.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAABIwA4AAAAGAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-26T03:17:28.896Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 16,
-              "Title": "NavMenu.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Layout\\NavMenu.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Layout\\NavMenu.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Layout\\NavMenu.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Layout\\NavMenu.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAABAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-02-09T09:16:40.301Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 17,
-              "Title": "PizzaSpecial.cs",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Models\\PizzaSpecial.cs",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Models\\PizzaSpecial.cs",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Models\\PizzaSpecial.cs",
-              "RelativeToolTip": "BlazorWeb1\\Models\\PizzaSpecial.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAuwAYAAAAWAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-01-26T08:10:17.422Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 20,
-              "Title": "ClientProxyExtensions.cs",
-              "DocumentMoniker": "C:\\Users\\10049567\\AppData\\Local\\Temp\\.vsdbgsrc\\c5b2729678e1a03df19e65899b4ad191802bd617a3623b940d97308bcc2b98d9\\ClientProxyExtensions.cs",
-              "RelativeDocumentMoniker": "..\\..\\..\\Users\\10049567\\AppData\\Local\\Temp\\.vsdbgsrc\\c5b2729678e1a03df19e65899b4ad191802bd617a3623b940d97308bcc2b98d9\\ClientProxyExtensions.cs",
-              "ToolTip": "C:\\Users\\10049567\\AppData\\Local\\Temp\\.vsdbgsrc\\c5b2729678e1a03df19e65899b4ad191802bd617a3623b940d97308bcc2b98d9\\ClientProxyExtensions.cs",
-              "RelativeToolTip": "..\\..\\..\\Users\\10049567\\AppData\\Local\\Temp\\.vsdbgsrc\\c5b2729678e1a03df19e65899b4ad191802bd617a3623b940d97308bcc2b98d9\\ClientProxyExtensions.cs",
-              "ViewState": "AgIAAA8AAAAAAAAAAAAEwBQAAAA5AAAAAQAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-01-30T09:00:20.504Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 19,
-              "Title": "SensorDetailModal.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\SensorDetailModal.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\SensorDetailModal.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\SensorDetailModal.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\SensorDetailModal.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAYAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-29T08:51:15.587Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 27,
-              "Title": "app.css",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\wwwroot\\app.css",
-              "RelativeDocumentMoniker": "BlazorWeb1\\wwwroot\\app.css",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\wwwroot\\app.css",
-              "RelativeToolTip": "BlazorWeb1\\wwwroot\\app.css",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAoAAAAdAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003000|",
-              "WhenOpened": "2026-01-26T08:14:31.992Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 21,
-              "Title": "appsettings.json",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\appsettings.json",
-              "RelativeDocumentMoniker": "BlazorWeb1\\appsettings.json",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\appsettings.json",
-              "RelativeToolTip": "BlazorWeb1\\appsettings.json",
-              "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
-              "WhenOpened": "2026-01-26T03:17:23.495Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 24,
-              "Title": "MainLayout.razor.css",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Layout\\MainLayout.razor.css",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Layout\\MainLayout.razor.css",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Layout\\MainLayout.razor.css",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Layout\\MainLayout.razor.css",
-              "ViewState": "AgIAACwAAAAAAAAAAAAowDwAAAAOAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003000|",
-              "WhenOpened": "2026-01-28T05:49:20.138Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 22,
-              "Title": "PizzaService.cs",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\PizzaService.cs",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Server\\PizzaService.cs",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\PizzaService.cs",
-              "RelativeToolTip": "BlazorWeb1\\Server\\PizzaService.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAIAAAAbAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-01-26T08:49:51.168Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 25,
-              "Title": "site.css",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\wwwroot\\css\\site.css",
-              "RelativeDocumentMoniker": "BlazorWeb1\\wwwroot\\css\\site.css",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\wwwroot\\css\\site.css",
-              "RelativeToolTip": "BlazorWeb1\\wwwroot\\css\\site.css",
-              "ViewState": "AgIAAMQAAAAAAAAAAAAYwM8AAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003000|",
-              "WhenOpened": "2026-01-26T08:14:16.616Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 23,
-              "Title": "Routes.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Routes.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Routes.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Routes.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Routes.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAcAAAAvAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-26T03:17:47.517Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 26,
-              "Title": "Nav-o.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Layout\\Nav-o.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Layout\\Nav-o.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Layout\\Nav-o.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Layout\\Nav-o.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-28T03:48:54.263Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 30,
-              "Title": "UserProfile.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\UserProfile.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\UserProfile.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\UserProfile.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\UserProfile.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAcAAAAPAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-27T03:03:29.25Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 34,
-              "Title": "Todo.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Todo.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\Todo.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Todo.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\Todo.razor",
-              "ViewState": "AgIAAAcAAAAAAAAAAABUwBoAAAAFAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-26T06:51:28.988Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 28,
-              "Title": "_Imports.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\_Imports.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\_Imports.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\_Imports.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\_Imports.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAADwvwoAAAAQAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-27T07:11:12.244Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 29,
-              "Title": "BlazorWeb1",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\BlazorWeb1.csproj",
-              "RelativeDocumentMoniker": "BlazorWeb1\\BlazorWeb1.csproj",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\BlazorWeb1.csproj",
-              "RelativeToolTip": "BlazorWeb1\\BlazorWeb1.csproj",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|",
-              "WhenOpened": "2026-01-27T06:25:52.863Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 33,
-              "Title": "BuyPizza.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\BuyPizza.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\BuyPizza.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\BuyPizza.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\BuyPizza.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAIAAAAdAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-27T01:57:43.5Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 31,
-              "Title": "PizzaSalesState.cs",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Models\\PizzaSalesState.cs",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Models\\PizzaSalesState.cs",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Models\\PizzaSalesState.cs",
-              "RelativeToolTip": "BlazorWeb1\\Models\\PizzaSalesState.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAQAAAAbAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-01-27T01:55:43.817Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 32,
-              "Title": "Weather.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Weather.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\Weather.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Weather.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\Weather.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-26T03:18:15.577Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 35,
-              "Title": "bootstrap.min.css",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\wwwroot\\css\\bootstrap\\bootstrap.min.css",
-              "RelativeDocumentMoniker": "BlazorWeb1\\wwwroot\\css\\bootstrap\\bootstrap.min.css",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\wwwroot\\css\\bootstrap\\bootstrap.min.css",
-              "RelativeToolTip": "BlazorWeb1\\wwwroot\\css\\bootstrap\\bootstrap.min.css",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003000|",
-              "WhenOpened": "2026-01-26T08:14:06.218Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 36,
-              "Title": "quicksand.css",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\wwwroot\\css\\font\\quicksand.css",
-              "RelativeDocumentMoniker": "BlazorWeb1\\wwwroot\\css\\font\\quicksand.css",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\wwwroot\\css\\font\\quicksand.css",
-              "RelativeToolTip": "BlazorWeb1\\wwwroot\\css\\font\\quicksand.css",
-              "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003000|",
-              "WhenOpened": "2026-01-26T08:14:13.887Z",
-              "EditorCaption": ""
-            }
-          ]
-        },
-        {
-          "DockedWidth": 1204,
-          "SelectedChildIndex": -1,
-          "Children": [
-            {
-              "$type": "Bookmark",
-              "Name": "ST:0:0:{004be353-6879-467c-9d1e-9ac23cdf6d49}"
-            },
-            {
-              "$type": "Bookmark",
-              "Name": "ST:0:0:{0ad07096-bba9-4900-a651-0598d26f6d24}"
-            },
-            {
-              "$type": "Bookmark",
-              "Name": "ST:1:0:{d212f56b-c48a-434c-a121-1c5d80b59b9f}"
-            },
-            {
-              "$type": "Bookmark",
-              "Name": "ST:0:0:{d78612c7-9962-4b83-95d9-268046dad23a}"
-            },
-            {
-              "$type": "Bookmark",
-              "Name": "ST:0:0:{34e76e81-ee4a-11d0-ae2e-00a0c90fffc3}"
-            }
-          ]
-        }
-      ]
-    }
-  ]
-}

+ 0 - 643
tmptestproject/.vs/BlazorWeb1/v17/DocumentLayout.json

@@ -1,643 +0,0 @@
-{
-  "Version": 1,
-  "WorkspaceRootPath": "C:\\bitbucket\\VRSystem\\tmptestproject\\",
-  "Documents": [
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\pageswitcher.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\pageswitcher.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\home.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\home.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\server\\udplistenerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\server\\udplistenerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\server\\serialportservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\server\\serialportservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\server\\handledata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\server\\handledata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\nozzle.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\nozzle.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\server\\globaltool.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\server\\globaltool.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\sensorbutton.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\sensorbutton.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\error.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\error.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\counter2.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\counter2.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\counter.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\counter.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\child3.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\child3.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\child.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\child.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\server\\todoitem.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\server\\todoitem.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\server\\myservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\server\\myservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\layout\\navmenu.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\layout\\navmenu.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\models\\pizzaspecial.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\models\\pizzaspecial.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\app.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\app.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\sensordetailmodal.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\sensordetailmodal.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\10049567\\AppData\\Local\\Temp\\.vsdbgsrc\\c5b2729678e1a03df19e65899b4ad191802bd617a3623b940d97308bcc2b98d9\\ClientProxyExtensions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\server\\pizzaservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\server\\pizzaservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\routes.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\routes.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\layout\\mainlayout.razor.css||{A5401142-F49D-43DB-90B1-F57BA349E55C}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\layout\\mainlayout.razor.css||{A5401142-F49D-43DB-90B1-F57BA349E55C}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\wwwroot\\css\\site.css||{A5401142-F49D-43DB-90B1-F57BA349E55C}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\wwwroot\\css\\site.css||{A5401142-F49D-43DB-90B1-F57BA349E55C}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\layout\\nav-o.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\layout\\nav-o.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\wwwroot\\app.css||{A5401142-F49D-43DB-90B1-F57BA349E55C}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\wwwroot\\app.css||{A5401142-F49D-43DB-90B1-F57BA349E55C}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\_imports.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\_imports.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\blazorweb1.csproj||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\blazorweb1.csproj||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\userprofile.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\userprofile.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\models\\pizzasalesstate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\models\\pizzasalesstate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\weather.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\weather.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\buypizza.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\buypizza.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\components\\pages\\todo.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\components\\pages\\todo.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\wwwroot\\css\\bootstrap\\bootstrap.min.css||{A5401142-F49D-43DB-90B1-F57BA349E55C}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\wwwroot\\css\\bootstrap\\bootstrap.min.css||{A5401142-F49D-43DB-90B1-F57BA349E55C}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|c:\\bitbucket\\vrsystem\\tmptestproject\\blazorweb1\\wwwroot\\css\\font\\quicksand.css||{A5401142-F49D-43DB-90B1-F57BA349E55C}",
-      "RelativeMoniker": "D:0:0:{AA8435A5-4838-4F39-91D0-02932C0F83A5}|BlazorWeb1\\BlazorWeb1.csproj|solutionrelative:blazorweb1\\wwwroot\\css\\font\\quicksand.css||{A5401142-F49D-43DB-90B1-F57BA349E55C}"
-    }
-  ],
-  "DocumentGroupContainers": [
-    {
-      "Orientation": 0,
-      "VerticalTabListWidth": 256,
-      "DocumentGroups": [
-        {
-          "DockedWidth": 200,
-          "SelectedChildIndex": 6,
-          "Children": [
-            {
-              "$type": "Document",
-              "DocumentIndex": 1,
-              "Title": "Home.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Home.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\Home.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Home.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\Home.razor",
-              "ViewState": "AgIAACQAAAAAAAAAAAAAAC8AAAARAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-26T03:18:12.845Z",
-              "IsPinned": true,
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 6,
-              "Title": "Nozzle.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Nozzle.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\Nozzle.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Nozzle.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\Nozzle.razor",
-              "ViewState": "AgIAACEAAAAAAAAAAAAlwCwAAAAqAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-27T09:17:04.218Z",
-              "IsPinned": true
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 2,
-              "Title": "UdpListenerService.cs",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\UdpListenerService.cs",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Server\\UdpListenerService.cs",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\UdpListenerService.cs",
-              "RelativeToolTip": "BlazorWeb1\\Server\\UdpListenerService.cs",
-              "ViewState": "AgIAACsAAAAAAAAAAAAkwDAAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-01-29T01:49:40.072Z",
-              "IsPinned": true,
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 4,
-              "Title": "SerialPortService.cs",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\SerialPortService.cs",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Server\\SerialPortService.cs",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\SerialPortService.cs",
-              "RelativeToolTip": "BlazorWeb1\\Server\\SerialPortService.cs",
-              "ViewState": "AgIAABgAAAAAAAAAAAAEwFUBAAAmAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-05T03:47:42.787Z",
-              "IsPinned": true
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 7,
-              "Title": "GlobalTool.cs",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\GlobalTool.cs",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Server\\GlobalTool.cs",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\GlobalTool.cs",
-              "RelativeToolTip": "BlazorWeb1\\Server\\GlobalTool.cs",
-              "ViewState": "AgIAAP8BAAAAAAAAAAAAAMMBAAAgAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-01-29T01:48:36.528Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 8,
-              "Title": "SensorButton.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\SensorButton.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\SensorButton.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\SensorButton.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\SensorButton.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAA8AAAANAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-29T08:50:33.377Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 0,
-              "Title": "PageSwitcher.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\PageSwitcher.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\PageSwitcher.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\PageSwitcher.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\PageSwitcher.razor",
-              "ViewState": "AgIAABgAAAAAAAAAAAAAACMAAAASAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-02-25T06:12:28.128Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 5,
-              "Title": "HandleData.cs",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\HandleData.cs",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Server\\HandleData.cs",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\HandleData.cs",
-              "RelativeToolTip": "BlazorWeb1\\Server\\HandleData.cs",
-              "ViewState": "AgIAAF4AAAAAAAAAAAAlwG4AAAAmAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-05T08:06:24.424Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 3,
-              "Title": "Program.cs",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Program.cs",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Program.cs",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Program.cs",
-              "RelativeToolTip": "BlazorWeb1\\Program.cs",
-              "ViewState": "AgIAACQAAAAAAAAAAAAEwBgAAAAOAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-01-26T03:17:18.129Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 10,
-              "Title": "Counter2.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Counter2.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\Counter2.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Counter2.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\Counter2.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-26T03:55:49.42Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 11,
-              "Title": "Counter.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Counter.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\Counter.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Counter.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\Counter.razor",
-              "ViewState": "AgIAABMAAAAAAAAAAAAAABcAAAAgAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-26T03:18:20.811Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 9,
-              "Title": "Error.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Error.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\Error.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Error.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\Error.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-26T03:18:26.12Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 12,
-              "Title": "Child3.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Child3.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\Child3.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Child3.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\Child3.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAQAAAAHAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-26T10:17:41.097Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 13,
-              "Title": "Child.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Child.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\Child.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Child.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\Child.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-26T09:41:08.302Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 15,
-              "Title": "MyService.cs",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\MyService.cs",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Server\\MyService.cs",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\MyService.cs",
-              "RelativeToolTip": "BlazorWeb1\\Server\\MyService.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAAaAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-09T10:18:06.552Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 14,
-              "Title": "TodoItem.cs",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\TodoItem.cs",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Server\\TodoItem.cs",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\TodoItem.cs",
-              "RelativeToolTip": "BlazorWeb1\\Server\\TodoItem.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAIAAAAZAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-01-26T06:41:56.682Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 18,
-              "Title": "App.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\App.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\App.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\App.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\App.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAABIwA4AAAAGAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-26T03:17:28.896Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 16,
-              "Title": "NavMenu.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Layout\\NavMenu.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Layout\\NavMenu.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Layout\\NavMenu.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Layout\\NavMenu.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAABAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-02-09T09:16:40.301Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 17,
-              "Title": "PizzaSpecial.cs",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Models\\PizzaSpecial.cs",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Models\\PizzaSpecial.cs",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Models\\PizzaSpecial.cs",
-              "RelativeToolTip": "BlazorWeb1\\Models\\PizzaSpecial.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAuwAYAAAAWAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-01-26T08:10:17.422Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 20,
-              "Title": "ClientProxyExtensions.cs",
-              "DocumentMoniker": "C:\\Users\\10049567\\AppData\\Local\\Temp\\.vsdbgsrc\\c5b2729678e1a03df19e65899b4ad191802bd617a3623b940d97308bcc2b98d9\\ClientProxyExtensions.cs",
-              "RelativeDocumentMoniker": "..\\..\\..\\Users\\10049567\\AppData\\Local\\Temp\\.vsdbgsrc\\c5b2729678e1a03df19e65899b4ad191802bd617a3623b940d97308bcc2b98d9\\ClientProxyExtensions.cs",
-              "ToolTip": "C:\\Users\\10049567\\AppData\\Local\\Temp\\.vsdbgsrc\\c5b2729678e1a03df19e65899b4ad191802bd617a3623b940d97308bcc2b98d9\\ClientProxyExtensions.cs",
-              "RelativeToolTip": "..\\..\\..\\Users\\10049567\\AppData\\Local\\Temp\\.vsdbgsrc\\c5b2729678e1a03df19e65899b4ad191802bd617a3623b940d97308bcc2b98d9\\ClientProxyExtensions.cs",
-              "ViewState": "AgIAAA8AAAAAAAAAAAAEwBQAAAA5AAAAAQAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-01-30T09:00:20.504Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 19,
-              "Title": "SensorDetailModal.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\SensorDetailModal.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\SensorDetailModal.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\SensorDetailModal.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\SensorDetailModal.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAYAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-29T08:51:15.587Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 27,
-              "Title": "app.css",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\wwwroot\\app.css",
-              "RelativeDocumentMoniker": "BlazorWeb1\\wwwroot\\app.css",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\wwwroot\\app.css",
-              "RelativeToolTip": "BlazorWeb1\\wwwroot\\app.css",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAoAAAAdAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003000|",
-              "WhenOpened": "2026-01-26T08:14:31.992Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 21,
-              "Title": "appsettings.json",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\appsettings.json",
-              "RelativeDocumentMoniker": "BlazorWeb1\\appsettings.json",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\appsettings.json",
-              "RelativeToolTip": "BlazorWeb1\\appsettings.json",
-              "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
-              "WhenOpened": "2026-01-26T03:17:23.495Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 24,
-              "Title": "MainLayout.razor.css",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Layout\\MainLayout.razor.css",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Layout\\MainLayout.razor.css",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Layout\\MainLayout.razor.css",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Layout\\MainLayout.razor.css",
-              "ViewState": "AgIAACwAAAAAAAAAAAAowDwAAAAOAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003000|",
-              "WhenOpened": "2026-01-28T05:49:20.138Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 22,
-              "Title": "PizzaService.cs",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\PizzaService.cs",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Server\\PizzaService.cs",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Server\\PizzaService.cs",
-              "RelativeToolTip": "BlazorWeb1\\Server\\PizzaService.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAIAAAAbAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-01-26T08:49:51.168Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 25,
-              "Title": "site.css",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\wwwroot\\css\\site.css",
-              "RelativeDocumentMoniker": "BlazorWeb1\\wwwroot\\css\\site.css",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\wwwroot\\css\\site.css",
-              "RelativeToolTip": "BlazorWeb1\\wwwroot\\css\\site.css",
-              "ViewState": "AgIAAMQAAAAAAAAAAAAYwM8AAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003000|",
-              "WhenOpened": "2026-01-26T08:14:16.616Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 23,
-              "Title": "Routes.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Routes.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Routes.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Routes.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Routes.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAcAAAAvAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-26T03:17:47.517Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 26,
-              "Title": "Nav-o.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Layout\\Nav-o.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Layout\\Nav-o.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Layout\\Nav-o.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Layout\\Nav-o.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-28T03:48:54.263Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 30,
-              "Title": "UserProfile.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\UserProfile.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\UserProfile.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\UserProfile.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\UserProfile.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAcAAAAPAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-27T03:03:29.25Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 34,
-              "Title": "Todo.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Todo.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\Todo.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Todo.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\Todo.razor",
-              "ViewState": "AgIAAAcAAAAAAAAAAABUwBoAAAAFAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-26T06:51:28.988Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 28,
-              "Title": "_Imports.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\_Imports.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\_Imports.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\_Imports.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\_Imports.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAADwvwoAAAAQAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-27T07:11:12.244Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 29,
-              "Title": "BlazorWeb1",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\BlazorWeb1.csproj",
-              "RelativeDocumentMoniker": "BlazorWeb1\\BlazorWeb1.csproj",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\BlazorWeb1.csproj",
-              "RelativeToolTip": "BlazorWeb1\\BlazorWeb1.csproj",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|",
-              "WhenOpened": "2026-01-27T06:25:52.863Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 33,
-              "Title": "BuyPizza.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\BuyPizza.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\BuyPizza.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\BuyPizza.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\BuyPizza.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAIAAAAdAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-27T01:57:43.5Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 31,
-              "Title": "PizzaSalesState.cs",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Models\\PizzaSalesState.cs",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Models\\PizzaSalesState.cs",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Models\\PizzaSalesState.cs",
-              "RelativeToolTip": "BlazorWeb1\\Models\\PizzaSalesState.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAQAAAAbAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-01-27T01:55:43.817Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 32,
-              "Title": "Weather.razor",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Weather.razor",
-              "RelativeDocumentMoniker": "BlazorWeb1\\Components\\Pages\\Weather.razor",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\Components\\Pages\\Weather.razor",
-              "RelativeToolTip": "BlazorWeb1\\Components\\Pages\\Weather.razor",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
-              "WhenOpened": "2026-01-26T03:18:15.577Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 35,
-              "Title": "bootstrap.min.css",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\wwwroot\\css\\bootstrap\\bootstrap.min.css",
-              "RelativeDocumentMoniker": "BlazorWeb1\\wwwroot\\css\\bootstrap\\bootstrap.min.css",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\wwwroot\\css\\bootstrap\\bootstrap.min.css",
-              "RelativeToolTip": "BlazorWeb1\\wwwroot\\css\\bootstrap\\bootstrap.min.css",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003000|",
-              "WhenOpened": "2026-01-26T08:14:06.218Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 36,
-              "Title": "quicksand.css",
-              "DocumentMoniker": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\wwwroot\\css\\font\\quicksand.css",
-              "RelativeDocumentMoniker": "BlazorWeb1\\wwwroot\\css\\font\\quicksand.css",
-              "ToolTip": "C:\\bitbucket\\VRSystem\\tmptestproject\\BlazorWeb1\\wwwroot\\css\\font\\quicksand.css",
-              "RelativeToolTip": "BlazorWeb1\\wwwroot\\css\\font\\quicksand.css",
-              "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003000|",
-              "WhenOpened": "2026-01-26T08:14:13.887Z"
-            }
-          ]
-        },
-        {
-          "DockedWidth": 1204,
-          "SelectedChildIndex": -1,
-          "Children": [
-            {
-              "$type": "Bookmark",
-              "Name": "ST:0:0:{004be353-6879-467c-9d1e-9ac23cdf6d49}"
-            },
-            {
-              "$type": "Bookmark",
-              "Name": "ST:0:0:{0ad07096-bba9-4900-a651-0598d26f6d24}"
-            },
-            {
-              "$type": "Bookmark",
-              "Name": "ST:1:0:{d212f56b-c48a-434c-a121-1c5d80b59b9f}"
-            },
-            {
-              "$type": "Bookmark",
-              "Name": "ST:0:0:{d78612c7-9962-4b83-95d9-268046dad23a}"
-            },
-            {
-              "$type": "Bookmark",
-              "Name": "ST:0:0:{34e76e81-ee4a-11d0-ae2e-00a0c90fffc3}"
-            }
-          ]
-        }
-      ]
-    }
-  ]
-}

BIN
tmptestproject/.vs/ProjectEvaluation/blazorweb1.metadata.v9.bin


BIN
tmptestproject/.vs/ProjectEvaluation/blazorweb1.projects.v9.bin