diff --git a/frontend/css/app.css b/frontend/css/app.css
index 89e567b..cd1214b 100644
--- a/frontend/css/app.css
+++ b/frontend/css/app.css
@@ -616,6 +616,104 @@ a { color: var(--primary); text-decoration: none; }
/* Day view specifics */
.day-view .week-day-col { flex: 1; }
+/* ── Quarter View ───────────────────────────────────────── */
+.quarter-view {
+ display: flex;
+ gap: 16px;
+ padding: 16px;
+ height: 100%;
+ box-sizing: border-box;
+ overflow-y: auto;
+}
+.qtr-month {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ min-width: 0;
+ background: var(--bg-2);
+ border: 1px solid var(--border);
+ border-radius: 8px;
+ overflow: hidden;
+}
+.qtr-month-name {
+ font-size: 13px;
+ font-weight: 600;
+ color: var(--text-1);
+ padding: 10px 12px 8px;
+ border-bottom: 1px solid var(--border);
+ letter-spacing: .3px;
+}
+.qtr-month-grid { padding: 6px 8px 8px; }
+.qtr-header {
+ display: grid;
+ grid-template-columns: repeat(7, 1fr);
+ margin-bottom: 2px;
+}
+.qtr-dow {
+ font-size: 10px;
+ font-weight: 600;
+ text-transform: uppercase;
+ color: var(--text-3);
+ text-align: center;
+ padding: 3px 0;
+}
+.qtr-cells {
+ display: grid;
+ grid-template-columns: repeat(7, 1fr);
+ grid-template-rows: repeat(6, auto);
+}
+.qtr-cell {
+ padding: 3px 2px;
+ text-align: center;
+ cursor: pointer;
+ border-radius: 4px;
+ min-height: 36px;
+}
+.qtr-cell:hover { background: var(--bg-hover); }
+.qtr-cell.today .qtr-day-num {
+ background: var(--today-color, var(--primary));
+ color: #fff;
+ border-radius: 50%;
+}
+.qtr-cell.selected .qtr-day-num {
+ background: var(--primary);
+ color: #fff;
+ border-radius: 50%;
+ opacity: .55;
+}
+.qtr-day-num {
+ font-size: 12px;
+ font-weight: 500;
+ color: var(--text-2);
+ width: 22px;
+ height: 22px;
+ line-height: 22px;
+ margin: 0 auto 2px;
+}
+.qtr-cell.other-month .qtr-day-num { color: var(--text-3); opacity: .45; }
+.qtr-cell.today .qtr-day-num { color: #fff; }
+.qtr-dots {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+ gap: 2px;
+ min-height: 6px;
+}
+.qtr-dot {
+ display: inline-block;
+ width: 6px;
+ height: 6px;
+ border-radius: 50%;
+ flex-shrink: 0;
+ cursor: pointer;
+}
+.qtr-dot.past { opacity: .45; }
+.qtr-dot-more {
+ font-size: 9px;
+ color: var(--text-3);
+ line-height: 6px;
+}
+
/* ── Agenda View ────────────────────────────────────────── */
.agenda-view { padding: 16px; }
.agenda-day { margin-bottom: 16px; }
diff --git a/frontend/index.html b/frontend/index.html
index 480ebe7..291fad8 100644
--- a/frontend/index.html
+++ b/frontend/index.html
@@ -102,6 +102,7 @@
+