:root{--fg:#222;--fg-muted:#666;--bg:#fafafa;--card-bg:#fff;--accent:#0060df;--accent-hover:#0050c0;--border:#e0e0e0;--err:#c00;--err-bg:#fef1f1;--radius:8px;--gap:.75rem;--shadow:0 1px 3px #00000014}*{box-sizing:border-box}html,body{background:var(--bg);color:var(--fg);-webkit-font-smoothing:antialiased;margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Helvetica Neue,Hiragino Sans,Meiryo,sans-serif;line-height:1.6}img{max-width:100%;height:auto;display:block}.app-root{flex-direction:column;min-height:100vh;display:flex}.page-header{background:var(--card-bg);border-bottom:1px solid var(--border);z-index:10;box-shadow:var(--shadow);justify-content:space-between;align-items:center;padding:.6rem 1rem;display:flex;position:sticky;top:0}.site-title{color:var(--fg);font-size:1rem;font-weight:600;text-decoration:none}.page-main{flex:1;width:100%;max-width:1280px;margin:0 auto;padding:1rem}.page-footer{text-align:center;color:var(--fg-muted);border-top:1px solid var(--border);padding:1rem;font-size:.8rem}.page-nav{margin-bottom:1rem}.back-link{color:var(--accent);font-size:.95rem;text-decoration:none}.back-link:hover{text-decoration:underline}.btn{cursor:pointer;border:0;border-radius:4px;min-height:44px;padding:.6rem 1.2rem;font-size:.95rem;line-height:1.2;text-decoration:none;display:inline-block}.btn-primary{background:var(--accent);color:#fff}.btn-primary:hover{background:var(--accent-hover)}.btn-secondary{background:var(--card-bg);color:var(--fg);border:1px solid var(--border)}.btn-secondary:disabled{color:var(--fg-muted);cursor:not-allowed}.btn-ghost{color:var(--fg);background:0 0;min-height:32px;padding:.3rem .6rem;font-size:.85rem}.btn-ghost:hover{background:var(--bg)}.loading{color:var(--fg-muted);justify-content:center;align-items:center;gap:.75rem;padding:2rem;display:flex}.loading-spinner{border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:18px;height:18px;animation:.8s linear infinite spg-spin}@keyframes spg-spin{to{transform:rotate(360deg)}}.error-msg{background:var(--err-bg);border-left:3px solid var(--err);color:var(--err);border-radius:4px;margin:1rem 0;padding:1rem}.error-msg a{color:var(--err)}.event-list{gap:var(--gap);grid-template-columns:repeat(auto-fill,minmax(240px,1fr));display:grid}.event-card{background:var(--card-bg);border-radius:var(--radius);color:var(--fg);box-shadow:var(--shadow);text-decoration:none;transition:transform .1s ease-out,box-shadow .1s;overflow:hidden}.event-card:hover{transform:translateY(-2px);box-shadow:0 4px 8px #0000001f}.event-cover{aspect-ratio:16/9;background:#eaeaea;overflow:hidden}.event-cover img{object-fit:cover;width:100%;height:100%}.event-cover-empty{width:100%;height:100%;color:var(--fg-muted);justify-content:center;align-items:center;font-size:.85rem;display:flex}.event-meta{padding:.6rem .8rem}.event-date{color:var(--fg-muted);font-size:.8rem}.event-label{margin-top:.2rem;font-weight:500}.event-count{color:var(--fg-muted);margin-top:.3rem;font-size:.85rem}.photo-grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:4px;display:grid}.photo-tile{background:#eaeaea;border-radius:2px;transition:opacity .15s;display:block;overflow:hidden}.photo-tile:hover{opacity:.85}.photo-tile img{object-fit:cover;width:100%;height:100%}.grid-sentinel{text-align:center;color:var(--fg-muted);min-height:40px;padding:2rem;font-size:.85rem}.grid-end{text-align:center;color:var(--fg-muted);padding:2rem;font-size:.85rem}.photo-detail{max-width:1600px;margin:0 auto}.photo-figure{background:var(--card-bg);border-radius:var(--radius);box-shadow:var(--shadow);margin:0;overflow:hidden}.photo-image{background:#eaeaea;width:100%;height:auto;display:block}.photo-caption{border-top:1px solid var(--border);flex-wrap:wrap;align-items:baseline;gap:.5rem 1.5rem;padding:1rem;display:flex}.photo-filename{font-weight:500}.photo-taken,.photo-dim{color:var(--fg-muted);font-size:.85rem}.header-nav{align-items:center;gap:.75rem;display:flex}.header-link{color:var(--accent);font-size:.9rem;text-decoration:none}.header-link:hover{text-decoration:underline}.header-email{color:var(--fg-muted);font-size:.8rem}.admin-page{max-width:1200px;margin:0 auto}.admin-title{margin:0 0 1rem;font-size:1.4rem}.admin-tabs{border-bottom:1px solid var(--border);gap:.25rem;margin-bottom:1rem;display:flex}.admin-tab{cursor:pointer;color:var(--fg-muted);background:0 0;border:0;border-bottom:2px solid #0000;padding:.6rem 1rem;font-size:.95rem}.admin-tab.is-active{color:var(--fg);border-bottom-color:var(--accent)}.admin-invite-form{background:var(--card-bg);border-radius:var(--radius);box-shadow:var(--shadow);flex-wrap:wrap;align-items:center;gap:.5rem;margin-bottom:1rem;padding:.75rem;display:flex}.admin-invite-form input[type=email],.admin-invite-form select{border:1px solid var(--border);border-radius:4px;padding:.5rem;font-size:.95rem}.admin-invite-form input[type=email]{flex:1;min-width:200px}.invite-msg.ok{color:#175;font-size:.85rem}.invite-msg.err{color:var(--err);font-size:.85rem}.admin-table{border-collapse:collapse;background:var(--card-bg);width:100%;box-shadow:var(--shadow);border-radius:var(--radius);overflow:hidden}.admin-table th,.admin-table td{text-align:left;border-bottom:1px solid var(--border);vertical-align:top;padding:.6rem;font-size:.9rem}.admin-table th{background:var(--bg);color:var(--fg-muted);font-size:.8rem;font-weight:500}.admin-table tr:last-child td{border-bottom:0}.btn-small{border:1px solid var(--border);background:var(--card-bg);cursor:pointer;border-radius:3px;margin-bottom:.25rem;margin-right:.25rem;padding:.25rem .6rem;font-size:.8rem}.btn-small:hover:not(:disabled){background:var(--bg)}.btn-small:disabled{opacity:.5;cursor:not-allowed}.btn-danger{color:var(--err);border-color:var(--err)}.status-revoked,.vis-hidden{color:var(--err)}.status-active,.vis-members{color:#175}.row-err{color:var(--err);margin-top:.3rem;font-size:.75rem}.empty-note{text-align:center;color:var(--fg-muted);padding:1.5rem;font-size:.9rem}@media (max-width:480px){.page-main{padding:.5rem}.photo-grid{grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:2px}.event-list{grid-template-columns:1fr}.header-nav{gap:.4rem}.header-email{display:none}.admin-table{font-size:.8rem}.admin-table th,.admin-table td{padding:.4rem}}
