""" Companion Dashboard Module - Begleiter-Modus UI. Das Dashboard zeigt: - Aktuelle Phase im Schuljahr - Priorisierte Vorschläge - Fortschritts-Anzeige - Kommende Termine """ def get_companion_css() -> str: """CSS für das Companion Dashboard.""" return """ /* Companion Dashboard Styles */ .companion-container { max-width: 900px; margin: 0 auto; padding: 20px; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; } .companion-header { text-align: center; margin-bottom: 30px; } .companion-header h1 { font-size: 28px; color: #1a1a2e; margin-bottom: 8px; } .companion-header .phase-badge { display: inline-block; background: linear-gradient(135deg, #6C1B1B, #8B2525); color: white; padding: 6px 16px; border-radius: 20px; font-size: 14px; font-weight: 500; } /* Phase Indicator */ .phase-indicator { background: #f8f9fa; border-radius: 12px; padding: 20px; margin-bottom: 24px; } .phase-timeline { display: flex; justify-content: space-between; align-items: center; position: relative; padding: 0 10px; } .phase-timeline::before { content: ''; position: absolute; top: 15px; left: 30px; right: 30px; height: 3px; background: #e0e0e0; z-index: 0; } .phase-step { display: flex; flex-direction: column; align-items: center; z-index: 1; cursor: pointer; } .phase-dot { width: 30px; height: 30px; border-radius: 50%; background: #e0e0e0; display: flex; align-items: center; justify-content: center; margin-bottom: 8px; transition: all 0.3s ease; } .phase-dot.completed { background: #22c55e; } .phase-dot.current { background: #6C1B1B; box-shadow: 0 0 0 4px rgba(108, 27, 27, 0.2); } .phase-dot .material-icons { font-size: 16px; color: white; } .phase-label { font-size: 11px; color: #666; text-align: center; max-width: 70px; } .phase-label.current { color: #6C1B1B; font-weight: 600; } /* Suggestions List */ .suggestions-section { margin-bottom: 24px; } .section-title { font-size: 18px; font-weight: 600; color: #1a1a2e; margin-bottom: 16px; display: flex; align-items: center; gap: 8px; } .suggestion-card { display: flex; align-items: center; background: white; border: 1px solid #e5e7eb; border-radius: 12px; padding: 16px; margin-bottom: 12px; transition: all 0.2s ease; cursor: pointer; } .suggestion-card:hover { border-color: #6C1B1B; box-shadow: 0 4px 12px rgba(0,0,0,0.08); transform: translateY(-1px); } .priority-bar { width: 4px; height: 50px; border-radius: 2px; margin-right: 16px; flex-shrink: 0; } .priority-bar.urgent { background: #ef4444; } .priority-bar.high { background: #f97316; } .priority-bar.medium { background: #3b82f6; } .priority-bar.low { background: #9ca3af; } .suggestion-icon { width: 40px; height: 40px; border-radius: 10px; background: #f3f4f6; display: flex; align-items: center; justify-content: center; margin-right: 16px; flex-shrink: 0; } .suggestion-icon .material-icons { color: #6C1B1B; } .suggestion-content { flex: 1; } .suggestion-title { font-weight: 600; color: #1a1a2e; margin-bottom: 4px; } .suggestion-description { font-size: 13px; color: #6b7280; } .suggestion-action { color: #6C1B1B; font-weight: 600; font-size: 14px; display: flex; align-items: center; gap: 4px; } .suggestion-time { font-size: 12px; color: #9ca3af; margin-top: 4px; } /* Empty State */ .empty-state { text-align: center; padding: 40px 20px; background: #f0fdf4; border-radius: 12px; } .empty-state .material-icons { font-size: 48px; color: #22c55e; margin-bottom: 12px; } .empty-state h3 { color: #166534; margin-bottom: 8px; } .empty-state p { color: #6b7280; } /* Stats Cards */ .stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 12px; margin-bottom: 24px; } .stat-card { background: white; border: 1px solid #e5e7eb; border-radius: 10px; padding: 16px; text-align: center; } .stat-value { font-size: 28px; font-weight: 700; color: #6C1B1B; } .stat-label { font-size: 12px; color: #6b7280; margin-top: 4px; } /* Progress Card */ .progress-card { background: #eff6ff; border-radius: 12px; padding: 20px; margin-bottom: 24px; } .progress-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; } .progress-title { font-weight: 600; color: #1e40af; } .progress-percentage { font-weight: 700; color: #1e40af; } .progress-bar-container { background: #dbeafe; border-radius: 10px; height: 10px; overflow: hidden; } .progress-bar-fill { background: linear-gradient(90deg, #3b82f6, #1d4ed8); height: 100%; border-radius: 10px; transition: width 0.5s ease; } .progress-milestones { margin-top: 12px; font-size: 13px; color: #4b5563; } /* Events Card */ .events-card { background: #fefce8; border-radius: 12px; padding: 20px; } .event-item { display: flex; align-items: center; padding: 12px 0; border-bottom: 1px solid #fef08a; } .event-item:last-child { border-bottom: none; } .event-icon { width: 36px; height: 36px; border-radius: 8px; background: white; display: flex; align-items: center; justify-content: center; margin-right: 12px; } .event-icon .material-icons { color: #ca8a04; font-size: 20px; } .event-info { flex: 1; } .event-title { font-weight: 500; color: #1a1a2e; } .event-date { font-size: 12px; color: #6b7280; } .event-badge { font-size: 12px; font-weight: 600; color: #ca8a04; background: white; padding: 4px 10px; border-radius: 12px; } /* Mode Toggle */ .mode-toggle { display: flex; background: #f3f4f6; border-radius: 8px; padding: 4px; margin-bottom: 20px; } .mode-btn { flex: 1; padding: 10px 16px; border: none; background: transparent; border-radius: 6px; font-weight: 500; cursor: pointer; transition: all 0.2s ease; } .mode-btn.active { background: #6C1B1B; color: white; } .mode-btn:not(.active):hover { background: #e5e7eb; } /* Responsive */ @media (max-width: 600px) { .phase-timeline { overflow-x: auto; padding-bottom: 10px; } .stats-grid { grid-template-columns: repeat(2, 1fr); } .suggestion-card { flex-wrap: wrap; } } """ def get_companion_html() -> str: """HTML Template für das Companion Dashboard.""" return """
Keine offenen Aufgaben. Gute Arbeit!
${message}