Corp/backend/static/css/components/rightbar-calendar.css
Игорь Надеин 6f0cdc237a refactor: Extract rightbar-calendar CSS to component (Phase 5 start)
- Created static/css/components/rightbar-calendar.css (307 lines)
- Extracted all calendar styles from rightbar_calendar.html
- Includes: FullCalendar customization, week strip, offcanvas, color picker
- Reduced rightbar_calendar.html from 1130 to 997 lines (133 lines removed)
- All 17 tests passing
2025-10-28 09:41:08 +03:00

307 lines
6.8 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* Rightbar Calendar Component
*
* Стили для компонента правой панели с календарем
* Включает стили для FullCalendar, вертикальной ленты недели и модалов событий
*/
/* ====== БАЗА ====== */
.calendar-wrap{
min-height: 360px;
border-radius: 10px;
overflow: hidden;
background: var(--bs-body-bg);
box-shadow: inset 0 1px 3px color-mix(in srgb, var(--bs-body-color), transparent 92%);
border: 0;
}
.rightbar-card{
height: 100%;
display: flex;
flex-direction: column;
border-radius: 16px;
overflow: hidden;
border: 1px solid color-mix(in srgb, var(--bs-border-color), transparent 10%);
background: var(--bs-body-bg);
box-shadow: 0 1px 2px rgba(0,0,0,.04), 0 8px 24px rgba(0,0,0,.08);
min-height: 0;
}
.rightbar-card .card-header{
flex: 0 0 auto;
background: var(--bs-tertiary-bg);
border-bottom: 1px solid var(--bs-border-color);
padding: .6rem .9rem;
}
.rightbar-card .card-body{
flex: 1 1 auto;
min-height: 0;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
padding: .75rem;
}
@media (min-width: 992px){
.rightbar{
position: sticky;
top: var(--navbar-h);
height: calc(100dvh - var(--navbar-h));
padding: 1rem 1rem 1rem .75rem;
overflow: hidden;
}
}
/* ====== FullCalendar — компактно ====== */
.fc{
font-size: 0.7rem;
--fc-border-color: var(--bs-border-color);
--fc-page-bg-color: transparent;
--fc-neutral-bg-color: transparent;
--fc-today-bg-color: color-mix(in srgb, var(--bs-primary), transparent 85%);
--fc-event-bg-color: var(--bs-primary);
--fc-event-border-color: var(--bs-primary);
--fc-event-text-color: var(--bs-body-bg);
}
.fc-theme-standard .fc-scrollgrid{
border: 0 !important;
}
.fc-theme-standard td,
.fc-theme-standard th{
border: 0 !important;
}
.fc .fc-toolbar{
padding: .7rem .9rem;
background: var(--bs-tertiary-bg);
border-bottom: 1px solid var(--bs-border-color);
justify-content: space-between;
}
.fc .fc-toolbar-title{
font-size: 1rem;
font-weight: 600;
color: var(--bs-body-color);
}
.fc .fc-button{
border-radius: 8px;
font-size: .82rem;
padding: .25rem .5rem;
background: transparent;
border: none;
color: var(--bs-primary);
}
.fc .fc-button:hover{
background: rgba(var(--bs-primary-rgb), .1);
}
.fc .fc-daygrid-day-frame{
padding: 2px 3px !important;
}
.fc .fc-daygrid-day-number{
font-size: .82rem;
width: 100%;
height: 1.6rem;
display: flex;
align-items: center;
justify-content: center;
font-weight: 600;
color: var(--bs-body-color);
text-decoration: none !important;
}
.fc .fc-day-today{
background: none !important;
}
.fc .fc-day-today .fc-daygrid-day-number{
color: var(--bs-primary);
font-weight: 700;
border: 1px solid var(--bs-primary);
border-radius: 50%;
}
.fc .fc-day-other .fc-daygrid-day-number{
opacity: .4;
}
.fc .fc-daygrid-day-events{
padding: 0 2px 2px !important;
row-gap: 2px !important;
}
.fc .fc-daygrid-event-harness{
margin: 0 0 2px 0 !important;
}
.fc .fc-daygrid-event .fc-event-time{
display: none !important;
}
.fc .fc-daygrid-event{
border-radius: 6px;
padding: .1rem .25rem !important;
line-height: 1.02 !important;
background: color-mix(in srgb, var(--bs-primary), var(--bs-body-bg) 75%);
border: 1px solid color-mix(in srgb, var(--bs-primary), transparent 60%);
color: var(--bs-body-color);
}
.fc .fc-daygrid-event .fc-event-title{
font-size: .62rem !important;
line-height: 1.02 !important;
letter-spacing: -0.2px;
font-weight: 600;
font-family: "Arial Narrow","Roboto Condensed",system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
display: -webkit-box !important;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden !important;
white-space: normal !important;
text-overflow: ellipsis;
max-height: calc(1.02em * 3);
}
/* ====== Вертикальная лента недели ====== */
.week-strip-header{
margin-top: .6rem;
display: flex;
align-items: center;
justify-content: space-between;
color: var(--bs-secondary-color);
font-size: .8rem;
}
.week-vertical{
margin-top: .6rem;
display: flex;
flex-direction: column;
gap: .4rem;
}
.week-vertical .week-row{
display: grid;
grid-template-columns: 56px 1fr;
align-items: start;
gap: .6rem;
padding: .5rem .6rem;
border-radius: 12px;
background: color-mix(in srgb, var(--bs-primary), var(--bs-body-bg) 86%);
border: 1px solid color-mix(in srgb, var(--bs-primary), transparent 70%);
}
.week-vertical .week-row:hover{
background: color-mix(in srgb, var(--bs-primary), var(--bs-body-bg) 82%);
}
.date-badge{
display: grid;
place-items: center;
border-radius: 10px;
padding: .35rem .25rem;
background: color-mix(in srgb, var(--bs-primary), var(--bs-body-bg) 92%);
border: 1px solid color-mix(in srgb, var(--bs-primary), transparent 75%);
text-align: center;
line-height: 1.05;
}
.date-badge .dow{
font-size: .7rem;
font-weight: 700;
color: var(--bs-primary);
text-transform: uppercase;
}
.date-badge .md {
font-size: .74rem;
font-weight: 700;
color: var(--bs-body-color);
}
.week-vertical .content .title{
font-size: .8rem;
font-weight: 600;
color: var(--bs-body-color);
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
white-space: normal;
}
.week-vertical .content .meta{
margin-top: .15rem;
font-size: .72rem;
color: var(--bs-secondary-color);
}
/* Offcanvas (мобайл) */
#rightbarOffcanvas{
height: 100dvh;
height: 100svh;
}
#rightbarOffcanvas .offcanvas-body{
display: flex;
flex-direction: column;
gap: .6rem;
height: calc(100dvh - var(--rb-offcanvas-head, 56px));
height: calc(100svh - var(--rb-offcanvas-head, 56px));
min-height: 0;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
overscroll-behavior: contain;
}
#rightbarOffcanvas .calendar-wrap{
flex: 0 0 auto;
}
#rightbarOffcanvas .week-vertical{
flex: 0 0 auto;
}
.calendar-fab{
position: fixed;
right: 1rem;
bottom: 1rem;
z-index: 1060;
width: 52px;
height: 52px;
border-radius: 9999px;
box-shadow: 0 8px 24px rgba(0,0,0,.18);
}
/* ====== Color picker (palette) ====== */
.color-swatch{
width: 26px;
height: 26px;
border: 1px solid var(--bs-border-color);
border-radius: 9999px;
padding: 0;
cursor: pointer;
background: transparent;
}
.color-swatch.active{
outline: 2px solid var(--bs-primary);
outline-offset: 2px;
}
/* ====== Event details modal ====== */
.color-dot{
width: 12px;
height: 12px;
border-radius: 9999px;
display: inline-block;
vertical-align: middle;
margin-right: 6px;
border: 1px solid #00000022;
}