diff --git a/src/frontend/index.html b/src/frontend/index.html
index c0c029e..dbee9df 100644
--- a/src/frontend/index.html
+++ b/src/frontend/index.html
@@ -12,6 +12,7 @@
@@ -22,10 +23,199 @@
☀
+
@@ -34,15 +224,15 @@
diff --git a/src/frontend/styles.css b/src/frontend/styles.css
index e670495..66f3221 100644
--- a/src/frontend/styles.css
+++ b/src/frontend/styles.css
@@ -206,4 +206,93 @@ html, body {
border: 2px solid #333;
cursor: pointer;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
+}
+
+#layout-toggle {
+ width: 28px;
+ height: 28px;
+ border: none;
+ border-radius: 6px;
+ background: transparent;
+ color: var(--text-secondary);
+ cursor: pointer;
+ font-size: 16px;
+ transition: color 0.2s, background 0.2s;
+ -webkit-app-region: no-drag;
+}
+
+#layout-toggle:hover {
+ color: var(--text-primary);
+ background: var(--bg-tertiary);
+}
+
+.layout-popup {
+ position: absolute;
+ top: 44px;
+ right: 16px;
+ background: var(--bg-secondary);
+ border: 1px solid var(--border);
+ border-radius: 8px;
+ padding: 12px;
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
+ z-index: 1000;
+}
+
+.layout-popup.hidden {
+ display: none;
+}
+
+.layout-grid {
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+}
+
+.layout-row {
+ display: flex;
+ gap: 12px;
+}
+
+.layout-option {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 4px;
+ cursor: pointer;
+ padding: 6px;
+ border-radius: 6px;
+ transition: background 0.2s;
+}
+
+.layout-option:hover {
+ background: var(--bg-tertiary);
+}
+
+.layout-option.selected {
+ background: var(--accent);
+}
+
+.layout-preview {
+ display: grid;
+ gap: 2px;
+ width: 48px;
+ height: 48px;
+ background: var(--border);
+ border-radius: 4px;
+ padding: 2px;
+}
+
+.layout-cell {
+ background: var(--text-secondary);
+ border-radius: 2px;
+ opacity: 0.6;
+}
+
+.layout-option.selected .layout-cell {
+ background: var(--bg-secondary);
+}
+
+.layout-label {
+ font-size: 10px;
+ color: var(--text-secondary);
}
\ No newline at end of file