.app-page{flex-direction:column;min-height:100dvh;display:flex}.app-page>*{flex:1 0 auto}.app-boot{place-items:center;display:grid}.spinner{border:2.5px solid var(--border-strong);border-top-color:var(--brand);border-radius:50%;width:28px;height:28px;animation:.7s linear infinite spin}.spinner.sm{border-width:2px;width:16px;height:16px}@keyframes spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.spinner{animation-duration:2s}}.app{grid-template-columns:244px 1fr;align-items:stretch;gap:0;min-height:100dvh;display:grid}.app-side{border-right:1px solid var(--border);flex-direction:column;gap:18px;padding:20px 14px 28px;display:flex}.app-main{min-width:0;padding:22px 26px 56px}.app-brand{letter-spacing:-.01em;color:var(--fg);align-items:center;gap:9px;padding:4px 8px;font-size:14.5px;font-weight:700;text-decoration:none;display:flex}.app-brand:hover{color:var(--brand);text-decoration:none}.app-nav{flex-direction:column;gap:2px;display:flex}.app-nav button{width:100%;color:var(--fg-muted);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;border-radius:10px;align-items:center;gap:10px;padding:9px 12px;font-size:14.5px;font-weight:500;display:flex}.app-nav button:hover{background:var(--surface);color:var(--fg)}.app-nav button[aria-current=page]{background:var(--brand-soft);color:var(--brand);font-weight:600}.app-nav svg{flex:none}.side-label{letter-spacing:.06em;text-transform:uppercase;color:var(--fg-subtle);margin-bottom:6px;padding:0 12px;font-size:11.5px;font-weight:700}.profile-switch{flex-direction:column;gap:2px;display:flex}.profile-switch button{width:100%;color:var(--fg-muted);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;border-radius:9px;align-items:center;gap:9px;padding:7px 12px;font-size:14px;display:flex}.profile-switch button:hover{background:var(--surface);color:var(--fg)}.profile-switch button[aria-current=true]{color:var(--fg);font-weight:600}.dot{background:var(--brand);border-radius:50%;flex:none;width:10px;height:10px}.side-foot{color:var(--fg-subtle);word-break:break-word;flex-direction:column;gap:8px;margin-top:auto;padding:0 12px;font-size:12.5px;display:flex}@media (max-width:900px){.app{grid-template-columns:1fr}.app-side{border-right:none;border-bottom:1px solid var(--border);padding:14px 12px}.app-nav{flex-direction:row;overflow-x:auto}.app-nav button{white-space:nowrap;width:auto}.app-nav .nav-label,.app-brand,.side-label,.side-foot{display:none}.app-main{padding:18px 16px 48px}}.page-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:20px;display:flex}.page-head h1{margin:0 0 4px;font-size:25px}.page-head p{color:var(--fg-muted);margin:0;font-size:14.5px}.toolbar{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.crumbs{color:var(--fg-muted);flex-wrap:wrap;align-items:center;gap:4px;margin-bottom:14px;font-size:14px;display:flex}.crumbs button{color:var(--link);font:inherit;cursor:pointer;background:0 0;border:none;border-radius:6px;padding:3px 5px}.crumbs button:hover{background:var(--surface)}.crumbs .sep{color:var(--fg-subtle)}.crumbs .current{color:var(--fg);padding:3px 5px;font-weight:600}.b{border:1px solid var(--border-strong);background:var(--bg-elevated);color:var(--fg);font:inherit;cursor:pointer;white-space:nowrap;border-radius:10px;align-items:center;gap:7px;padding:8px 14px;font-size:14px;font-weight:500;display:inline-flex}.b:hover:not(:disabled){background:var(--surface)}.b:disabled{opacity:.5;cursor:not-allowed}.b.primary{background:var(--brand);border-color:var(--brand);color:var(--brand-contrast)}.b.primary:hover:not(:disabled){background:var(--brand-strong);border-color:var(--brand-strong)}.b.danger{color:var(--accent-red);border-color:var(--border-strong)}.b.danger:hover:not(:disabled){background:#d8493f17}.b.ghost{background:0 0;border-color:#0000}.b.ghost:hover:not(:disabled){background:var(--surface)}.b.sm{border-radius:8px;padding:5px 10px;font-size:13px}.b.icon{border-radius:9px;padding:7px}.f{border:1px solid var(--border-strong);background:var(--bg-elevated);width:100%;color:var(--fg);font:inherit;border-radius:10px;padding:9px 12px;font-size:14.5px}.f:focus-visible{outline:2px solid var(--brand);outline-offset:1px}textarea.f{resize:vertical;min-height:76px}.field{margin-bottom:14px;display:block}.field>span{color:var(--fg-muted);margin-bottom:5px;font-size:13px;font-weight:600;display:block}.field .hint{color:var(--fg-subtle);margin-top:5px;font-size:12.5px;font-weight:400}.tiles{grid-template-columns:repeat(auto-fill,minmax(178px,1fr));gap:14px;display:grid}.tile{border-radius:var(--radius);border:1px solid var(--border);background:var(--bg-elevated);text-align:left;cursor:pointer;font:inherit;color:var(--fg);flex-direction:column;gap:9px;min-width:0;padding:14px;display:flex;position:relative}.tile:hover{border-color:var(--border-strong);box-shadow:var(--shadow-sm)}.tile .tile-name{overflow-wrap:anywhere;font-size:14.5px;font-weight:600;line-height:1.35}.tile .tile-meta{color:var(--fg-subtle);font-size:12.5px}.tile .swatch{background:var(--brand-soft);width:38px;height:38px;color:var(--brand);border-radius:11px;flex:none;place-items:center;display:grid}.thumb{aspect-ratio:4/3;background:var(--surface);color:var(--fg-subtle);border-radius:10px;place-items:center;display:grid;overflow:hidden}.thumb img{object-fit:cover;width:100%;height:100%;display:block}.row-menu{position:absolute;top:8px;right:8px}.empty{border:1px dashed var(--border-strong);border-radius:var(--radius);text-align:center;color:var(--fg-muted);padding:34px 24px;font-size:14.5px}.empty strong{color:var(--fg);margin-bottom:6px;font-size:15.5px;display:block}.panel{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-elevated);padding:18px 20px}.panel+.panel{margin-top:14px}.panel h2{margin:0 0 4px;font-size:17px}.panel>p{color:var(--fg-muted);margin:0 0 14px;font-size:14px}.stats{flex-wrap:wrap;gap:26px;display:flex}.stat .n{font-size:27px;font-weight:700;line-height:1.1}.stat .l{color:var(--fg-subtle);font-size:12.5px}.chips{flex-wrap:wrap;gap:6px;display:flex}.chip{border:1px solid var(--border-strong);background:var(--bg-elevated);color:var(--fg-muted);cursor:pointer;border-radius:999px;align-items:center;gap:5px;padding:4px 10px;font-family:inherit;font-size:12.5px;display:inline-flex}.chip[aria-pressed=true]{background:var(--brand-soft);border-color:var(--brand);color:var(--brand);font-weight:600}.banner{border:1px solid;border-radius:10px;margin-bottom:14px;padding:11px 14px;font-size:14px}.banner.err{color:var(--accent-red);background:#d8493f14;border-color:#d8493f59}.banner.ok{color:var(--accent-green);background:#4fae5a14;border-color:#4fae5a59}.banner.info{color:var(--fg-muted);border-color:var(--border-strong);background:var(--surface)}.cal-head{justify-content:space-between;align-items:center;gap:10px;margin-bottom:12px;display:flex}.cal-head h3{margin:0;font-size:16px}.cal-grid{grid-template-columns:repeat(7,1fr);gap:5px;display:grid}.cal-dow{text-align:center;letter-spacing:.04em;color:var(--fg-subtle);text-transform:uppercase;padding-bottom:4px;font-size:11px;font-weight:700}.cal-day{aspect-ratio:1;background:var(--surface);color:var(--fg);font:inherit;cursor:pointer;border:1px solid #0000;border-radius:9px;flex-direction:column;justify-content:center;align-items:center;gap:3px;padding:0;font-size:13px;display:flex;position:relative}.cal-day.blank{cursor:default;background:0 0}.cal-day:hover:not(.blank){border-color:var(--border-strong)}.cal-day[aria-pressed=true]{border-color:var(--brand);background:var(--brand-soft)}.cal-day.today{box-shadow:inset 0 0 0 1.5px var(--brand);font-weight:700}.cal-mark{border-radius:50%;width:6px;height:6px}.cal-mark.done{background:var(--accent-green)}.cal-mark.missed{background:var(--accent-red)}.cal-mark.scheduled{background:var(--accent-warm)}.cal-day .cover{object-fit:cover;opacity:.55;border-radius:8px;width:100%;height:100%;position:absolute;inset:0}.cal-day .num{z-index:1;position:relative}.legend{color:var(--fg-muted);flex-wrap:wrap;gap:14px;margin-top:12px;font-size:12.5px;display:flex}.legend span{align-items:center;gap:6px;display:inline-flex}.photo-grid{grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:8px;display:grid}.photo-grid button{aspect-ratio:1;background:var(--surface);cursor:pointer;border:none;border-radius:10px;padding:0;overflow:hidden}.photo-grid img{object-fit:cover;width:100%;height:100%;display:block}.lightbox-img{border-radius:10px;max-width:100%;max-height:62vh;display:block}.reactions{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.reaction{border:1px solid var(--border-strong);background:var(--bg-elevated);cursor:pointer;color:var(--fg-muted);border-radius:999px;align-items:center;gap:4px;padding:3px 9px;font-family:inherit;font-size:13px;display:inline-flex}.reaction[aria-pressed=true]{border-color:var(--brand);background:var(--brand-soft);color:var(--brand)}.scrim{z-index:60;background:#0a101c8c;place-items:center;padding:20px;display:grid;position:fixed;inset:0;overflow-y:auto}.modal{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);width:min(560px,100%);max-height:min(86vh,900px);padding:22px 24px;overflow-y:auto}.modal.wide{width:min(920px,100%)}.modal h2{margin:0 0 6px;font-size:19px}.modal>p{color:var(--fg-muted);margin:0 0 16px;font-size:14px}.modal-actions{flex-wrap:wrap;justify-content:flex-end;gap:8px;margin-top:20px;display:flex}.menu-wrap{position:relative}.menu{background:var(--bg-elevated);border:1px solid var(--border-strong);min-width:194px;box-shadow:var(--shadow-md);z-index:40;border-radius:11px;padding:5px;position:absolute;top:calc(100% + 4px);right:0}.menu button{text-align:left;width:100%;font:inherit;color:var(--fg);cursor:pointer;background:0 0;border:none;border-radius:7px;padding:8px 11px;font-size:14px;display:block}.menu button:hover{background:var(--surface)}.menu button.danger{color:var(--accent-red)}.menu hr{border:none;border-top:1px solid var(--border);margin:5px 0}.viewer{z-index:70;background:var(--bg);flex-direction:column;display:flex;position:fixed;inset:0}.viewer-bar{border-bottom:1px solid var(--border);background:var(--bg-elevated);flex-wrap:wrap;flex:none;align-items:center;gap:10px;padding:9px 14px;display:flex}.viewer-bar .title{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:14.5px;font-weight:600;overflow:hidden}.viewer-body{background:var(--surface);flex:1;place-items:start center;padding:18px;display:grid;overflow:auto}.viewer-body img{max-width:100%;box-shadow:var(--shadow-md);border-radius:4px}.page-stack{box-shadow:var(--shadow-md);background:#fff;position:relative}.page-stack canvas{display:block}.page-stack .ink{touch-action:none;cursor:crosshair;position:absolute;inset:0}.tools{border-bottom:1px solid var(--border);background:var(--bg-elevated);flex-wrap:wrap;flex:none;align-items:center;gap:6px;padding:8px 14px;display:flex}.tools .sep{background:var(--border);align-self:stretch;width:1px;margin:0 4px}.tool-btn{color:var(--fg-muted);cursor:pointer;font:inherit;background:0 0;border:1px solid #0000;border-radius:9px;align-items:center;gap:6px;padding:7px 9px;font-size:13px;display:inline-flex}.tool-btn:hover{background:var(--surface);color:var(--fg)}.tool-btn[aria-pressed=true]{background:var(--brand-soft);border-color:var(--brand);color:var(--brand)}.swatches{gap:4px;display:flex}.swatch-btn{cursor:pointer;border:2px solid #0000;border-radius:6px;width:22px;height:22px;padding:0;box-shadow:inset 0 0 0 1px #0000002e}.swatch-btn[aria-pressed=true]{border-color:var(--brand)}.pagestrip{border-top:1px solid var(--border);background:var(--bg-elevated);flex:none;gap:6px;padding:8px 14px;display:flex;overflow-x:auto}.pagestrip button{border:1.5px solid var(--border-strong);background:var(--surface);width:42px;height:54px;color:var(--fg-muted);font:inherit;cursor:pointer;border-radius:6px;flex:none;font-size:12px}.pagestrip button[aria-current=true]{border-color:var(--brand);color:var(--brand);font-weight:700}.list{flex-direction:column;gap:8px;display:flex}.list-row{border:1px solid var(--border);background:var(--bg-elevated);border-radius:11px;align-items:center;gap:12px;padding:11px 14px;display:flex}.list-row .grow{flex:1;min-width:0}.list-row .name{overflow-wrap:anywhere;font-size:14.5px;font-weight:600}.list-row .sub{color:var(--fg-subtle);font-size:12.5px}.code{font-family:var(--font-mono);letter-spacing:.16em;color:var(--brand);background:var(--brand-soft);border-radius:9px;padding:6px 13px;font-size:19px;font-weight:700;display:inline-block}.scan-video{background:#000;border-radius:11px;width:100%;max-height:56vh;display:block}
