/* Layout - Structure principale */ * { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: var(--font-family); font-size: var(--font-size-base); color: var(--color-text-primary); background: var(--color-background); line-height: 1.6; min-height: 100vh; } /* Header */ .header { position: fixed; top: 0; left: 0; right: 0; height: var(--header-height); background: var(--color-card); border-bottom: 1px solid var(--color-border); box-shadow: var(--shadow-sm); z-index: var(--z-header); } .header-container { max-width: var(--max-width); height: 100%; margin: 0 auto; padding: 0 var(--spacing-xl); display: flex; align-items: center; gap: var(--spacing-xl); } /* Logo */ .logo { display: flex; align-items: center; gap: var(--spacing-md); flex-shrink: 0; } .logo-icon { width: 32px; height: 32px; color: var(--color-accent); } .logo-text { font-size: var(--font-size-xl); font-weight: var(--font-weight-bold); color: var(--color-accent); letter-spacing: -0.5px; } /* Search */ .search-container { flex: 1; max-width: 500px; position: relative; } .search-icon { position: absolute; left: var(--spacing-md); top: 50%; transform: translateY(-50%); width: 18px; height: 18px; color: var(--color-text-secondary); pointer-events: none; } .search-input { width: 100%; height: 44px; padding: 0 var(--spacing-xl) 0 44px; border: 1px solid var(--color-border); border-radius: var(--radius-full); font-size: var(--font-size-base); background: var(--color-background); color: var(--color-text-primary); transition: all var(--transition-base); } .search-input:focus { outline: none; border-color: var(--color-accent); background: var(--color-card); box-shadow: var(--shadow-sm); } .search-clear { position: absolute; right: var(--spacing-md); top: 50%; transform: translateY(-50%); width: 24px; height: 24px; padding: 4px; border: none; background: transparent; cursor: pointer; color: var(--color-text-secondary); border-radius: 50%; transition: all var(--transition-fast); } .search-clear:hover { background: var(--color-hover); color: var(--color-text-primary); } .search-clear svg { width: 100%; height: 100%; } /* User Menu */ .user-menu { position: relative; flex-shrink: 0; } .user-button { display: flex; align-items: center; gap: var(--spacing-sm); padding: var(--spacing-sm) var(--spacing-md); border: 1px solid var(--color-border); border-radius: var(--radius-full); background: var(--color-card); color: var(--color-text-primary); font-size: var(--font-size-sm); font-weight: var(--font-weight-medium); cursor: pointer; transition: all var(--transition-base); } .user-button:hover { background: var(--color-hover); box-shadow: var(--shadow-sm); } .user-icon { width: 20px; height: 20px; } .dropdown-arrow { width: 16px; height: 16px; transition: transform var(--transition-base); } .user-menu:hover .dropdown-arrow { transform: rotate(180deg); } .user-dropdown { position: absolute; top: calc(100% + var(--spacing-sm)); right: 0; min-width: 200px; background: var(--color-card); border: 1px solid var(--color-border); border-radius: var(--radius-md); box-shadow: var(--shadow-lg); opacity: 0; visibility: hidden; transform: translateY(-10px); transition: all var(--transition-base); z-index: var(--z-dropdown); } .user-menu:hover .user-dropdown { opacity: 1; visibility: visible; transform: translateY(0); } .dropdown-item { display: flex; align-items: center; gap: var(--spacing-md); width: 100%; padding: var(--spacing-md) var(--spacing-lg); border: none; background: transparent; color: var(--color-text-primary); font-size: var(--font-size-sm); font-weight: var(--font-weight-medium); text-align: left; cursor: pointer; transition: background var(--transition-fast); } .dropdown-item:first-child { border-radius: var(--radius-md) var(--radius-md) 0 0; } .dropdown-item:last-child { border-radius: 0 0 var(--radius-md) var(--radius-md); } .dropdown-item:hover { background: var(--color-hover); } .dropdown-item svg { width: 18px; height: 18px; } /* Main Content */ .main-content { margin-top: var(--header-height); min-height: calc(100vh - var(--header-height)); padding: var(--spacing-2xl) var(--spacing-xl); } .content-container { max-width: var(--max-width); margin: 0 auto; display: grid; grid-template-columns: 1fr var(--todo-box-width) var(--todo-box-width); gap: var(--spacing-xl); align-items: start; } /* Notes Section */ .notes-section { min-width: 0; } .section-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: var(--spacing-lg); gap: var(--spacing-lg); flex-wrap: wrap; } .section-title { font-size: var(--font-size-2xl); font-weight: var(--font-weight-bold); color: var(--color-text-primary); } .section-actions { display: flex; align-items: center; gap: var(--spacing-md); } .view-filters { display: flex; gap: var(--spacing-xs); background: var(--color-background); border-radius: var(--radius-md); padding: 4px; } .view-filter { display: flex; align-items: center; gap: var(--spacing-xs); padding: var(--spacing-sm) var(--spacing-md); border: none; border-radius: var(--radius-sm); background: transparent; color: var(--color-text-secondary); font-size: var(--font-size-sm); font-weight: var(--font-weight-medium); cursor: pointer; transition: all var(--transition-fast); } .view-filter svg { width: 16px; height: 16px; } .view-filter:hover { background: var(--color-hover); color: var(--color-text-primary); } .view-filter.active { background: var(--color-card); color: var(--color-accent); box-shadow: var(--shadow-xs); } .btn-new-note { display: flex; align-items: center; gap: var(--spacing-sm); padding: var(--spacing-md) var(--spacing-lg); border: none; border-radius: var(--radius-md); background: var(--color-accent); color: white; font-size: var(--font-size-sm); font-weight: var(--font-weight-semibold); cursor: pointer; transition: all var(--transition-base); box-shadow: var(--shadow-sm); } .btn-new-note:hover { background: var(--color-accent-hover); box-shadow: var(--shadow-md); transform: translateY(-1px); } .btn-new-note svg { width: 18px; height: 18px; } .notes-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(var(--note-width), 1fr)); gap: var(--spacing-lg); } /* Todo Box */ .todo-box { position: sticky; top: calc(var(--header-height) + var(--spacing-xl)); background: var(--color-card); border: 1px solid var(--color-border); border-radius: var(--radius-lg); padding: var(--spacing-xl); box-shadow: var(--shadow-md); max-height: calc(100vh - var(--header-height) - var(--spacing-2xl) * 2); display: flex; flex-direction: column; } .todo-box-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: var(--spacing-lg); } .todo-box-title { font-size: var(--font-size-xl); font-weight: var(--font-weight-bold); color: var(--color-text-primary); } .todo-counter { font-size: var(--font-size-sm); color: var(--color-text-secondary); font-weight: var(--font-weight-medium); } /* RSS Box */ .rss-box { position: sticky; top: calc(var(--header-height) + var(--spacing-xl)); background: var(--color-card); border: 1px solid var(--color-border); border-radius: var(--radius-lg); padding: var(--spacing-xl); box-shadow: var(--shadow-md); max-height: calc(100vh - var(--header-height) - var(--spacing-2xl) * 2); display: flex; flex-direction: column; } .rss-box-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: var(--spacing-lg); } .rss-box-title { font-size: var(--font-size-xl); font-weight: var(--font-weight-bold); color: var(--color-text-primary); } .btn-summarize { width: 36px; height: 36px; padding: 8px; border: 1px solid var(--color-border); border-radius: var(--radius-md); background: var(--color-accent); color: white; cursor: pointer; transition: all var(--transition-fast); display: flex; align-items: center; justify-content: center; } .btn-summarize:hover { background: var(--color-accent-hover); box-shadow: var(--shadow-md); transform: scale(1.05); } .btn-summarize svg { width: 100%; height: 100%; } .rss-articles-list { flex: 1; overflow-y: auto; display: flex; flex-direction: column; gap: var(--spacing-md); } .rss-empty { text-align: center; color: var(--color-text-secondary); font-size: var(--font-size-sm); padding: var(--spacing-2xl); font-style: italic; } .rss-article { padding: var(--spacing-md); background: var(--color-background); border-radius: var(--radius-md); border: 1px solid var(--color-border); transition: all var(--transition-fast); cursor: pointer; } .rss-article:hover { background: var(--color-hover); border-color: var(--color-accent); box-shadow: var(--shadow-sm); } .rss-article-title { font-size: var(--font-size-sm); font-weight: var(--font-weight-semibold); color: var(--color-text-primary); margin-bottom: var(--spacing-xs); line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .rss-article-meta { display: flex; align-items: center; justify-content: space-between; font-size: var(--font-size-xs); color: var(--color-text-secondary); margin-bottom: var(--spacing-xs); } .rss-article-source { font-weight: var(--font-weight-medium); } .rss-article-description { font-size: var(--font-size-xs); color: var(--color-text-secondary); line-height: 1.5; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .rss-summary { padding: var(--spacing-lg); background: var(--color-background); border-radius: var(--radius-md); border: 1px solid var(--color-border); margin-bottom: var(--spacing-md); } .rss-summary-header { margin-bottom: var(--spacing-md); padding-bottom: var(--spacing-sm); border-bottom: 1px solid var(--color-border); } .rss-summary-title { font-size: var(--font-size-base); font-weight: var(--font-weight-semibold); color: var(--color-text-primary); margin-bottom: var(--spacing-xs); } .rss-summary-meta { display: flex; gap: var(--spacing-md); font-size: var(--font-size-xs); color: var(--color-text-secondary); } .rss-summary-content { font-size: var(--font-size-sm); color: var(--color-text-primary); line-height: 1.6; } .rss-summary-content h2 { font-size: var(--font-size-lg); font-weight: var(--font-weight-bold); color: var(--color-text-primary); margin: var(--spacing-md) 0 var(--spacing-sm) 0; } .rss-summary-content h3 { font-size: var(--font-size-base); font-weight: var(--font-weight-semibold); color: var(--color-text-primary); margin: var(--spacing-sm) 0 var(--spacing-xs) 0; } .rss-summary-content ul, .rss-summary-content ol { margin: var(--spacing-sm) 0; padding-left: var(--spacing-xl); } .rss-summary-content li { margin-bottom: var(--spacing-xs); } .rss-summary-content strong { font-weight: var(--font-weight-semibold); color: var(--color-text-primary); } .rss-summary-content em { font-style: italic; } /* Responsive */ @media (max-width: 1200px) { .content-container { grid-template-columns: 1fr; } .todo-box, .rss-box { position: static; max-height: none; } } @media (max-width: 768px) { .header-container { padding: 0 var(--spacing-md); } .search-container { max-width: 300px; } .logo-text { display: none; } .main-content { padding: var(--spacing-lg) var(--spacing-md); } .notes-grid { grid-template-columns: 1fr; } }