.calendar-page.calendar-fullscreen { box-sizing: border-box; position: relative; display: grid; grid-template-rows: 1fr; height: calc(100vh - 115px); min-height: 0; overflow: hidden; padding: 0; color: var(--text); background: var(--bg); } .calendar-page *, .calendar-page *::before, .calendar-page *::after { box-sizing: border-box; } .calendar-shell { min-height: 0; height: 100%; display: grid; grid-template-columns: minmax(240px, 300px) minmax(0, 1fr); overflow: hidden; border: 1px solid var(--line); border-radius: 0; background: var(--panel); } .calendar-toolbar-actions, .calendar-toolbar-left, .calendar-toolbar-center, .calendar-toolbar-right { min-width: 0; display: flex; align-items: center; gap: 10px; } .calendar-view-toolbar { flex: 0 0 auto; z-index: 2; display: grid; grid-template-columns: minmax(320px, 1fr) minmax(320px, auto) minmax(130px, 1fr); align-items: center; gap: 14px; padding: 10px 14px; border-bottom: 1px solid var(--line); background: var(--panel-header); } .calendar-toolbar-left { justify-content: flex-start; } .calendar-toolbar-center { justify-content: center; } .calendar-toolbar-right { justify-content: flex-end; } .calendar-range-label { min-width: min(300px, 34vw); display: inline-flex; align-items: center; justify-content: center; gap: 8px; color: var(--text-strong); } .calendar-range-label strong { overflow: hidden; font-size: 14px; text-overflow: ellipsis; white-space: nowrap; } .calendar-icon-group { display: inline-flex; align-items: center; gap: 6px; } .calendar-icon-button.btn { width: 36px; min-width: 36px; height: 36px; display: inline-flex; align-items: center; justify-content: center; padding: 0; } .calendar-icon-button.btn:disabled { opacity: .42; cursor: default; } .calendar-mode-switch { flex: 0 1 520px; display: inline-grid; grid-template-columns: repeat(5, minmax(0, 1fr)); width: min(520px, 100%); max-width: 520px; overflow: hidden; border: 1px solid #c9c3b9; border-radius: 8px; background: #c9c3b9; box-shadow: inset 0 1px 0 rgba(255,255,255,.75), 0 1px 1px rgba(0,0,0,.05); } .calendar-mode-tab { min-height: 34px; border: 0; border-radius: 0; background: linear-gradient(#ffffff, #f1efeb); color: #4f4a43; cursor: pointer; font: inherit; font-size: 13px; font-weight: 800; box-shadow: inset 0 1px 0 rgba(255,255,255,.75), 0 1px 1px rgba(0,0,0,.05); transition: background .18s ease, box-shadow .18s ease, color .18s ease; } .calendar-mode-tab + .calendar-mode-tab { border-left: 1px solid #c9c3b9; } .calendar-mode-tab:first-child { border-radius: 7px 0 0 7px; } .calendar-mode-tab:last-child { border-radius: 0 7px 7px 0; } .calendar-mode-tab:hover, .calendar-mode-tab:focus-visible { background: linear-gradient(#ffffff, #e8e5df); color: #4f4a43; box-shadow: inset 0 1px 0 rgba(255,255,255,.82), 0 2px 5px rgba(0,0,0,.08); } .calendar-mode-tab:focus-visible { outline: 3px solid rgba(82, 130, 177, .22); outline-offset: -1px; } .calendar-mode-tab.is-active { background: var(--line); color: var(--text-strong); box-shadow: inset 0 2px 5px rgba(0,0,0,.12), inset 0 -1px 0 rgba(255,255,255,.45); } .calendar-sidebar { min-width: 0; min-height: 0; display: flex; flex-direction: column; overflow: hidden; border-right: 1px solid var(--line); background: linear-gradient(180deg, var(--panel-soft), var(--panel)); } .calendar-sidebar-heading { flex: 0 0 auto; padding: 13px 14px; border-bottom: 1px solid var(--line); color: var(--muted); font-size: 12px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase; } .calendar-sidebar-heading.is-secondary { border-top: 1px solid var(--line); } .calendar-list, .calendar-agenda { display: grid; align-content: start; gap: 6px; } .calendar-list { flex: 0 0 auto; padding: 8px 8px 12px; } .calendar-empty-note { margin: 0; padding: 8px 10px; color: var(--muted); font-size: 13px; } .calendar-list-name, .calendar-agenda-item { width: 100%; min-height: 34px; border: 1px solid transparent; border-radius: 4px; background: transparent; color: var(--text); cursor: pointer; font: inherit; text-align: left; } .calendar-list-row { min-width: 0; display: grid; grid-template-columns: 42px minmax(0, 1fr) 30px; align-items: center; gap: 4px; min-height: 36px; padding: 2px 4px; border-radius: 4px; } .calendar-list-row:hover, .calendar-list-row:focus-within, .calendar-list-row.is-target { background: var(--panel-soft); } .calendar-visibility-switch { --calendar-list-color: var(--green); width: 34px; height: 20px; min-height: 20px; display: inline-flex; align-items: center; padding: 2px; border: 1px solid #c9c3b9; border-radius: 999px; background: #d8d3cb; cursor: pointer; transition: background .16s ease, border-color .16s ease; } .calendar-visibility-switch.is-on { border-color: var(--calendar-list-color); background: var(--calendar-list-color); } .calendar-visibility-switch span { width: 14px; height: 14px; border-radius: 50%; background: #fff; box-shadow: 0 1px 2px rgba(0, 0, 0, .18); transform: translateX(0); transition: transform .16s ease; } .calendar-visibility-switch.is-on span { transform: translateX(14px); } .calendar-list-name { display: flex; align-items: center; min-width: 0; padding: 7px 5px; border-radius: 0; } .calendar-list-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .calendar-list-name:hover, .calendar-list-name:focus-visible { border-color: transparent; background: transparent; color: var(--text-strong); outline: none; } .calendar-row-icon-button.btn { width: 28px; min-width: 28px; height: 28px; display: inline-flex; align-items: center; justify-content: center; padding: 0; border-color: transparent; background: transparent; opacity: .72; } .calendar-row-icon-button.btn:hover, .calendar-row-icon-button.btn:focus-visible { border-color: var(--line-dark); background: var(--surface); opacity: 1; } .calendar-create-form input[type="color"] { width: 24px; min-width: 24px; height: 24px; padding: 0; overflow: hidden; border: 1px solid var(--line-dark); border-radius: 4px; background: transparent; cursor: pointer; } .calendar-create-form input:disabled { opacity: .55; cursor: not-allowed; } .calendar-create-form { min-width: 0; display: grid; grid-template-columns: minmax(0, 1fr) 28px 36px; align-items: center; gap: 6px; margin-top: 6px; padding-top: 8px; border-top: 1px solid var(--line); } .calendar-create-form input[type="text"], .calendar-create-form input:not([type]) { min-width: 0; height: 34px; border: 1px solid var(--line-dark); border-radius: 4px; background: var(--surface); color: var(--text); font: inherit; padding: 6px 8px; } .calendar-agenda { flex: 1 1 auto; min-height: 0; grid-auto-rows: max-content; overflow: auto; padding: 8px 8px 16px; } .calendar-agenda-group { display: grid; align-content: start; gap: 4px; } .calendar-agenda-group + .calendar-agenda-group { margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--line); } .calendar-agenda-group h3 { margin: 0; padding: 0 4px 2px; color: var(--muted); font-size: 11px; font-weight: 800; letter-spacing: .04em; text-transform: uppercase; } .calendar-agenda-item { --calendar-event-color: var(--green); --calendar-event-bg: #edf8f5; --calendar-event-border: #b9d7d0; display: block; min-height: 28px; padding: 5px 7px; border: 1px solid var(--calendar-event-border); border-left: 4px solid var(--calendar-event-color, var(--green)); background: var(--calendar-event-bg); color: #21453e; } .calendar-agenda-item strong { min-width: 0; overflow: hidden; font-size: 13px; text-overflow: ellipsis; white-space: nowrap; } .calendar-agenda-item .calendar-event-time, .calendar-agenda-item .calendar-event-separator, .calendar-agenda p { margin: 0; color: #4d6764; font-size: 12px; } .calendar-view-shell { flex: 1 1 auto; min-width: 0; min-height: 0; position: relative; display: flex; flex-direction: column; overflow: hidden; border: 0; border-radius: 0; background: var(--surface); box-shadow: none; } .calendar-main-panel { min-width: 0; min-height: 0; display: flex; flex-direction: column; overflow: hidden; background: var(--panel); } .calendar-loading { position: absolute; inset: 0 auto auto 0; z-index: 4; padding: 10px; border-right: 1px solid var(--line); border-bottom: 1px solid var(--line); background: rgba(255, 255, 255, 0.9); } .calendar-week-rows { min-width: 760px; min-height: 0; } .calendar-week-rows.is-month { flex: 1 1 auto; height: 100%; min-height: 480px; display: flex; flex-direction: column; overflow: auto; } .calendar-week-rows.is-continuous { display: block; } .calendar-week-spacer { pointer-events: none; } .calendar-weekday-header, .calendar-week-row { display: grid; grid-template-columns: repeat(7, minmax(104px, 1fr)); } .calendar-weekday-header { position: sticky; top: 0; z-index: 2; flex: 0 0 auto; border-bottom: 1px solid var(--line-dark); background: var(--panel); } .calendar-weekday-header span { min-height: 34px; padding: 9px 10px; color: var(--muted); font-size: 12px; font-weight: 700; text-transform: uppercase; } .calendar-week-rows.is-month .calendar-week-row { flex: 1 1 0; min-height: 92px; } .calendar-week-row { min-height: 132px; border-bottom: 1px solid var(--line); } .calendar-week-rows.is-continuous .calendar-week-row { height: 128px; min-height: 128px; max-height: 128px; overflow: hidden; } .calendar-day-cell { min-width: 0; min-height: 0; display: flex; flex-direction: column; gap: 6px; padding: 8px; border-right: 1px solid var(--line); background: var(--surface); overflow: hidden; } .calendar-day-cell.is-even-month { background: #ffffff; } .calendar-day-cell.is-odd-month { background: #f8f6f2; } .calendar-day-cell.is-muted { color: #8a8278; background: #f1efeb; } .calendar-day-cell.is-today { box-shadow: inset 0 0 0 2px var(--green); } .calendar-day-cell.is-drop-target { background: #e3f3ef; box-shadow: inset 0 0 0 2px var(--green); } .calendar-day-cell header { display: flex; align-items: baseline; justify-content: space-between; min-height: 20px; gap: 8px; } .calendar-day-number { color: var(--text-strong); font-weight: 700; } .calendar-day-cell header small { overflow: hidden; color: var(--muted); font-size: 12px; font-weight: 700; text-overflow: ellipsis; white-space: nowrap; } .calendar-event-stack { min-height: 0; display: grid; align-content: start; gap: 4px; overflow: hidden; } .calendar-event-chip { --calendar-event-color: var(--green); --calendar-event-bg: #edf8f5; --calendar-event-border: #b9d7d0; min-width: 0; min-height: 26px; display: block; padding: 4px 7px; border: 1px solid var(--calendar-event-border); border-left: 4px solid var(--calendar-event-color); border-radius: 4px; background: var(--calendar-event-bg); color: #21453e; cursor: pointer; font: inherit; font-size: 12px; text-align: left; } .calendar-event-chip[draggable="true"], .calendar-timed-event[draggable="true"] { cursor: grab; } .calendar-event-chip.is-dragging, .calendar-timed-event.is-dragging { opacity: .48; } .calendar-event-chip:hover, .calendar-event-chip:focus-visible, .calendar-event-chip.is-linked-hover, .calendar-agenda-item:hover, .calendar-agenda-item:focus-visible, .calendar-agenda-item.is-linked-hover { border-color: var(--calendar-event-color); background: var(--calendar-event-bg); outline: none; } .calendar-event-chip.is-compact { min-height: 26px; margin: 3px 4px; } .calendar-event-line { min-width: 0; display: flex; align-items: baseline; gap: 4px; overflow: hidden; white-space: nowrap; } .calendar-event-line strong { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .calendar-event-time, .calendar-event-separator { flex: 0 0 auto; color: #4d6764; } .calendar-more-events { color: var(--muted); font-size: 12px; } .calendar-continuous { flex: 1 1 auto; min-height: 0; overflow: auto; } .calendar-time-view { flex: 1 1 auto; height: 100%; min-height: 0; display: flex; flex-direction: column; overflow: hidden; } .calendar-time-header, .calendar-all-day-strip, .calendar-time-grid { display: grid; min-width: 720px; } .calendar-time-header { flex: 0 0 auto; } .calendar-time-header > header, .calendar-time-corner, .calendar-all-day-label, .calendar-all-day-cell { border-bottom: 1px solid var(--line-dark); border-right: 1px solid var(--line); background: var(--panel); } .calendar-time-header > header, .calendar-time-corner { display: grid; align-content: center; min-height: 54px; padding: 8px 10px; } .calendar-time-header > header.is-today { background: #e0f0ea; } .calendar-time-header > header.is-weekend, .calendar-all-day-cell.is-weekend { background: #f1efeb; } .calendar-time-header > header span { color: var(--muted); font-size: 12px; } .calendar-all-day-strip { flex: 0 0 auto; min-height: 42px; border-bottom: 1px solid var(--line-dark); } .calendar-all-day-label { padding: 10px 8px; color: var(--muted); font-size: 12px; font-weight: 700; } .calendar-all-day-cell { min-height: 42px; display: grid; align-content: start; background: var(--surface); } .calendar-all-day-cell.is-drop-target { background: #e3f3ef; box-shadow: inset 0 0 0 2px var(--green); } .calendar-time-scroll { flex: 1 1 auto; min-height: 0; overflow: auto; } .calendar-time-grid { --calendar-work-start-y: 384px; --calendar-work-end-y: 1280px; --calendar-off-hours-opacity: 1; --calendar-day-shade: transparent; align-items: start; height: 1536px; min-height: 1536px; background: var(--surface); } .calendar-hour-label-column { display: grid; grid-template-rows: repeat(24, 64px); height: 1536px; } .calendar-hour-label { min-height: 64px; border-bottom: 1px solid var(--line); border-right: 1px solid var(--line); padding: 8px; color: var(--muted); font-size: 12px; background: var(--panel-soft); } .calendar-day-time-column { position: relative; height: 1536px; min-height: 1536px; border-right: 1px solid var(--line); background: linear-gradient(to bottom, var(--calendar-day-shade), var(--calendar-day-shade)), linear-gradient( to bottom, rgba(241, 239, 235, var(--calendar-off-hours-opacity)) 0, rgba(241, 239, 235, var(--calendar-off-hours-opacity)) var(--calendar-work-start-y), transparent var(--calendar-work-start-y), transparent var(--calendar-work-end-y), rgba(241, 239, 235, var(--calendar-off-hours-opacity)) var(--calendar-work-end-y), rgba(241, 239, 235, var(--calendar-off-hours-opacity)) 100% ), repeating-linear-gradient( to bottom, var(--surface) 0, var(--surface) 63px, var(--line) 63px, var(--line) 64px ); } .calendar-day-time-column.is-weekend { --calendar-day-shade: rgba(241, 239, 235, .74); } .calendar-day-time-column.is-drop-target { box-shadow: inset 0 0 0 2px rgba(90, 169, 155, .55); } .calendar-time-drop-marker { position: absolute; left: 0; right: 0; z-index: 4; border-top: 2px solid var(--green); pointer-events: none; } .calendar-time-drop-marker::before { position: absolute; left: 0; top: -5px; width: 8px; height: 8px; border-radius: 999px; background: var(--green); content: ""; } .calendar-time-drop-marker span { position: absolute; top: -13px; left: 10px; padding: 2px 6px; border: 1px solid #4f9489; border-radius: 4px; background: var(--green); color: #fff; font-size: 11px; font-weight: 800; line-height: 1.2; } .calendar-timed-event, .calendar-timed-overflow { position: absolute; z-index: 1; min-width: 0; border-radius: 4px; font: inherit; text-align: left; } .calendar-timed-event { --calendar-event-color: var(--green); --calendar-event-bg: #edf8f5; --calendar-event-border: #b9d7d0; display: block; padding: 0; overflow: hidden; border: 1px solid var(--calendar-event-border); border-left: 4px solid var(--calendar-event-color); background: var(--calendar-event-bg); color: #21453e; cursor: pointer; font-size: 12px; } .calendar-timed-event:hover, .calendar-timed-event:focus-within, .calendar-timed-event.is-linked-hover, .calendar-timed-overflow:hover, .calendar-timed-overflow:focus-visible { border-color: var(--calendar-event-color, #5aa99b); background: var(--calendar-event-bg, #e3f3ef); outline: none; } .calendar-timed-event-content { width: 100%; height: 100%; min-width: 0; display: block; border: 0; background: transparent; color: inherit; cursor: pointer; font: inherit; padding: 5px 7px; text-align: left; } .calendar-timed-event-content:focus-visible { outline: 2px solid rgba(90, 169, 155, .35); outline-offset: -2px; } .calendar-event-resize-handle { position: absolute; left: 0; right: 0; z-index: 3; height: 8px; cursor: ns-resize; } .calendar-event-resize-handle.is-start { top: 0; } .calendar-event-resize-handle.is-end { bottom: 0; } .calendar-event-resize-handle::after { position: absolute; left: 50%; width: 34px; height: 2px; border-radius: 999px; background: rgba(33, 69, 62, .46); content: ""; opacity: 0; transform: translateX(-50%); } .calendar-event-resize-handle.is-start::after { top: 2px; } .calendar-event-resize-handle.is-end::after { bottom: 2px; } .calendar-timed-event:hover .calendar-event-resize-handle::after { opacity: .7; } .calendar-event-resize-handle:hover::after { opacity: 1; } .calendar-timed-overflow { height: 28px; display: grid; place-items: center; border: 1px solid var(--line-dark); background: var(--panel-soft); color: var(--text-strong); cursor: pointer; font-size: 12px; font-weight: 800; } .calendar-event-dialog { width: min(560px, 100%); } .calendar-dialog-form { display: grid; gap: 14px; } .calendar-dialog-form label { display: grid; gap: 5px; color: var(--muted); font-size: 13px; font-weight: 700; } .calendar-dialog-form input, .calendar-dialog-form select, .calendar-dialog-form textarea { min-height: 38px; } .calendar-dialog-form textarea { resize: vertical; } .calendar-dialog-form input:disabled, .calendar-dialog-form select:disabled, .calendar-dialog-form textarea:disabled { background: var(--panel-soft); color: var(--muted); cursor: not-allowed; } .calendar-dialog-row, .calendar-dialog-date-row { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; } .calendar-dialog-name-color-row { display: grid; grid-template-columns: minmax(0, 1fr) 86px; gap: 12px; } .calendar-dialog-color-label input[type="color"] { width: 100%; min-width: 0; padding: 3px; } .calendar-form-error { margin: 0; padding: 9px 10px; border: 1px solid #f0b8b2; border-radius: 4px; background: #fff2f0; color: var(--red); font-size: 13px; } .calendar-delete-warning, .calendar-form-note { margin: 0; padding: 9px 10px; border-radius: 4px; font-size: 13px; } .calendar-delete-warning { border: 1px solid #f0b8b2; background: #fff2f0; color: var(--red); } .calendar-form-note { border: 1px solid var(--line); background: var(--panel-soft); color: var(--muted); } .calendar-delete-options { display: grid; gap: 10px; margin: 0; padding: 10px; border: 1px solid var(--line); border-radius: 6px; background: var(--panel-soft); } .calendar-delete-options legend { padding: 0 4px; color: var(--muted); font-size: 12px; font-weight: 800; } .calendar-delete-options label, .calendar-checkbox-row { display: flex; align-items: center; gap: 8px; color: var(--text); font-size: 13px; font-weight: 700; } .calendar-delete-target-label { display: grid; align-items: stretch; gap: 5px; } .calendar-delete-options input[type="radio"], .calendar-checkbox-row input[type="checkbox"] { min-height: 0; } .calendar-delete-options .is-disabled { color: var(--muted); } .calendar-event-dialog-footer { justify-content: space-between; gap: 12px; } .calendar-dialog-actions { display: flex; justify-content: flex-end; gap: 10px; } .calendar-event-dialog-footer .btn { display: inline-flex; align-items: center; gap: 7px; } @media (max-width: 1100px) { .calendar-view-toolbar { grid-template-columns: 1fr; align-items: stretch; } .calendar-toolbar-left, .calendar-toolbar-center, .calendar-toolbar-right { justify-content: flex-start; flex-wrap: wrap; } .calendar-range-label { min-width: min(280px, 100%); } } @media (max-width: 560px) { .calendar-page.calendar-fullscreen { padding: 0; } .calendar-shell { grid-template-columns: 1fr; grid-template-rows: minmax(150px, 220px) minmax(0, 1fr); } .calendar-sidebar { border-right: 0; border-bottom: 1px solid var(--line); } .calendar-mode-switch { flex-basis: 100%; width: 100%; max-width: none; } .calendar-dialog-row, .calendar-dialog-date-row, .calendar-dialog-name-color-row { grid-template-columns: 1fr; } }