2025-12-06 01:22:04 +01:00
|
|
|
:root {
|
|
|
|
|
--hour-height: 60px;
|
|
|
|
|
--time-axis-width: 60px;
|
|
|
|
|
--grid-columns: 5;
|
|
|
|
|
--color-border: #e0e0e0;
|
|
|
|
|
--color-surface: #fff;
|
|
|
|
|
--color-text-secondary: #666;
|
|
|
|
|
--color-primary: #1976d2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
* { box-sizing: border-box; margin: 0; padding: 0; }
|
|
|
|
|
|
|
|
|
|
body {
|
|
|
|
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
|
|
|
background: #f5f5f5;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.calendar-wrapper {
|
|
|
|
|
height: 100vh;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
swp-calendar {
|
|
|
|
|
display: grid;
|
|
|
|
|
grid-template-rows: auto 1fr;
|
|
|
|
|
height: 100%;
|
|
|
|
|
background: var(--color-surface);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Nav */
|
|
|
|
|
swp-calendar-nav {
|
|
|
|
|
display: flex;
|
|
|
|
|
gap: 16px;
|
|
|
|
|
padding: 12px 16px;
|
|
|
|
|
border-bottom: 1px solid var(--color-border);
|
|
|
|
|
align-items: center;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
swp-nav-button {
|
|
|
|
|
padding: 8px 16px;
|
|
|
|
|
border: 1px solid var(--color-border);
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
background: var(--color-surface);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
swp-nav-button:hover { background: #f0f0f0; }
|
|
|
|
|
|
|
|
|
|
swp-week-info {
|
|
|
|
|
margin-left: auto;
|
|
|
|
|
text-align: right;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
swp-week-number {
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
display: block;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
swp-date-range {
|
|
|
|
|
font-size: 12px;
|
|
|
|
|
color: var(--color-text-secondary);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Container */
|
|
|
|
|
swp-calendar-container {
|
|
|
|
|
display: grid;
|
|
|
|
|
grid-template-columns: var(--time-axis-width) 1fr;
|
|
|
|
|
grid-template-rows: auto 1fr;
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Time axis */
|
|
|
|
|
swp-time-axis {
|
2025-12-06 10:52:20 +01:00
|
|
|
grid-column: 1;
|
|
|
|
|
grid-row: 1 / 3;
|
|
|
|
|
display: grid;
|
|
|
|
|
grid-template-rows: subgrid;
|
2025-12-06 01:22:04 +01:00
|
|
|
border-right: 1px solid var(--color-border);
|
|
|
|
|
background: var(--color-surface);
|
2025-12-06 10:52:20 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
swp-header-spacer {
|
|
|
|
|
border-bottom: 1px solid var(--color-border);
|
2025-12-06 01:22:04 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
swp-time-axis-content {
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
2025-12-06 10:52:20 +01:00
|
|
|
overflow: hidden;
|
2025-12-06 01:22:04 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
swp-hour-marker {
|
|
|
|
|
height: var(--hour-height);
|
|
|
|
|
padding: 4px 8px;
|
|
|
|
|
font-size: 11px;
|
|
|
|
|
color: var(--color-text-secondary);
|
|
|
|
|
text-align: right;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Grid container */
|
|
|
|
|
swp-grid-container {
|
|
|
|
|
grid-column: 2;
|
|
|
|
|
grid-row: 1 / 3;
|
|
|
|
|
display: grid;
|
2025-12-06 10:52:20 +01:00
|
|
|
grid-template-rows: subgrid;
|
2025-12-06 01:22:04 +01:00
|
|
|
overflow: hidden;
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-07 14:31:16 +01:00
|
|
|
/* Viewport/Track for slide animation */
|
|
|
|
|
swp-header-viewport,
|
|
|
|
|
swp-content-viewport {
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
swp-header-track,
|
|
|
|
|
swp-content-track {
|
|
|
|
|
display: flex;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
swp-header-track > swp-calendar-header,
|
|
|
|
|
swp-content-track > swp-scrollable-content {
|
|
|
|
|
flex: 0 0 100%;
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-06 01:22:04 +01:00
|
|
|
/* Header */
|
|
|
|
|
swp-calendar-header {
|
|
|
|
|
display: grid;
|
|
|
|
|
grid-template-columns: repeat(var(--grid-columns), 1fr);
|
|
|
|
|
grid-auto-rows: auto;
|
|
|
|
|
background: var(--color-surface);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
swp-calendar-header[data-levels="date"] > swp-day-header { grid-row: 1; }
|
|
|
|
|
|
|
|
|
|
swp-calendar-header[data-levels="resource date"] > swp-resource-header { grid-row: 1; }
|
|
|
|
|
swp-calendar-header[data-levels="resource date"] > swp-day-header { grid-row: 2; }
|
|
|
|
|
|
|
|
|
|
swp-calendar-header[data-levels="team resource date"] > swp-team-header { grid-row: 1; }
|
|
|
|
|
swp-calendar-header[data-levels="team resource date"] > swp-resource-header { grid-row: 2; }
|
|
|
|
|
swp-calendar-header[data-levels="team resource date"] > swp-day-header { grid-row: 3; }
|
|
|
|
|
|
2025-12-06 01:25:03 +01:00
|
|
|
swp-day-header,
|
|
|
|
|
swp-resource-header,
|
|
|
|
|
swp-team-header {
|
2025-12-06 01:22:04 +01:00
|
|
|
padding: 8px;
|
|
|
|
|
text-align: center;
|
|
|
|
|
border-right: 1px solid var(--color-border);
|
2025-12-06 01:25:03 +01:00
|
|
|
border-bottom: 1px solid var(--color-border);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
swp-team-header {
|
|
|
|
|
background: #e3f2fd;
|
|
|
|
|
color: #1565c0;
|
|
|
|
|
font-weight: 500;
|
2025-12-06 01:22:04 +01:00
|
|
|
}
|
|
|
|
|
|
2025-12-06 01:25:03 +01:00
|
|
|
swp-resource-header {
|
|
|
|
|
background: #fafafa;
|
|
|
|
|
font-size: 13px;
|
|
|
|
|
}
|
2025-12-06 01:22:04 +01:00
|
|
|
|
|
|
|
|
swp-day-name {
|
|
|
|
|
display: block;
|
|
|
|
|
font-size: 11px;
|
|
|
|
|
color: var(--color-text-secondary);
|
|
|
|
|
text-transform: uppercase;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
swp-day-date {
|
|
|
|
|
display: block;
|
|
|
|
|
font-size: 24px;
|
|
|
|
|
font-weight: 300;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Scrollable content */
|
|
|
|
|
swp-scrollable-content {
|
|
|
|
|
overflow: auto;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
swp-time-grid {
|
|
|
|
|
position: relative;
|
|
|
|
|
min-height: calc(15 * var(--hour-height));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
swp-grid-lines {
|
|
|
|
|
position: absolute;
|
|
|
|
|
inset: 0;
|
|
|
|
|
background: repeating-linear-gradient(
|
|
|
|
|
to bottom,
|
|
|
|
|
transparent,
|
|
|
|
|
transparent calc(var(--hour-height) - 1px),
|
2025-12-06 01:25:03 +01:00
|
|
|
var(--color-border) calc(var(--hour-height) - 1px),
|
|
|
|
|
var(--color-border) var(--hour-height)
|
2025-12-06 01:22:04 +01:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
swp-day-columns {
|
|
|
|
|
position: absolute;
|
|
|
|
|
inset: 0;
|
|
|
|
|
display: grid;
|
|
|
|
|
grid-template-columns: repeat(var(--grid-columns), 1fr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
swp-day-column {
|
|
|
|
|
position: relative;
|
|
|
|
|
border-right: 1px solid var(--color-border);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
swp-events-layer {
|
|
|
|
|
position: absolute;
|
|
|
|
|
inset: 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Events */
|
|
|
|
|
swp-event {
|
|
|
|
|
position: absolute;
|
|
|
|
|
background: var(--color-primary);
|
|
|
|
|
color: white;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
padding: 4px 6px;
|
|
|
|
|
font-size: 12px;
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
swp-event-time {
|
|
|
|
|
display: block;
|
|
|
|
|
font-size: 10px;
|
|
|
|
|
opacity: 0.9;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
swp-event-title {
|
|
|
|
|
display: block;
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
}
|