summaryrefslogtreecommitdiff
path: root/app/app.css
diff options
context:
space:
mode:
authoryyamashita <yyamashita@hetzner.yyamashita.com>2026-08-22 19:21:12 +0900
committeryyamashita <yyamashita@hetzner.yyamashita.com>2026-08-22 19:21:12 +0900
commit7c80f5ce7e44b95d16e19de40de0f8079377c6b9 (patch)
treead189b750361af8c7cb040b56f42df5d4e5a89ee /app/app.css
Initial commit: todo app with passkey auth and PWA supportHEADmaster
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'app/app.css')
-rw-r--r--app/app.css258
1 files changed, 258 insertions, 0 deletions
diff --git a/app/app.css b/app/app.css
new file mode 100644
index 0000000..52b88a8
--- /dev/null
+++ b/app/app.css
@@ -0,0 +1,258 @@
+*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
+
+html {
+ font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
+ background: #111827;
+ color: #f9fafb;
+ line-height: 1.5;
+ -webkit-font-smoothing: antialiased;
+}
+
+/* ── Layout ── */
+
+.wrap { max-width: 560px; margin: 0 auto; padding: 2.5rem 1.25rem 5rem; }
+
+/* ── Header ── */
+
+.site-header {
+ margin-bottom: 2rem;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+}
+.site-header h1 {
+ font-size: .8125rem;
+ font-weight: 500;
+ color: #6c63ff;
+ letter-spacing: .18em;
+ text-transform: uppercase;
+ font-family: ui-monospace, monospace;
+}
+.header-nav { display: flex; gap: 1rem; align-items: center; }
+.username {
+ font-size: .75rem;
+ color: #6b7280;
+ font-family: ui-monospace, monospace;
+}
+.logout-btn {
+ font-size: .75rem;
+ font-family: ui-monospace, monospace;
+ color: #4b5563;
+ background: none;
+ border: none;
+ cursor: pointer;
+ padding: 0;
+}
+.logout-btn:hover { color: #9ca3af; }
+
+/* ── Login box ── */
+
+.login-box {
+ margin-top: 4rem;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 1rem;
+}
+
+.btn-login {
+ display: inline-flex;
+ align-items: center;
+ gap: .5rem;
+ background: #6c63ff;
+ color: #fff;
+ border: none;
+ border-radius: 8px;
+ padding: .75rem 1.75rem;
+ font-size: .9375rem;
+ font-family: inherit;
+ font-weight: 500;
+ cursor: pointer;
+ text-decoration: none;
+ transition: background .15s;
+}
+.btn-login:hover { background: #5a52e0; }
+.btn-login:disabled { opacity: .5; cursor: not-allowed; }
+
+/* ── Compose ── */
+
+.compose { margin-bottom: 1.25rem; }
+.compose-row {
+ display: flex;
+ gap: .5rem;
+}
+.compose-row input[type="text"] {
+ flex: 1;
+ background: #1f2937;
+ border: 1px solid #374151;
+ color: #f9fafb;
+ border-radius: 8px;
+ padding: .625rem .875rem;
+ font-size: .9375rem;
+ font-family: inherit;
+ outline: none;
+ transition: border-color .15s;
+}
+.compose-row input[type="text"]:focus { border-color: #6c63ff; }
+.compose-row input[type="text"]::placeholder { color: #4b5563; }
+.compose-row button[type="submit"] {
+ background: #6c63ff;
+ color: #fff;
+ border: none;
+ border-radius: 8px;
+ padding: .625rem 1.125rem;
+ font-size: .875rem;
+ font-family: inherit;
+ font-weight: 500;
+ cursor: pointer;
+ white-space: nowrap;
+ transition: background .15s;
+}
+.compose-row button[type="submit"]:hover { background: #5a52e0; }
+.compose-row button[type="submit"]:disabled { opacity: .5; cursor: not-allowed; }
+
+/* ── Filters ── */
+
+.filters {
+ display: flex;
+ gap: .25rem;
+ margin-bottom: 1rem;
+ border-bottom: 1px solid #1f2937;
+ padding-bottom: .5rem;
+}
+.filters a {
+ font-size: .8125rem;
+ color: #6b7280;
+ text-decoration: none;
+ padding: .25rem .625rem;
+ border-radius: 4px;
+ transition: color .15s;
+}
+.filters a:hover { color: #d1d5db; }
+.filters a.active {
+ color: #6c63ff;
+ background: rgba(108, 99, 255, .12);
+}
+
+/* ── Todo list ── */
+
+.todo-list {
+ list-style: none;
+ display: flex;
+ flex-direction: column;
+ gap: .125rem;
+}
+
+.todo-item {
+ display: flex;
+ align-items: center;
+ gap: .75rem;
+ padding: .75rem .5rem;
+ border-radius: 6px;
+ transition: background .1s;
+}
+.todo-item:hover { background: #1f2937; }
+
+.toggle-form, .delete-form { display: contents; }
+
+.checkbox {
+ flex-shrink: 0;
+ background: none;
+ border: none;
+ cursor: pointer;
+ padding: 0;
+ display: flex;
+ align-items: center;
+ color: inherit;
+}
+
+.todo-title {
+ flex: 1;
+ font-size: .9375rem;
+ color: #e5e7eb;
+ word-break: break-word;
+}
+.todo-item.done .todo-title {
+ color: #4b5563;
+ text-decoration: line-through;
+}
+
+.delete-btn {
+ flex-shrink: 0;
+ background: none;
+ border: none;
+ color: #374151;
+ cursor: pointer;
+ font-size: 1.125rem;
+ padding: 0 .25rem;
+ line-height: 1;
+ opacity: 0;
+ transition: color .15s, opacity .15s;
+}
+.todo-item:hover .delete-btn { opacity: 1; }
+.delete-btn:hover { color: #f87171; }
+
+/* ── Footer ── */
+
+.todo-footer {
+ margin-top: 1rem;
+ font-size: .75rem;
+ color: #4b5563;
+ font-family: ui-monospace, monospace;
+ padding-left: .5rem;
+}
+
+/* ── Empty state ── */
+
+.empty {
+ color: #374151;
+ font-size: .875rem;
+ padding: 2.5rem 0;
+ text-align: center;
+ list-style: none;
+}
+
+/* ── Error ── */
+
+.error-msg {
+ font-size: .8125rem;
+ color: #f87171;
+ margin-top: .5rem;
+}
+
+/* ── Auth pages ── */
+
+.auth-box { max-width: 360px; }
+.auth-box h2 { font-size: 1.125rem; font-weight: 600; margin-bottom: .5rem; }
+.auth-box p { font-size: .875rem; color: #6b7280; margin-bottom: 1.5rem; line-height: 1.6; }
+
+.field-group { display: flex; flex-direction: column; gap: .5rem; margin-bottom: 1rem; }
+.field-group input {
+ background: #1f2937;
+ border: 1px solid #374151;
+ color: #f9fafb;
+ border-radius: 8px;
+ padding: .625rem .875rem;
+ font-size: .9375rem;
+ font-family: inherit;
+ outline: none;
+ transition: border-color .15s;
+}
+.field-group input:focus { border-color: #6c63ff; }
+.field-group input::placeholder { color: #4b5563; }
+
+.btn {
+ display: inline-block;
+ background: #6c63ff;
+ color: #fff;
+ border: none;
+ border-radius: 8px;
+ padding: .625rem 1.375rem;
+ font-size: .9375rem;
+ font-family: inherit;
+ font-weight: 500;
+ cursor: pointer;
+ transition: background .15s;
+}
+.btn:hover { background: #5a52e0; }
+.btn:disabled { opacity: .5; cursor: not-allowed; }