# Web端特化組件設計規範 ## 概述 Drama Ling Web端專屬組件設計標準,充分發揮Web端大螢幕、多視窗、鍵盤快捷鍵等優勢,提供優於移動端的學習體驗和操作效率。 ## 🗂️ 多標籤對話界面設計標準 ### 標籤頁基礎設計 基於Web端多任務處理優勢設計的對話管理系統 ```css .dialogue-tabs-container { background: white; border-bottom: 2px solid #E5E7EB; padding: 0 20px; overflow-x: auto; scrollbar-width: thin; scrollbar-color: #D1D5DB #F9FAFB; } .dialogue-tabs { display: flex; gap: 2px; min-width: fit-content; } .dialogue-tab { display: flex; align-items: center; gap: 8px; padding: 12px 20px; border: none; background: #F9FAFB; color: #6B7280; border-radius: 8px 8px 0 0; font-size: 14px; font-weight: 500; cursor: pointer; transition: all 0.3s ease; min-width: 160px; max-width: 220px; position: relative; } .dialogue-tab:hover { background: #F3F4F6; color: #374151; } .dialogue-tab.active { background: white; color: #1F2937; border-bottom: 2px solid white; margin-bottom: -2px; font-weight: 600; } .dialogue-tab.completed { background: linear-gradient(135deg, #ECFDF5 0%, #D1FAE5 100%); color: #059669; } .dialogue-tab.in-progress { background: linear-gradient(135deg, #FFFBEB 0%, #FEF3C7 100%); color: #D97706; } ``` ### 標籤內容區域 ```css .dialogue-tab-content { display: none; padding: 24px; background: white; min-height: 600px; } .dialogue-tab-content.active { display: block; animation: tab-fade-in 0.3s ease-out; } @keyframes tab-fade-in { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } ``` ### 標籤操作元素 ```css .tab-info { display: flex; align-items: center; flex: 1; min-width: 0; } .tab-icon { width: 16px; height: 16px; flex-shrink: 0; } .tab-title { margin-left: 6px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .tab-status { width: 8px; height: 8px; border-radius: 50%; margin-left: 8px; flex-shrink: 0; } .tab-status.completed { background: #10B981; } .tab-status.in-progress { background: #F59E0B; } .tab-status.pending { background: #D1D5DB; } .tab-close { width: 20px; height: 20px; border-radius: 50%; background: transparent; border: none; cursor: pointer; display: flex; align-items: center; justify-content: center; opacity: 0; transition: all 0.2s ease; margin-left: 8px; flex-shrink: 0; } .dialogue-tab:hover .tab-close { opacity: 1; } .tab-close:hover { background: #F3F4F6; } ``` ### 快捷鍵支援 ```css .keyboard-shortcut { position: absolute; top: 4px; right: 4px; font-size: 10px; color: #9CA3AF; background: rgba(255, 255, 255, 0.8); padding: 1px 4px; border-radius: 4px; opacity: 0; transition: opacity 0.2s ease; } .dialogue-tab:hover .keyboard-shortcut { opacity: 1; } .keyboard-shortcut.pressed { background: #6366F1; color: white; } ``` ## 📊 大螢幕統計面板設計規範 ### 統計面板佈局 ```css .statistics-dashboard { display: grid; grid-template-columns: 2fr 1fr; grid-template-rows: auto 1fr auto; gap: 20px; padding: 24px; min-height: 100vh; background: #F9FAFB; } .dashboard-header { grid-column: 1 / -1; background: white; border-radius: 12px; padding: 24px; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); } .main-statistics { background: white; border-radius: 12px; padding: 24px; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); overflow: auto; } .sidebar-widgets { display: flex; flex-direction: column; gap: 16px; } .dashboard-footer { grid-column: 1 / -1; background: white; border-radius: 12px; padding: 20px; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); } ``` ### 統計卡片組件 ```css .stat-card { background: white; border-radius: 8px; border: 1px solid #E5E7EB; padding: 20px; transition: all 0.3s ease; cursor: pointer; } .stat-card:hover { border-color: #6366F1; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1); transform: translateY(-2px); } .stat-card-header { display: flex; align-items: center; justify-content: between; margin-bottom: 16px; } .stat-icon { width: 32px; height: 32px; padding: 6px; background: #EEF2FF; border-radius: 8px; color: #6366F1; } .stat-value { font-size: 32px; font-weight: 800; color: #1F2937; font-variant-numeric: tabular-nums; margin-bottom: 4px; } .stat-label { font-size: 14px; color: #6B7280; font-weight: 500; } .stat-change { display: flex; align-items: center; gap: 4px; font-size: 12px; font-weight: 500; margin-top: 8px; } .stat-change.positive { color: #10B981; } .stat-change.negative { color: #EF4444; } .stat-change-icon { width: 12px; height: 12px; } ``` ### 互動式圖表區域 ```css .chart-container { position: relative; background: #FAFBFC; border-radius: 8px; padding: 20px; margin: 16px 0; min-height: 300px; } .chart-header { display: flex; justify-content: between; align-items: center; margin-bottom: 20px; } .chart-title { font-size: 16px; font-weight: 600; color: #1F2937; } .chart-controls { display: flex; gap: 8px; } .chart-control-btn { padding: 6px 12px; border: 1px solid #D1D5DB; background: white; border-radius: 6px; font-size: 12px; cursor: pointer; transition: all 0.2s ease; } .chart-control-btn.active { background: #6366F1; color: white; border-color: #6366F1; } .chart-canvas { width: 100%; height: 100%; min-height: 260px; } ``` ### 即時更新指示器 ```css .live-indicator { display: inline-flex; align-items: center; gap: 6px; padding: 4px 8px; background: #ECFDF5; border: 1px solid #10B981; border-radius: 12px; font-size: 11px; font-weight: 500; color: #059669; } .live-dot { width: 6px; height: 6px; background: #10B981; border-radius: 50%; animation: live-pulse 2s ease-in-out infinite; } @keyframes live-pulse { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.5; transform: scale(1.2); } } ``` ## 🔐 企業SSO界面標準 ### SSO登入頁面設計 ```css .enterprise-login { min-height: 100vh; display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); position: relative; } .enterprise-login::before { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: url('data:image/svg+xml,') repeat; } .sso-card { background: white; border-radius: 16px; box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15); padding: 40px; width: 100%; max-width: 480px; position: relative; z-index: 1; } .enterprise-logo { text-align: center; margin-bottom: 32px; } .company-logo { width: 80px; height: 80px; margin: 0 auto 16px; border-radius: 12px; background: #F3F4F6; display: flex; align-items: center; justify-content: center; } .company-name { font-size: 18px; font-weight: 600; color: #1F2937; margin-bottom: 8px; } .sso-subtitle { font-size: 14px; color: #6B7280; text-align: center; } ``` ### SSO提供商按鈕 ```css .sso-providers { display: flex; flex-direction: column; gap: 16px; margin: 32px 0; } .sso-provider-btn { display: flex; align-items: center; justify-content: center; gap: 12px; padding: 16px 24px; border: 2px solid #E5E7EB; border-radius: 12px; background: white; color: #374151; font-size: 16px; font-weight: 500; cursor: pointer; transition: all 0.3s ease; text-decoration: none; } .sso-provider-btn:hover { border-color: #6366F1; background: #F8FAFC; transform: translateY(-2px); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); } .sso-provider-btn:active { transform: translateY(0); } .sso-provider-btn.microsoft { border-color: #0078D4; } .sso-provider-btn.microsoft:hover { background: #F3F9FF; border-color: #0078D4; } .sso-provider-btn.google { border-color: #4285F4; } .sso-provider-btn.google:hover { background: #F8FBFF; border-color: #4285F4; } .sso-provider-btn.okta { border-color: #007DC1; } .sso-provider-btn.okta:hover { background: #F0F9FF; border-color: #007DC1; } .provider-icon { width: 24px; height: 24px; } ``` ### 企業資訊顯示 ```css .enterprise-info { background: #F8FAFC; border-radius: 8px; padding: 16px; margin: 24px 0; border: 1px solid #E2E8F0; } .enterprise-domain { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; } .domain-icon { width: 16px; height: 16px; color: #6366F1; } .domain-text { font-size: 14px; font-weight: 500; color: #1E293B; } .enterprise-features { list-style: none; padding: 0; margin: 0; } .enterprise-features li { display: flex; align-items: center; gap: 8px; font-size: 13px; color: #64748B; margin-bottom: 8px; } .feature-icon { width: 12px; height: 12px; color: #10B981; } ``` ## 🖥️ 多視窗管理界面規範 ### 視窗管理器設計 ```css .window-manager { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: #1F2937; z-index: 1000; display: none; } .window-manager.active { display: flex; flex-direction: column; } .window-manager-header { background: #374151; padding: 12px 20px; display: flex; justify-content: between; align-items: center; border-bottom: 1px solid #4B5563; } .window-manager-title { color: white; font-size: 14px; font-weight: 600; } .window-manager-controls { display: flex; gap: 8px; } .window-control-btn { width: 32px; height: 32px; border-radius: 6px; border: none; background: #4B5563; color: #D1D5DB; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all 0.2s ease; } .window-control-btn:hover { background: #6B7280; color: white; } ``` ### 視窗預覽網格 ```css .window-grid { flex: 1; padding: 20px; display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 20px; overflow: auto; } .window-preview { aspect-ratio: 16 / 10; background: white; border-radius: 8px; border: 2px solid #4B5563; overflow: hidden; cursor: pointer; transition: all 0.3s ease; position: relative; } .window-preview:hover { border-color: #6366F1; transform: scale(1.02); box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3); } .window-preview.active { border-color: #10B981; box-shadow: 0 0 20px rgba(16, 185, 129, 0.3); } .window-preview-header { background: #F3F4F6; padding: 8px 12px; display: flex; align-items: center; gap: 8px; border-bottom: 1px solid #E5E7EB; } .window-preview-dots { display: flex; gap: 4px; } .preview-dot { width: 8px; height: 8px; border-radius: 50%; background: #D1D5DB; } .preview-dot.close { background: #EF4444; } .preview-dot.minimize { background: #F59E0B; } .preview-dot.maximize { background: #10B981; } .window-preview-title { font-size: 12px; font-weight: 500; color: #6B7280; flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .window-preview-content { padding: 12px; height: calc(100% - 40px); background: white; overflow: hidden; position: relative; } ``` ### 視窗操作面板 ```css .window-actions { position: absolute; top: 8px; right: 8px; background: rgba(0, 0, 0, 0.7); border-radius: 6px; padding: 4px; opacity: 0; transition: opacity 0.2s ease; display: flex; gap: 4px; } .window-preview:hover .window-actions { opacity: 1; } .window-action-btn { width: 24px; height: 24px; border-radius: 4px; border: none; background: transparent; color: white; cursor: pointer; display: flex; align-items: center; justify-content: center; font-size: 12px; transition: background 0.2s ease; } .window-action-btn:hover { background: rgba(255, 255, 255, 0.2); } .window-action-btn.close:hover { background: #EF4444; } ``` ## ⌨️ 鍵盤快捷鍵系統 ### 快捷鍵提示界面 ```css .keyboard-shortcuts-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.8); z-index: 10000; display: none; align-items: center; justify-content: center; backdrop-filter: blur(4px); } .keyboard-shortcuts-overlay.visible { display: flex; } .shortcuts-panel { background: white; border-radius: 16px; padding: 32px; max-width: 600px; width: 90%; max-height: 80vh; overflow: auto; box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3); } .shortcuts-header { text-align: center; margin-bottom: 32px; } .shortcuts-title { font-size: 24px; font-weight: 700; color: #1F2937; margin-bottom: 8px; } .shortcuts-subtitle { font-size: 14px; color: #6B7280; } .shortcuts-sections { display: grid; gap: 24px; } .shortcuts-section { background: #F9FAFB; border-radius: 8px; padding: 20px; } .section-title { font-size: 16px; font-weight: 600; color: #374151; margin-bottom: 16px; display: flex; align-items: center; gap: 8px; } .section-icon { width: 20px; height: 20px; } .shortcuts-list { display: grid; gap: 12px; } .shortcut-item { display: flex; justify-content: between; align-items: center; padding: 8px 0; } .shortcut-description { font-size: 14px; color: #374151; } .shortcut-keys { display: flex; gap: 4px; align-items: center; } .key { padding: 4px 8px; background: white; border: 1px solid #D1D5DB; border-radius: 4px; font-size: 12px; font-weight: 500; color: #374151; min-width: 24px; text-align: center; font-family: 'SF Mono', 'Monaco', 'Consolas', monospace; } .key-separator { font-size: 12px; color: #9CA3AF; margin: 0 4px; } ``` ### 快捷鍵視覺回饋 ```css .shortcut-feedback { position: fixed; top: 20px; right: 20px; background: rgba(0, 0, 0, 0.9); color: white; padding: 12px 16px; border-radius: 8px; font-size: 14px; font-weight: 500; z-index: 9999; opacity: 0; transform: translateX(100px); transition: all 0.3s ease; } .shortcut-feedback.active { opacity: 1; transform: translateX(0); } .shortcut-feedback.success { background: rgba(16, 185, 129, 0.9); } .shortcut-feedback.error { background: rgba(239, 68, 68, 0.9); } ``` ## 📱 響應式適配方案 ### Tablet 適配 (768px - 1023px) ```css @media (max-width: 1023px) { .statistics-dashboard { grid-template-columns: 1fr; gap: 16px; padding: 16px; } .dialogue-tabs-container { padding: 0 16px; } .dialogue-tab { min-width: 140px; padding: 10px 16px; } .window-grid { grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 16px; padding: 16px; } .shortcuts-panel { padding: 24px; width: 95%; } } ``` ### Mobile 降級處理 (<768px) ```css @media (max-width: 767px) { .dialogue-tabs-container { display: none; } .dialogue-content { padding: 16px; } .statistics-dashboard { display: block; padding: 12px; } .stat-card { margin-bottom: 16px; } .window-manager { display: none !important; } .enterprise-login { padding: 20px; } .sso-card { padding: 24px; } .shortcuts-panel { padding: 20px; width: 100%; height: 100vh; border-radius: 0; } } ``` ## ♿ 無障礙設計要求 ### 鍵盤導航支援 ```css .focusable-element:focus-visible { outline: 3px solid #6366F1; outline-offset: 2px; } .tab-content[aria-hidden="true"] { display: none; } .window-preview[aria-selected="true"] { border-color: #10B981; } ``` ### 語音輔助標籤 ```html