/* * Drama Ling Component Library - Base Styles * 基礎樣式系統 * * 建立日期: 2025-09-14 * 版本: v1.0 */ /* ======================================== 導入設計代幣 ======================================== */ @import '../../design-system/tokens/design-tokens.css'; /* ======================================== 基礎重置 ======================================== */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { font-size: 16px; scroll-behavior: smooth; height: 100%; } body { font-family: 'PingFang TC', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Microsoft JhengHei', 'Helvetica Neue', Arial, sans-serif; font-size: var(--text-base); line-height: 1.6; color: var(--text-primary); background-color: var(--background-primary); min-height: 100vh; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* ======================================== 布局系統 ======================================== */ .component-library-container { display: grid; grid-template-areas: "header header" "sidebar main"; grid-template-columns: 260px 1fr; grid-template-rows: auto 1fr; min-height: 100vh; background: var(--background-primary); } .library-header { grid-area: header; background: var(--background-secondary); border-bottom: 1px solid var(--divider); padding: var(--space-4) var(--space-6); display: flex; align-items: center; justify-content: space-between; position: sticky; top: 0; z-index: 100; } .library-sidebar { grid-area: sidebar; background: var(--background-secondary); border-right: 1px solid var(--divider); padding: var(--space-6); overflow-y: auto; max-height: calc(100vh - 73px); position: sticky; top: 73px; } .library-main { grid-area: main; padding: var(--space-8); overflow-y: auto; max-width: 1400px; } /* ======================================== 展示區塊樣式 ======================================== */ .component-section { margin-bottom: var(--space-12); } .component-title { font-size: var(--text-2xl); font-weight: 700; color: var(--text-primary); margin-bottom: var(--space-4); padding-bottom: var(--space-3); border-bottom: 2px solid var(--primary-teal); } .component-subtitle { font-size: var(--text-lg); font-weight: 600; color: var(--text-secondary); margin-bottom: var(--space-3); margin-top: var(--space-6); } .component-description { color: var(--text-secondary); margin-bottom: var(--space-6); line-height: 1.7; } /* ======================================== 元件展示框 ======================================== */ .component-showcase { background: var(--card-background); border: 1px solid var(--divider); border-radius: var(--radius-lg); padding: var(--space-6); margin-bottom: var(--space-6); } .showcase-preview { padding: var(--space-6); background: var(--background-primary); border-radius: var(--radius-md); margin-bottom: var(--space-4); display: flex; flex-wrap: wrap; gap: var(--space-4); align-items: center; min-height: 120px; } .showcase-code { position: relative; background: var(--background-dark); border-radius: var(--radius-md); padding: var(--space-4); overflow-x: auto; font-family: 'JetBrains Mono', 'SF Mono', Monaco, monospace; font-size: var(--text-sm); } .showcase-code pre { margin: 0; color: #aed581; white-space: pre-wrap; word-wrap: break-word; } .copy-button { position: absolute; top: var(--space-2); right: var(--space-2); padding: var(--space-2) var(--space-3); background: var(--primary-teal); color: var(--background-dark); border: none; border-radius: var(--radius-sm); font-size: var(--text-xs); font-weight: 600; cursor: pointer; transition: all 0.3s ease; } .copy-button:hover { background: var(--primary-teal-light); transform: translateY(-1px); } .copy-button.copied { background: var(--success-green); } /* ======================================== 變體展示 ======================================== */ .variant-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--space-4); margin-top: var(--space-4); } .variant-item { text-align: center; } .variant-label { display: block; font-size: var(--text-xs); color: var(--text-tertiary); margin-top: var(--space-2); font-weight: 500; } /* ======================================== 側邊欄導航 ======================================== */ .nav-category { margin-bottom: var(--space-6); } .nav-category-title { font-size: var(--text-sm); font-weight: 700; color: var(--text-tertiary); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: var(--space-2); } .nav-link { display: block; padding: var(--space-2) var(--space-3); color: var(--text-secondary); text-decoration: none; border-radius: var(--radius-sm); transition: all 0.2s ease; font-size: var(--text-sm); margin-bottom: var(--space-1); } .nav-link:hover { background: var(--background-primary); color: var(--text-primary); transform: translateX(4px); } .nav-link.active { background: var(--primary-teal); color: var(--background-dark); font-weight: 600; } /* ======================================== 主題切換 ======================================== */ .theme-toggle { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-2) var(--space-3); background: var(--card-background); border-radius: var(--radius-full); border: 1px solid var(--divider); } .theme-toggle button { padding: var(--space-2); background: transparent; border: none; border-radius: var(--radius-full); cursor: pointer; color: var(--text-tertiary); transition: all 0.2s ease; display: flex; align-items: center; justify-content: center; } .theme-toggle button:hover { background: var(--background-primary); color: var(--text-primary); } .theme-toggle button.active { background: var(--primary-teal); color: var(--background-dark); } /* ======================================== 響應式調整 ======================================== */ @media (max-width: 768px) { .component-library-container { grid-template-areas: "header" "main"; grid-template-columns: 1fr; } .library-sidebar { display: none; } .library-main { padding: var(--space-4); } .showcase-preview { padding: var(--space-4); } .variant-grid { grid-template-columns: 1fr; } } /* ======================================== 工具類別 ======================================== */ .flex-demo { display: flex; flex-wrap: wrap; gap: var(--space-3); align-items: center; } .grid-demo { display: grid; gap: var(--space-3); } .mt-4 { margin-top: var(--space-4); } .mb-4 { margin-bottom: var(--space-4); } .mt-6 { margin-top: var(--space-6); } .mb-6 { margin-bottom: var(--space-6); } /* ======================================== 亮色主題覆蓋 ======================================== */ body.light-theme { --background-primary: #FFFFFF; --background-secondary: #F8F9FA; --background-dark: #E9ECEF; --card-background: #FFFFFF; --text-primary: #212529; --text-secondary: #6C757D; --text-tertiary: #ADB5BD; --divider: #DEE2E6; --border-light: #E9ECEF; } body.light-theme .showcase-code { background: #F8F9FA; } body.light-theme .showcase-code pre { color: #495057; }