:root{--bg:#f6f7f9;--surface:#fff;--border:#e2e5ea;--text:#1c2330;--muted:#626b7a;--primary:#2f6fed;--primary-hover:#245ad0;--danger:#d33a3a;--danger-hover:#b62f2f;--success:#1f9d55;--warn-bg:#fff8e6;--warn-border:#f0d68a;--radius:8px;--shadow:0 1px 3px #141e3214, 0 1px 2px #141e320f;--maxw:1080px;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif}*{box-sizing:border-box}html,body,#app{min-height:100%;margin:0}body{background:var(--bg);color:var(--text);line-height:1.5}a{color:var(--primary);text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3{margin:0 0 .5rem;line-height:1.25}.app-header{background:var(--surface);border-bottom:1px solid var(--border);z-index:10;position:sticky;top:0}.app-header .inner{max-width:var(--maxw);align-items:center;gap:1rem;margin:0 auto;padding:.75rem 1rem;display:flex}.app-header .brand{color:var(--text);font-size:1.1rem;font-weight:700}.app-header nav{flex-wrap:wrap;align-items:center;gap:1rem;margin-left:auto;display:flex}.app-header .who{color:var(--muted);font-size:.85rem}.container{max-width:var(--maxw);margin:0 auto;padding:1.5rem 1rem 4rem}.container--narrow{max-width:460px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.25rem}label{margin-bottom:.25rem;font-size:.85rem;font-weight:600;display:block}input[type=text],input[type=email],input[type=password],input[type=search],select{border:1px solid var(--border);width:100%;font:inherit;color:var(--text);background:#fff;border-radius:6px;padding:.55rem .65rem}input:focus,select:focus{border-color:var(--primary);outline:2px solid #2f6fed59}.field{margin-bottom:1rem}.field .hint{color:var(--muted);margin-top:.25rem;font-size:.78rem;font-weight:400}button,.btn{font:inherit;cursor:pointer;background:var(--primary);color:#fff;border:1px solid #0000;border-radius:6px;align-items:center;gap:.4rem;padding:.5rem .9rem;font-weight:600;display:inline-flex}button:hover:not(:disabled),.btn:hover:not(:disabled){background:var(--primary-hover);text-decoration:none}button:disabled,.btn:disabled{opacity:.55;cursor:not-allowed}.btn--ghost{color:var(--primary);border-color:var(--border);background:0 0}.btn--ghost:hover:not(:disabled){background:#eef3fd}.btn--danger{background:var(--danger)}.btn--danger:hover:not(:disabled){background:var(--danger-hover)}.btn--sm{padding:.3rem .55rem;font-size:.82rem}.muted{color:var(--muted)}.stack>*+*{margin-top:1rem}.row{flex-wrap:wrap;align-items:center;gap:.6rem;display:flex}.spread{justify-content:space-between;align-items:center;gap:1rem;display:flex}.alert{border:1px solid #0000;border-radius:6px;padding:.6rem .8rem;font-size:.9rem}.alert--error{color:#8a2020;background:#fdecec;border-color:#f3b6b6}.alert--success{color:#14663a;background:#e7f6ee;border-color:#a9dcbf}.alert--warn{background:var(--warn-bg);border-color:var(--warn-border);color:#7a5b06}.alert--info{color:#22467f;background:#eaf1fd;border-color:#bcd2f7}.progress{background:#e9edf3;border-radius:999px;height:10px;overflow:hidden}.progress>span{background:var(--primary);height:100%;transition:width .15s;display:block}table{border-collapse:collapse;width:100%;font-size:.9rem}th,td{text-align:left;border-bottom:1px solid var(--border);vertical-align:middle;padding:.55rem .5rem}th{text-transform:uppercase;letter-spacing:.03em;color:var(--muted);font-size:.78rem}.badge{color:var(--muted);text-transform:uppercase;letter-spacing:.03em;background:#eef1f6;border-radius:999px;padding:.1rem .45rem;font-size:.72rem;font-weight:700;display:inline-block}.badge--role{color:#2f6fed;background:#eaf1fd}.badge--owner{color:#9a6a00;background:#fff2d8}.badge--guest{color:#6a3fd0;background:#f0eafd}.grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:.9rem;display:grid}.asset-card,.folder-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;gap:.5rem;padding:.75rem;display:flex}.asset-card .thumb{aspect-ratio:4/3;color:var(--muted);background:#f0f2f6;border-radius:6px;justify-content:center;align-items:center;font-size:.8rem;display:flex;overflow:hidden}.asset-card .thumb img{object-fit:cover;width:100%;height:100%}.folder-card{cursor:pointer;flex-direction:row;align-items:center;gap:.6rem}.folder-card:hover{border-color:var(--primary)}.name-ellipsis{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.breadcrumb{flex-wrap:wrap;align-items:center;gap:.35rem;margin-bottom:1rem;font-size:.9rem;display:flex}.breadcrumb .sep{color:var(--muted)}.breadcrumb button{color:var(--primary);background:0 0;border:none;padding:0;font-weight:600}.breadcrumb button:hover{background:0 0;text-decoration:underline}.breadcrumb .current{color:var(--text);font-weight:700}.dropzone{border:2px dashed var(--border);border-radius:var(--radius);text-align:center;color:var(--muted);background:#fbfcfe;padding:1.5rem;transition:border-color .15s,background .15s}.dropzone.dragover{border-color:var(--primary);background:#eef3fd}.preview-wrap img,.preview-wrap video{border-radius:var(--radius);max-width:100%;max-height:70vh;margin:0 auto;display:block}.preview-wrap iframe{border:1px solid var(--border);border-radius:var(--radius);width:100%;height:75vh}.copy-field{gap:.4rem;display:flex}.copy-field input{flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.82rem}.spinner{border:2px solid #ffffff80;border-top-color:#fff;border-radius:50%;width:1.1em;height:1.1em;animation:.7s linear infinite spin;display:inline-block}.center-state{text-align:center;color:var(--muted);padding:3rem 1rem}@keyframes spin{to{transform:rotate(360deg)}}.sr-only{clip:rect(0, 0, 0, 0);border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}
