/* Chronological - Main Stylesheet */ /* CSS Reset and Base Styles */ *, *::before, *::after { box-sizing: border-box; } :root { --color-primary: #3b82f6; --color-primary-dark: #2563eb; --color-secondary: #64748b; --color-success: #22c55e; --color-danger: #ef4444; --color-warning: #f59e0b; --color-bg: #f8fafc; --color-surface: #ffffff; --color-border: #e2e8f0; --color-text: #1e293b; --color-text-muted: #64748b; --spacing-xs: 0.25rem; --spacing-sm: 0.5rem; --spacing-md: 1rem; --spacing-lg: 1.5rem; --spacing-xl: 2rem; --radius-sm: 0.25rem; --radius-md: 0.5rem; --radius-lg: 1rem; --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05); --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1); --shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1); --font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; --font-size-sm: 0.875rem; --font-size-md: 1rem; --font-size-lg: 1.25rem; --font-size-xl: 1.5rem; } html, body { margin: 0; padding: 0; font-family: var(--font-family); font-size: var(--font-size-md); line-height: 1.5; color: var(--color-text); background-color: var(--color-bg); min-height: 100vh; } /* App Layout */ .app-header { background-color: var(--color-primary); color: white; padding: var(--spacing-md) var(--spacing-lg); box-shadow: var(--shadow-md); } .app-header h1 { margin: 0; font-size: var(--font-size-xl); font-weight: 600; } .app-main { height: calc(100vh - 60px); overflow: hidden; } /* Timeline Container - Split Layout */ .timeline-container { display: grid; grid-template-columns: 350px 1fr; height: 100%; } /* Calendar Panel */ .calendar-panel { background-color: var(--color-surface); border-right: 1px solid var(--color-border); padding: var(--spacing-lg); overflow-y: auto; } .calendar { max-width: 320px; margin: 0 auto; } .calendar-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: var(--spacing-md); } .calendar-header h2 { margin: 0; font-size: var(--font-size-lg); font-weight: 600; } .nav-btn { background: none; border: 1px solid var(--color-border); border-radius: var(--radius-sm); padding: var(--spacing-xs) var(--spacing-sm); cursor: pointer; font-size: var(--font-size-lg); color: var(--color-text); transition: background-color 0.2s, border-color 0.2s; } .nav-btn:hover { background-color: var(--color-bg); border-color: var(--color-primary); } .calendar-weekdays { display: grid; grid-template-columns: repeat(7, 1fr); text-align: center; font-size: var(--font-size-sm); font-weight: 600; color: var(--color-text-muted); margin-bottom: var(--spacing-sm); } .calendar-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; } .calendar-day { aspect-ratio: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; background-color: var(--color-bg); border-radius: var(--radius-sm); cursor: pointer; transition: background-color 0.2s; position: relative; padding: 2px; } .calendar-day:hover { background-color: var(--color-border); } .calendar-day.empty { background: none; cursor: default; } .calendar-day.today { background-color: var(--color-primary); color: white; } .calendar-day.today:hover { background-color: var(--color-primary-dark); } .calendar-day.has-content { font-weight: 600; } .day-number { font-size: var(--font-size-sm); } .day-indicators { display: flex; gap: 1px; font-size: 0.6rem; position: absolute; bottom: 2px; } .indicator { line-height: 1; } .calendar-actions { margin-top: var(--spacing-lg); text-align: center; } /* Timeline Panel */ .timeline-panel { padding: var(--spacing-lg); overflow-y: auto; } .timeline { max-width: 800px; margin: 0 auto; } .timeline-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: var(--spacing-lg); padding-bottom: var(--spacing-md); border-bottom: 2px solid var(--color-border); } .timeline-header h2 { margin: 0; font-size: var(--font-size-xl); } .timeline-content { display: flex; flex-direction: column; gap: var(--spacing-lg); } .timeline-day { background-color: var(--color-surface); border-radius: var(--radius-lg); box-shadow: var(--shadow-sm); overflow: hidden; } .timeline-day-header { background-color: var(--color-bg); padding: var(--spacing-md) var(--spacing-lg); border-bottom: 1px solid var(--color-border); } .timeline-day-header time { font-weight: 600; color: var(--color-primary); } .timeline-entries { padding: var(--spacing-md) var(--spacing-lg); display: flex; flex-direction: column; gap: var(--spacing-md); } .timeline-entry { display: flex; gap: var(--spacing-md); padding: var(--spacing-md); background-color: var(--color-bg); border-radius: var(--radius-md); } .entry-icon { font-size: 1.5rem; flex-shrink: 0; } .entry-content { flex-grow: 1; min-width: 0; } .entry-content h4 { margin: 0 0 var(--spacing-xs); font-size: var(--font-size-md); } .entry-time { font-size: var(--font-size-sm); color: var(--color-text-muted); margin-right: var(--spacing-sm); } .entry-location { font-size: var(--font-size-sm); color: var(--color-text-muted); } .entry-description { margin: var(--spacing-sm) 0 0; color: var(--color-text-muted); font-size: var(--font-size-sm); } .diary-text { white-space: pre-wrap; } .timeline-empty { text-align: center; padding: var(--spacing-xl); color: var(--color-text-muted); } /* Photo Grid */ .photo-grid, .photo-gallery { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: var(--spacing-md); margin-top: var(--spacing-sm); } .photo-item { margin: 0; } .photo-item img { width: 100%; height: 150px; object-fit: cover; border-radius: var(--radius-md); cursor: pointer; transition: transform 0.2s; } .photo-item img:hover { transform: scale(1.02); } .photo-item figcaption { font-size: var(--font-size-sm); color: var(--color-text-muted); margin-top: var(--spacing-xs); text-align: center; } /* Day Modal */ .day-modal { border: none; border-radius: var(--radius-lg); box-shadow: var(--shadow-lg); max-width: 600px; width: 90%; padding: 0; } .day-modal::backdrop { background-color: rgba(0, 0, 0, 0.5); } .day-detail { padding: var(--spacing-lg); } .day-header { margin-bottom: var(--spacing-lg); padding-bottom: var(--spacing-md); border-bottom: 2px solid var(--color-border); } .day-header h2 { margin: 0; font-size: var(--font-size-lg); } .day-section { margin-bottom: var(--spacing-lg); } .day-section h3 { margin: 0 0 var(--spacing-md); font-size: var(--font-size-md); color: var(--color-text-muted); } .event-list { list-style: none; padding: 0; margin: 0; } .event-item { padding: var(--spacing-sm); background-color: var(--color-bg); border-radius: var(--radius-sm); margin-bottom: var(--spacing-sm); } .event-item strong { display: block; margin-bottom: var(--spacing-xs); } .empty-message { color: var(--color-text-muted); font-style: italic; } /* Form Elements */ textarea { width: 100%; padding: var(--spacing-md); border: 1px solid var(--color-border); border-radius: var(--radius-md); font-family: inherit; font-size: var(--font-size-md); resize: vertical; min-height: 100px; } textarea:focus { outline: none; border-color: var(--color-primary); box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); } .form-actions { display: flex; gap: var(--spacing-sm); margin-top: var(--spacing-md); } /* Buttons */ .btn { display: inline-flex; align-items: center; justify-content: center; padding: var(--spacing-sm) var(--spacing-md); border: none; border-radius: var(--radius-md); font-family: inherit; font-size: var(--font-size-sm); font-weight: 500; cursor: pointer; transition: background-color 0.2s, transform 0.1s; } .btn:hover { transform: translateY(-1px); } .btn:active { transform: translateY(0); } .btn-primary { background-color: var(--color-primary); color: white; } .btn-primary:hover { background-color: var(--color-primary-dark); } .btn-secondary { background-color: var(--color-border); color: var(--color-text); } .btn-secondary:hover { background-color: var(--color-secondary); color: white; } .btn-danger { background-color: var(--color-danger); color: white; } .btn-danger:hover { background-color: #dc2626; } .btn-small { padding: var(--spacing-xs) var(--spacing-sm); font-size: var(--font-size-sm); } /* Responsive Design */ @media (max-width: 768px) { .timeline-container { grid-template-columns: 1fr; grid-template-rows: auto 1fr; } .calendar-panel { border-right: none; border-bottom: 1px solid var(--color-border); max-height: 50vh; } .calendar { max-width: none; } } /* HTMX Loading Indicator */ .htmx-request { opacity: 0.7; pointer-events: none; } .htmx-request::after { content: ''; position: absolute; top: 50%; left: 50%; width: 20px; height: 20px; margin: -10px 0 0 -10px; border: 2px solid var(--color-border); border-top-color: var(--color-primary); border-radius: 50%; animation: spin 0.8s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } }