diff --git a/app/assets/css/main.css b/app/assets/css/main.css index 2e111ae..dc7a0c0 100644 --- a/app/assets/css/main.css +++ b/app/assets/css/main.css @@ -23,8 +23,7 @@ body { color: #0f172a; } -/* FullCalendar button theme (Premium Light) */ -/* FullCalendar button theme (Primary) */ +/* ===== FullCalendar Styles ===== */ .fc .fc-button, .fc .fc-button-primary { background-color: var(--color-primary-500, #3b82f6) !important; @@ -48,7 +47,6 @@ body { color: #ffffff !important; } -/* FullCalendar date/holiday text (Premium Light) */ .fc .fc-daygrid-day-number, .fc .fc-daygrid-day-top .fc-daygrid-day-number, .fc .fc-daygrid-day-number > span, @@ -62,13 +60,11 @@ body { opacity: 1 !important; } -/* Ensure holidays/events display as dark text */ .fc .fc-daygrid-event-harness .fc-event-title, .fc .fc-daygrid-event-harness .fc-event-time { color: #0f172a !important; } -/* FullCalendar toolbar (title + nav buttons) */ .fc .fc-toolbar, .fc .fc-toolbar-chunk { background: #ffffff !important; @@ -79,7 +75,182 @@ body { color: #0f172a !important; } -/* Ensure today button & nav icons show correctly */ .fc .fc-button.fc-button-primary .fc-icon { color: #ffffff !important; } + +/* FullCalendar - extracted from AppCalendar.vue */ +.fc-daygrid-event { + cursor: pointer; +} + +.fc-event { + border-radius: 4px; +} + +.event-holiday .fc-event-title, +.event-holiday .fc-event-main-frame { + font-size: 1.1rem !important; + font-weight: 700 !important; + padding: 2px 4px !important; +} + +.fc .fc-col-header, +.fc .fc-col-header tr, +.fc .fc-col-header th { + background-color: #ffffff !important; +} + +.fc .fc-col-header-cell { + background-color: #f8fafc !important; + border-color: #e2e8f0 !important; +} + +.fc .fc-col-header-cell-cushion { + color: #0f172a !important; + font-weight: 600; +} + +.fc .fc-scrollgrid { + border-color: #e2e8f0 !important; +} + +.fc-theme-standard th { + background-color: #f8fafc !important; +} + +.fc .fc-list-day th, +.fc .fc-list-day td, +.fc .fc-list-day-cushion, +.fc .fc-cell-shaded { + background-color: #ffffff !important; +} + +.fc-list-day-text, +.fc-list-day-side-text, +.fc-list-day-cushion * { + color: #1e293b !important; + font-weight: 800 !important; + text-decoration: none !important; +} + +.fc-list-event:hover td { + background-color: #f1f5f9 !important; +} + +/* ===== Custom Scrollbar (ใช้ร่วมกันทุกหน้า) ===== */ +.custom-scrollbar::-webkit-scrollbar { + width: 6px; + height: 6px; +} + +.custom-scrollbar::-webkit-scrollbar-track { + background: #f1f5f9; + border-radius: 10px; +} + +.custom-scrollbar::-webkit-scrollbar-thumb { + background: #cbd5e1; + border-radius: 10px; +} + +.custom-scrollbar::-webkit-scrollbar-thumb:hover { + background: #94a3b8; +} + +/* ===== Animations (teacher/[id].vue) ===== */ +@keyframes zoom-in { + from { + opacity: 0; + transform: scale(0.95) translateY(10px); + } + to { + opacity: 1; + transform: scale(1) translateY(0); + } +} + +.animate-in { + animation: zoom-in 0.2s ease-out forwards; +} + +/* ===== Print Styles (summary.vue) ===== */ +@media print { + body, + .min-h-screen { + background-color: white !important; + color: black !important; + } + + .min-h-screen { + background: white !important; + padding-bottom: 0 !important; + } + + .no-print, + header, + nav, + .bg-slate-800.sticky { + display: none !important; + } + + .print-only { + display: block !important; + } + + .bg-slate-800 { + background-color: #f8fafc !important; + border: 1px solid #e2e8f0 !important; + color: black !important; + box-shadow: none !important; + } + + .text-white { color: black !important; } + .text-slate-400 { color: #475569 !important; } + .text-green-500, .text-green-400 { color: #166534 !important; } + .text-amber-500, .text-amber-400 { color: #92400e !important; } + .text-red-500, .text-red-400 { color: #991b1b !important; } + + .bg-slate-900 { + background-color: #f1f5f9 !important; + } + + .bg-gradient-to-r { + print-color-adjust: exact; + -webkit-print-color-adjust: exact; + } + + table { + width: 100% !important; + border-collapse: collapse !important; + } + + th { + background-color: #f1f5f9 !important; + color: black !important; + border-bottom: 2px solid black !important; + } + + td { + border-bottom: 1px solid #e2e8f0 !important; + } + + .container { + max-width: 100% !important; + width: 100% !important; + padding: 0 !important; + } + + .grid { display: grid !important; } + + .lg\:grid-cols-2 { + grid-template-columns: 1fr 1fr !important; + } + + .mb-8 { margin-bottom: 2rem !important; } + + @page { + margin: 1cm; + size: A4; + } +} diff --git a/app/components/AppCalendar.vue b/app/components/AppCalendar.vue index 70f5658..6655456 100644 --- a/app/components/AppCalendar.vue +++ b/app/components/AppCalendar.vue @@ -2053,80 +2053,4 @@ const getEventTypeClass = (type, isIconContainer = false) => { } - diff --git a/app/pages/index.vue b/app/pages/index.vue index 43ffe19..78df4cc 100644 --- a/app/pages/index.vue +++ b/app/pages/index.vue @@ -10,7 +10,3 @@ // Teacher data is still needed for the calendar filtering/display const { data: teachers } = await useFetch('/api/teachers') - - diff --git a/app/pages/rooms.vue b/app/pages/rooms.vue index 7e7f00c..0ec599b 100644 --- a/app/pages/rooms.vue +++ b/app/pages/rooms.vue @@ -533,23 +533,3 @@ const deleteRoom = async () => { } - diff --git a/app/pages/sections/[id].vue b/app/pages/sections/[id].vue index 5ce8030..29245b8 100644 --- a/app/pages/sections/[id].vue +++ b/app/pages/sections/[id].vue @@ -1048,18 +1048,3 @@ onMounted(() => { }) - diff --git a/app/pages/summary.vue b/app/pages/summary.vue index 3e87a2c..29f6214 100644 --- a/app/pages/summary.vue +++ b/app/pages/summary.vue @@ -379,118 +379,3 @@ const exportToPDF = () => { } - diff --git a/app/pages/teacher/[id].vue b/app/pages/teacher/[id].vue index 14e09d8..369b8ed 100644 --- a/app/pages/teacher/[id].vue +++ b/app/pages/teacher/[id].vue @@ -1381,40 +1381,3 @@ watch(scheduleError, (err) => { }) - diff --git a/app/pages/terms.vue b/app/pages/terms.vue index cf530ef..94526c2 100644 --- a/app/pages/terms.vue +++ b/app/pages/terms.vue @@ -494,21 +494,3 @@ const formatDate = (dateString) => { } - diff --git a/server/data/data.db b/server/data/data.db index 96d98e9..c4e383b 100644 Binary files a/server/data/data.db and b/server/data/data.db differ