@charset "UTF-8";.tint{background:#fafafa}:root{color-scheme:light dark;--color-accent: #ff3366;--color-black: #000000;--color-error: #dc3545;--color-extra-1: #007bff;--color-extra-10: #f9f9f9;--color-extra-11: #111827;--color-extra-12: #333333;--color-extra-13: #374151;--color-extra-14: #3b82f6;--color-extra-15: #6366f1;--color-extra-16: #6b7280;--color-extra-17: #7f1d1d;--color-extra-18: #9ca3af;--color-extra-19: #a7f3d0;--color-extra-2: #111111;--color-extra-20: #b91c1c;--color-extra-21: #dc2626;--color-extra-22: #e0e0e0;--color-extra-23: #e5e7eb;--color-extra-24: #ecfdf5;--color-extra-25: #eeeeee;--color-extra-26: #f3f4f6;--color-extra-27: #f9fafb;--color-extra-28: #fecaca;--color-extra-29: #fef2f2;--color-extra-3: #1a1a1a;--color-extra-4: #555555;--color-extra-5: #666666;--color-extra-6: #888888;--color-extra-7: #cccccc;--color-extra-8: #dddddd;--color-extra-9: #f4f4f4;--color-gray-100: #f8f9fa;--color-gray-200: #e9ecef;--color-gray-300: #dee2e6;--color-gray-400: #ced4da;--color-gray-500: #adb5bd;--color-gray-600: #6c757d;--color-gray-700: #495057;--color-gray-800: #343a40;--color-gray-900: #212529;--color-info: #17a2b8;--color-link-visited: #6610f2;--color-primary: #0057ff;--color-secondary: #f58220;--color-success: #28a745;--color-tinted: #fafafa;--color-warning: #ffc107;--color-white: #ffffff;--color-accent-rgb: 255, 51, 102;--color-black-rgb: 0, 0, 0;--color-error-rgb: 220, 53, 69;--color-extra-1-rgb: 0, 123, 255;--color-extra-10-rgb: 249, 249, 249;--color-extra-11-rgb: 17, 24, 39;--color-extra-12-rgb: 51, 51, 51;--color-extra-13-rgb: 55, 65, 81;--color-extra-14-rgb: 59, 130, 246;--color-extra-15-rgb: 99, 102, 241;--color-extra-16-rgb: 107, 114, 128;--color-extra-17-rgb: 127, 29, 29;--color-extra-18-rgb: 156, 163, 175;--color-extra-19-rgb: 167, 243, 208;--color-extra-2-rgb: 17, 17, 17;--color-extra-20-rgb: 185, 28, 28;--color-extra-21-rgb: 220, 38, 38;--color-extra-22-rgb: 224, 224, 224;--color-extra-23-rgb: 229, 231, 235;--color-extra-24-rgb: 236, 253, 245;--color-extra-25-rgb: 238, 238, 238;--color-extra-26-rgb: 243, 244, 246;--color-extra-27-rgb: 249, 250, 251;--color-extra-28-rgb: 254, 202, 202;--color-extra-29-rgb: 254, 242, 242;--color-extra-3-rgb: 26, 26, 26;--color-extra-4-rgb: 85, 85, 85;--color-extra-5-rgb: 102, 102, 102;--color-extra-6-rgb: 136, 136, 136;--color-extra-7-rgb: 204, 204, 204;--color-extra-8-rgb: 221, 221, 221;--color-extra-9-rgb: 244, 244, 244;--color-gray-100-rgb: 248, 249, 250;--color-gray-200-rgb: 233, 236, 239;--color-gray-300-rgb: 222, 226, 230;--color-gray-400-rgb: 206, 212, 218;--color-gray-500-rgb: 173, 181, 189;--color-gray-600-rgb: 108, 117, 125;--color-gray-700-rgb: 73, 80, 87;--color-gray-800-rgb: 52, 58, 64;--color-gray-900-rgb: 33, 37, 41;--color-info-rgb: 23, 162, 184;--color-link-visited-rgb: 102, 16, 242;--color-primary-rgb: 0, 87, 255;--color-secondary-rgb: 245, 130, 32;--color-success-rgb: 40, 167, 69;--color-tinted-rgb: 250, 250, 250;--color-warning-rgb: 255, 193, 7;--color-white-rgb: 255, 255, 255}[data-theme=dark],.theme-dark{--color-accent: #cc2952;--color-black: #000000;--color-error: #b02a37;--color-extra-1: #0062cc;--color-extra-10: #c7c7c7;--color-extra-11: #0e131f;--color-extra-12: #292929;--color-extra-13: #2c3441;--color-extra-14: #2f68c5;--color-extra-15: #4f52c1;--color-extra-16: #565b66;--color-extra-17: #661717;--color-extra-18: #7d828c;--color-extra-19: #86c2a6;--color-extra-2: #0e0e0e;--color-extra-20: #941616;--color-extra-21: #b01e1e;--color-extra-22: #b3b3b3;--color-extra-23: #b7b9bc;--color-extra-24: #bdcac4;--color-extra-25: #bebebe;--color-extra-26: #c2c3c5;--color-extra-27: #c7c8c9;--color-extra-28: #cba2a2;--color-extra-29: #cbc2c2;--color-extra-3: #151515;--color-extra-4: #444444;--color-extra-5: #525252;--color-extra-6: #6d6d6d;--color-extra-7: #a3a3a3;--color-extra-8: #b1b1b1;--color-extra-9: #c3c3c3;--color-gray-100: #c6c7c8;--color-gray-200: #babdbf;--color-gray-300: #b2b5b8;--color-gray-400: #a5aaae;--color-gray-500: #8a9197;--color-gray-600: #565e64;--color-gray-700: #3a4046;--color-gray-800: #2a2e33;--color-gray-900: #1a1e21;--color-info: #128293;--color-link-visited: #520dc2;--color-primary: #0046cc;--color-secondary: #c4681a;--color-success: #208637;--color-tinted: #c8c8c8;--color-warning: #cc9a06;--color-white: #cccccc;--color-accent-rgb: 204, 41, 82;--color-black-rgb: 0, 0, 0;--color-error-rgb: 176, 42, 55;--color-extra-1-rgb: 0, 98, 204;--color-extra-10-rgb: 199, 199, 199;--color-extra-11-rgb: 14, 19, 31;--color-extra-12-rgb: 41, 41, 41;--color-extra-13-rgb: 44, 52, 65;--color-extra-14-rgb: 47, 104, 197;--color-extra-15-rgb: 79, 82, 193;--color-extra-16-rgb: 86, 91, 102;--color-extra-17-rgb: 102, 23, 23;--color-extra-18-rgb: 125, 130, 140;--color-extra-19-rgb: 134, 194, 166;--color-extra-2-rgb: 14, 14, 14;--color-extra-20-rgb: 148, 22, 22;--color-extra-21-rgb: 176, 30, 30;--color-extra-22-rgb: 179, 179, 179;--color-extra-23-rgb: 183, 185, 188;--color-extra-24-rgb: 189, 202, 196;--color-extra-25-rgb: 190, 190, 190;--color-extra-26-rgb: 194, 195, 197;--color-extra-27-rgb: 199, 200, 201;--color-extra-28-rgb: 203, 162, 162;--color-extra-29-rgb: 203, 194, 194;--color-extra-3-rgb: 21, 21, 21;--color-extra-4-rgb: 68, 68, 68;--color-extra-5-rgb: 82, 82, 82;--color-extra-6-rgb: 109, 109, 109;--color-extra-7-rgb: 163, 163, 163;--color-extra-8-rgb: 177, 177, 177;--color-extra-9-rgb: 195, 195, 195;--color-gray-100-rgb: 198, 199, 200;--color-gray-200-rgb: 186, 189, 191;--color-gray-300-rgb: 178, 181, 184;--color-gray-400-rgb: 165, 170, 174;--color-gray-500-rgb: 138, 145, 151;--color-gray-600-rgb: 86, 94, 100;--color-gray-700-rgb: 58, 64, 70;--color-gray-800-rgb: 42, 46, 51;--color-gray-900-rgb: 26, 30, 33;--color-info-rgb: 18, 130, 147;--color-link-visited-rgb: 82, 13, 194;--color-primary-rgb: 0, 70, 204;--color-secondary-rgb: 196, 104, 26;--color-success-rgb: 32, 134, 55;--color-tinted-rgb: 200, 200, 200;--color-warning-rgb: 204, 154, 6;--color-white-rgb: 204, 204, 204}:root,[data-theme]{--shadow-color: rgba(var(--color-shadow-rgb, 0,0,0), .25)}@layer theme{:root{--font-primary: "Inter", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bg: var(--color-white);--surface: var(--color-gray-100);--surface-2: var(--color-gray-200);--border: var(--color-gray-300);--text: var(--color-gray-900);--text-muted: var(--color-gray-700);--primary: var(--color-primary);--primary-contrast: var(--color-white);--link: var(--color-primary);--bg-rgb: var(--color-white-rgb);--surface-rgb: var(--color-gray-100-rgb);--text-rgb: var(--color-gray-900-rgb);--primary-rgb: var(--color-primary-rgb)}[data-theme=dark],.theme-dark{--bg: var(--color-extra-11);--surface: var(--color-extra-12);--surface-2: var(--color-extra-13);--border: var(--color-gray-700);--text: var(--color-white);--text-muted: var(--color-gray-500);--primary: var(--color-primary);--primary-contrast: var(--color-black);--link: var(--color-primary);--bg-rgb: var(--color-extra-11-rgb);--surface-rgb: var(--color-extra-12-rgb);--text-rgb: var(--color-white-rgb);--primary-rgb: var(--color-primary-rgb)}}*,*:before,*:after{box-sizing:border-box}html,body,h1,h2,h3,h4,h5,h6,p,blockquote,pre,ul,ol,dl,figure{margin:0;padding:0;border:0}ul,ol{list-style:none}img,fieldset{border:0}a{text-decoration:none;color:inherit}button{font:inherit;color:inherit;background:none;border:none;padding:0;cursor:pointer}input,textarea,select,button{font:inherit;margin:0;padding:0;border:none;background:none;box-shadow:none;appearance:none}textarea{resize:none}h1,h2,h3,h4,h5,h6{font-weight:inherit;line-height:1.25}textarea,textarea.input{resize:vertical}@font-face{font-family:Inter;src:url(/fonts/Inter-Thin.woff2) format("woff2");font-weight:100;font-style:normal;font-display:swap}@font-face{font-family:Inter;src:url(/fonts/Inter-Light.woff2) format("woff2");font-weight:300;font-style:normal;font-display:swap}@font-face{font-family:Inter;src:url(/fonts/Inter-Regular.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Inter;src:url(/fonts/Inter-Medium.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Inter;src:url(/fonts/Inter-SemiBold.woff2) format("woff2");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:Inter;src:url(/fonts/Inter-Bold.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Cormorant Garamond;font-weight:300;font-style:normal;font-display:swap;src:url(/fonts/cormorant-garamond-v19-latin-300.woff2) format("woff2")}@font-face{font-family:Cormorant Garamond;font-weight:300;font-style:italic;font-display:swap;src:url(/fonts/cormorant-garamond-v19-latin-300italic.woff2) format("woff2")}@font-face{font-family:Cormorant Garamond;font-weight:400;font-style:normal;font-display:swap;src:url(/fonts/cormorant-garamond-v19-latin-regular.woff2) format("woff2")}@font-face{font-family:Cormorant Garamond;font-weight:400;font-style:italic;font-display:swap;src:url(/fonts/cormorant-garamond-v19-latin-italic.woff2) format("woff2")}@font-face{font-family:Cormorant Garamond;font-weight:500;font-style:normal;font-display:swap;src:url(/fonts/cormorant-garamond-v19-latin-500.woff2) format("woff2")}@font-face{font-family:Cormorant Garamond;font-weight:500;font-style:italic;font-display:swap;src:url(/fonts/cormorant-garamond-v19-latin-500italic.woff2) format("woff2")}@font-face{font-family:Cormorant Garamond;font-weight:600;font-style:normal;font-display:swap;src:url(/fonts/cormorant-garamond-v19-latin-600.woff2) format("woff2")}@font-face{font-family:Cormorant Garamond;font-weight:600;font-style:italic;font-display:swap;src:url(/fonts/cormorant-garamond-v19-latin-600italic.woff2) format("woff2")}@font-face{font-family:Cormorant Garamond;font-weight:700;font-style:normal;font-display:swap;src:url(/fonts/cormorant-garamond-v19-latin-700.woff2) format("woff2")}@font-face{font-family:Cormorant Garamond;font-weight:700;font-style:italic;font-display:swap;src:url(/fonts/cormorant-garamond-v19-latin-700italic.woff2) format("woff2")}h1,h2,h3,h4,h5,h6{font-family:Inter,sans-serif;font-weight:600;line-height:1.25;margin:0 0 1rem;color:var(--color-extra-2)}h1{font-size:2.5rem}h2{font-size:2rem}h3{font-size:1.5rem}h4{font-size:1.25rem}h5{font-size:1.125rem}h6{font-size:1rem;font-weight:500}p{margin:1rem 0}em{font-style:italic}strong{font-weight:600}a{color:var(--color-extra-1);text-decoration:none}a:hover,a:focus{text-decoration:underline}blockquote{margin:1.5rem 0;padding-left:1rem;border-left:4px solid var(--color-extra-7);font-style:italic;color:var(--color-extra-4)}code{font-family:Courier New,monospace;font-size:.95em;background:var(--color-extra-9);padding:.2em .4em;border-radius:4px}pre{font-family:Courier New,monospace;font-size:.95em;background:var(--color-extra-9);padding:1rem;overflow-x:auto;border-radius:8px}ul,ol{margin:1rem 0 1rem 1.5rem;padding:0}ul{list-style-type:disc}ol{list-style-type:decimal}hr{border:none;border-top:1px solid var(--color-extra-7);margin:2rem 0}.alt{font-family:Cormorant Garamond,serif}.light{font-weight:300}.bold{font-weight:700}.fat{font-weight:900}.small{font-size:.875rem}.central-frame{display:block;min-height:100vh;margin:auto;padding:1rem;width:100%}@media (min-width: 640px){.central-frame{max-width:100%}}@media (min-width: 768px){.central-frame{max-width:90%}}@media (min-width: 1024px){.central-frame{max-width:80%;padding:1.5rem}}@media (min-width: 1280px){.central-frame{max-width:80%;padding:2rem}}.row{display:block;margin:0 auto;width:100%}.panel{display:block;margin:0 auto;width:100%;padding:1rem}.row{display:flex;flex-direction:column;gap:1.5rem}@media (min-width: 768px){.row{flex-direction:row;align-items:flex-start}}.image-upload-container{flex-shrink:0;width:100%;max-width:300px;margin:0 auto}@media (min-width: 768px){.image-upload-container{margin:0}}.image-upload-container img{width:100%;height:auto;object-fit:cover;border-radius:8px}.author-view,.author-edit{flex:1;min-width:0}.author-header{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.5rem}.author-header h1{font-size:1.5rem;margin:0}.author-header .button{white-space:nowrap}.dashboard-frame{padding:1.5rem 1rem;padding-top:5px}@media (min-width: 1024px){.dashboard-frame{padding:2rem;padding-top:5px}}.dashboard-head{margin-bottom:1rem}.dashboard-head .section-meta{font-size:.875rem;color:var(--color-extra-6);margin-bottom:.25rem;font-weight:400}.dashboard-head .section-title{font-size:1.5rem;font-weight:600;line-height:1.2;margin:0}.author-gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:1.5rem;margin-bottom:2rem;justify-content:start}.author-card{max-width:180px;width:100%;text-align:center;display:flex;flex-direction:column;align-items:center;margin:0 auto}.author-card img{width:100%;aspect-ratio:2/3;object-fit:cover;border-radius:4px;box-shadow:0 2px 8px #0000000d;transition:transform .2s ease}.author-card img:hover{transform:scale(1.02)}.author-card .author-name{margin-top:.25rem;font-size:.875rem;font-weight:600;letter-spacing:.02em}.add-card{max-width:180px;width:100%;aspect-ratio:2/3;min-height:270px;background:var(--color-extra-10);border:2px dashed var(--color-extra-7);border-radius:4px;display:flex;align-items:center;justify-content:center}.add-card .add-author-button{color:var(--color-extra-1);font-weight:600;font-size:.95rem;text-decoration:none}.add-card .add-author-button:hover{text-decoration:underline}.auth-wrapper{min-height:calc(100vh - 72px);display:flex;align-items:center;justify-content:center;background:var(--color-extra-10);padding:1.5rem}.auth-panel{background:var(--color-white);padding:1rem 2rem 2rem;border-radius:8px;box-shadow:0 4px 16px #0000000f;width:100%;max-width:400px;text-align:center}.auth-title{font-size:1.5rem;font-weight:600;margin-bottom:.25rem;font-family:Cormorant Garamond,serif}.auth-subtitle{font-size:.875rem;color:var(--color-extra-5);margin-bottom:1.5rem}.auth-input{width:100%;padding:.5rem 1rem;margin-bottom:1rem;border:1px solid var(--color-extra-7);border-radius:4px;font-size:1rem;font-family:Inter,sans-serif;transition:border .2s ease}.auth-input:focus{border-color:var(--color-extra-1);outline:none}.auth-error{color:red;font-size:.9rem;margin-bottom:1rem}.auth-button{width:100%;padding:.5rem;font-weight:600;font-size:1rem;background-color:var(--color-extra-1);color:#fff;border:none;border-radius:4px;cursor:pointer;transition:background-color .2s ease}.auth-button:hover{background-color:color-mix(in srgb,var(--color-extra-1),black 5%)}.auth-button:disabled{opacity:.6;cursor:not-allowed}.auth-links{margin-top:1rem;font-size:.9rem}.auth-links a{color:var(--color-extra-1);margin:0 .5rem;cursor:pointer}.auth-links a:hover{text-decoration:underline}.listing-profile{display:flex;flex-direction:column;gap:1.5rem;padding:1.5rem 0;padding-top:0}@media (min-width: 768px){.listing-profile{flex-direction:row;align-items:flex-start}}.listing-image-wrapper{width:var(--book-cover-max, 350px);max-width:var(--book-cover-max, 350px);flex:0 0 auto}.listing-image{width:100%;aspect-ratio:2/3;position:relative;overflow:hidden;margin-top:8px}.listing-image img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.listing-content{flex:1;min-width:0}.listing-header{display:flex;justify-content:space-between;align-items:flex-start;flex-wrap:wrap;gap:.5rem}.listing-header .title{font-size:2rem;margin:0;line-height:1.2;font-weight:700;padding-top:.05rem}.listing-header .button{white-space:nowrap;margin-top:.1rem}.listing-description{margin-top:1rem}.listing-description p{line-height:1.6;color:var(--color-text-primary)}.listing-edit{display:flex;flex-direction:column;gap:1rem;width:100%}.listing-edit .input{width:100%}.listing-edit .button{align-self:flex-start}.error-message{color:var(--color-error);margin-top:.5rem}@media (max-width: 1024px){.author-image-wrapper{max-width:200px}.author-content{overflow:hidden}}@media (max-width: 1024px){.author-image-wrapper{max-width:200px}}@media (max-width: 767px){.author-image-wrapper{max-width:100%}}.listing-edit details{border:1px solid var(--color-extra-8);border-radius:8px;padding:1rem;background:var(--color-tinted)}.listing-edit summary{font-weight:600;cursor:pointer;margin-bottom:.5rem}.section-content{display:flex;flex-direction:column;gap:1rem}details{background:var(--color-extra-10);border-radius:8px;border:1px solid var(--color-extra-8);margin-bottom:1rem;padding:.75rem 1rem;transition:box-shadow .2s ease}details[open]{box-shadow:0 2px 6px #0000000f}details summary{font-weight:600;cursor:pointer;font-size:1rem;position:relative;padding-left:1.5rem}details summary:before{content:"\25b8";position:absolute;left:0;transform:rotate(0);transition:transform .2s}details[open] details summary:before{transform:rotate(90deg)}.input{padding:.5rem .75rem;border:1px solid var(--color-extra-7);border-radius:6px;font-size:1rem;width:100%}summary{list-style:none}summary::-webkit-details-marker{display:none}summary{position:relative;padding-left:1.5rem}summary:before{content:"\25b6";position:absolute;left:0;top:0;transform:rotate(0);transition:transform .2s ease}details[open] summary:before{transform:rotate(90deg)}.section-content image-upload{max-width:200px;display:block;margin-top:.5rem}footer{background-color:var(--color-extra-25);padding:1rem;text-align:center}.app-footer footer{background-color:var(--color-extra-25);padding:1rem;text-align:center}.head{display:flex;align-items:center;gap:12px;margin-bottom:12px}.head h1{margin:0;font-size:20px;font-weight:600}.head .count{color:var(--color-extra-16);font-size:13px}.head .search{display:inline-flex;gap:8px;align-items:center}.head .spacer{flex:1 1 auto}.loading{padding:12px;color:var(--color-extra-13)}.error{padding:12px;color:var(--color-extra-20)}.grid{width:100%;border-collapse:collapse}.grid thead th{text-align:left;font-weight:600;font-size:12px;color:var(--color-extra-16);padding:10px 12px;border-bottom:1px solid var(--color-extra-23);background:var(--color-extra-27)}.grid tbody td{padding:12px;border-top:1px solid var(--color-extra-26);vertical-align:middle}.grid .row{cursor:pointer}.grid .row:hover{background:var(--color-extra-27)}.grid .row:focus{outline:2px solid var(--color-extra-15);outline-offset:-2px}.email a{color:var(--color-extra-11);text-decoration:none}.email a:hover{text-decoration:underline}.uuid code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:12px;padding:2px 6px;background:var(--color-extra-26);border:1px solid var(--color-extra-23);border-radius:6px}button.copy{margin-left:8px;padding:2px 8px;border-radius:8px;border:1px solid var(--color-extra-23);background:var(--color-white);cursor:pointer;font-size:12px}button.copy:hover{background:var(--color-extra-27)}.empty{text-align:center;color:var(--color-extra-16)}.identity{display:flex;align-items:center;gap:12px;margin-bottom:12px}.identity h1{margin:0;font-size:20px;font-weight:600}.identity .count{color:var(--color-extra-16);font-size:13px}.identity .search{display:inline-flex;gap:8px;align-items:center}.identity .spacer{flex:1 1 auto}.identity{background:#fff;border:1px solid var(--color-extra-23);border-radius:12px;overflow:hidden}.identity{padding:12px;color:var(--color-extra-13)}.identity{padding:12px;color:var(--color-extra-20)}.identity{width:100%;border-collapse:collapse}.identity thead th{text-align:left;font-weight:600;font-size:12px;color:var(--color-extra-16);padding:10px 12px;border-bottom:1px solid var(--color-extra-23);background:var(--color-extra-27)}.identity tbody td{padding:12px;border-top:1px solid var(--color-extra-26);vertical-align:middle}.identity .row{cursor:pointer}.identity .row:hover{background:var(--color-extra-27)}.identity .row:focus{outline:2px solid var(--color-extra-15);outline-offset:-2px}.identity a{color:var(--color-extra-11);text-decoration:none}.identity a:hover{text-decoration:underline}.identity code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:12px;padding:2px 6px;background:var(--color-extra-26);border:1px solid var(--color-extra-23);border-radius:6px}.identity button.copy{margin-left:8px;padding:2px 8px;border-radius:8px;border:1px solid var(--color-extra-23);background:var(--color-white);cursor:pointer;font-size:12px}.identity button.copy:hover{background:var(--color-extra-27)}.identity{text-align:center;color:var(--color-extra-16)}.head{display:flex;align-items:center;gap:8px;margin-bottom:12px}.head .crumb{color:var(--color-extra-13);text-decoration:none}.head .crumb:hover{text-decoration:underline}.head .slash{color:var(--color-extra-18)}.loading,.error{padding:12px}.error{color:var(--color-extra-20)}.form{padding:16px 16px 8px;display:grid;gap:14px}.form .row{display:grid;grid-template-columns:120px 1fr;align-items:center;gap:12px}.form .row label{font-size:12px;color:var(--color-extra-16)}.pill{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;font-size:12px;border:1px solid var(--color-extra-23);background:var(--color-extra-26)}.pill.ok{background:var(--color-extra-24);border-color:var(--color-extra-19)}.pill.no{background:var(--color-extra-29);border-color:var(--color-extra-28)}.actions{display:flex;justify-content:flex-end;gap:8px;padding:8px 16px 16px}.membership,.license{display:flex;flex-wrap:wrap;align-items:center;gap:6px}.uid{margin-right:4px}.muted{color:var(--color-extra-16);font-size:12px}dialog.modal{border:none;border-radius:12px;padding:0;width:520px;max-width:calc(100vw - 32px);box-shadow:0 10px 30px #0000001f}dialog.modal::backdrop{background:#11182773}dialog.modal .modal-body{padding:16px;display:grid;gap:14px}dialog.modal .modal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}dialog.modal .modal-head h3{margin:0;font-size:16px;font-weight:600}dialog.modal .modal-head .icon-btn{border:none;background:transparent;font-size:18px;line-height:1;cursor:pointer;padding:4px}dialog.modal .row{display:grid;grid-template-columns:120px 1fr;align-items:center;gap:12px}dialog.modal .row label{font-size:12px;color:var(--color-extra-16)}dialog.modal .row .text-input{width:100%;padding:8px 10px;border:1px solid var(--color-extra-23);border-radius:8px;font-size:14px}dialog.modal .hint{color:var(--color-extra-20);font-size:12px;margin-top:-4px}dialog.modal .actions{display:flex;justify-content:flex-end;gap:8px;padding-top:4px}dialog.modal .warn{border:1px solid var(--color-extra-28);background:var(--color-extra-29);color:var(--color-extra-17);padding:12px;border-radius:8px;font-size:14px}.role-list{display:flex;gap:6px;flex-wrap:wrap}.roles-actions{display:flex;align-items:center;gap:8px;margin-top:8px}button.pill.role-pill{cursor:pointer;transition:transform .05s ease,box-shadow .1s ease}button.pill.role-pill:hover{transform:translateY(-1px)}button.pill.role-pill:active{transform:translateY(0)}.role-list .role-pill[aria-pressed=true]{background:var(--color-extra-24);border-color:var(--color-extra-19)}.role-list .role-pill[aria-pressed=false]{background:var(--color-extra-29);border-color:var(--color-extra-28)}button.pill.role-pill:focus-visible{outline:2px solid var(--color-extra-14);outline-offset:2px}.identity{display:flex;align-items:center;gap:8px;margin-bottom:12px}.identity .crumb{color:var(--color-extra-13);text-decoration:none}.identity .crumb:hover{text-decoration:underline}.identity .slash{color:var(--color-extra-18)}.identity{background:#fff;border:1px solid var(--color-extra-23);border-radius:12px}.identity{padding:12px}.identity{color:var(--color-extra-20)}.identity{padding:16px 16px 8px;display:grid;gap:14px}.identity .row{display:grid;grid-template-columns:120px 1fr;align-items:center;gap:12px}.identity .row label{font-size:12px;color:var(--color-extra-16)}.identity{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;font-size:12px;border:1px solid var(--color-extra-23);background:var(--color-extra-26)}.identity.ok{background:var(--color-extra-24);border-color:var(--color-extra-19)}.identity.no{background:var(--color-extra-29);border-color:var(--color-extra-28)}.identity{display:flex;justify-content:flex-end;gap:8px;padding:8px 16px 16px}.identity{display:flex;flex-wrap:wrap;align-items:center;gap:6px}.identity{margin-right:4px}.identity{color:var(--color-extra-16);font-size:12px}.identity dialog.modal{border:none;border-radius:12px;padding:0;width:520px;max-width:calc(100vw - 32px);box-shadow:0 10px 30px #0000001f}.identity dialog.modal::backdrop{background:#11182773}.identity dialog.modal .modal-body{padding:16px;display:grid;gap:14px}.identity dialog.modal .modal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}.identity dialog.modal .modal-head h3{margin:0;font-size:16px;font-weight:600}.identity dialog.modal .modal-head .icon-btn{border:none;background:transparent;font-size:18px;line-height:1;cursor:pointer;padding:4px}.identity dialog.modal .row{display:grid;grid-template-columns:120px 1fr;align-items:center;gap:12px}.identity dialog.modal .row label{font-size:12px;color:var(--color-extra-16)}.identity dialog.modal .row .text-input{width:100%;padding:8px 10px;border:1px solid var(--color-extra-23);border-radius:8px;font-size:14px}.identity dialog.modal .hint{color:var(--color-extra-20);font-size:12px;margin-top:-4px}.identity dialog.modal .actions{display:flex;justify-content:flex-end;gap:8px;padding-top:4px}.identity dialog.modal .warn{border:1px solid var(--color-extra-28);background:var(--color-extra-29);color:var(--color-extra-17);padding:12px;border-radius:8px;font-size:14px}.identity{display:flex;gap:6px;flex-wrap:wrap}.identity .identity{display:flex;align-items:center;gap:8px;margin-top:8px}.identity button.pill.role-pill{cursor:pointer;transition:transform .05s ease,box-shadow .1s ease}.identity button.pill.role-pill:hover{transform:translateY(-1px)}.identity button.pill.role-pill:active{transform:translateY(0)}.identity .role-list .role-pill[aria-pressed=true]{background:var(--color-extra-24);border-color:var(--color-extra-19)}.identity .role-pill[aria-pressed=false]{background:var(--color-extra-29);border-color:var(--color-extra-28)}.identity button.pill.role-pill:focus-visible{outline:2px solid var(--color-extra-14);outline-offset:2px}.navbar{display:flex;justify-content:space-between;align-items:center;padding:1rem 2rem;background-color:var(--color-white);border-bottom:1px solid var(--color-extra-22);font-family:Inter,sans-serif;font-size:1rem}.navbar a{color:var(--color-extra-12);text-decoration:none;margin-left:1.5rem;font-weight:500;transition:color .2s ease}.navbar a:hover,.navbar a:focus{color:var(--color-extra-1)}.navbar .navbar__brand{display:flex;align-items:center}.navbar .navbar__brand a{margin-left:0}.navbar .navbar__brand img{width:40px;height:40px;object-fit:contain;display:block}.navbar .navbar__links{display:flex;align-items:center}.app-nav{display:flex;justify-content:space-between;align-items:center;padding:1rem 2rem;background-color:var(--color-white);border-bottom:1px solid var(--color-extra-22);font-family:Inter,sans-serif;font-size:1rem}.app-nav a{color:var(--color-extra-12);text-decoration:none;margin-left:1.5rem;font-weight:500;transition:color .2s ease}.app-nav a:hover,.app-nav a:focus{color:var(--color-extra-1)}.app-nav .navbar__brand{display:flex;align-items:center}.app-nav .navbar__brand a{margin-left:0}.app-nav .navbar__brand img{width:40px;height:40px;object-fit:contain;display:block}.app-nav .navbar__links{display:flex;align-items:center}.table{width:100%;border-collapse:collapse}.table th,.table td{padding:10px 8px;border-bottom:1px solid var(--color-extra-26)}.row{cursor:pointer}.row:hover{background:var(--color-extra-27)}.nowrap{white-space:nowrap}.pager{display:flex;align-items:center;gap:8px;margin-top:12px}.limit{display:inline-flex;align-items:center;gap:6px}.limit select{border:1px solid var(--color-extra-23);border-radius:8px;padding:6px 8px}.role input[type=search]{border:1px solid var(--color-extra-23);border-radius:8px;padding:8px 10px;width:320px;max-width:100%}.role{width:100%;border-collapse:collapse}.role th,.role td{padding:10px 8px;border-bottom:1px solid var(--color-extra-26)}.role{cursor:pointer}.role:hover{background:var(--color-extra-27)}.role{white-space:nowrap}.role{display:flex;align-items:center;gap:8px;margin-top:12px}.role{display:inline-flex;align-items:center;gap:6px}.role select{border:1px solid var(--color-extra-23);border-radius:8px;padding:6px 8px}.bar{display:flex;gap:8px;margin-bottom:12px;align-items:center}.grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.grid input,.grid textarea{border:1px solid var(--color-extra-23);border-radius:8px;padding:8px 10px;width:100%;font-family:inherit}.grid .span2{grid-column:1/-1}.actions{display:flex;gap:8px;margin-top:12px}.hint{margin-top:4px;opacity:.7;font-size:.9rem}.alert{color:var(--color-extra-20);margin-bottom:8px}.loading{opacity:.8}.spacer{flex:1 1 auto}.muted{opacity:.7}.role{border:1px solid var(--color-extra-23);border-radius:12px;padding:16px;background:var(--color-white)}.role{display:flex;gap:8px;margin-bottom:12px;align-items:center}.role{display:grid;grid-template-columns:1fr 1fr;gap:12px}.role input,.role textarea{border:1px solid var(--color-extra-23);border-radius:8px;padding:8px 10px;width:100%;font-family:inherit}.role .span2{grid-column:1/-1}.role{display:flex;gap:8px;margin-top:12px}.role{margin-top:4px;opacity:.7;font-size:.9rem}.role{color:var(--color-extra-20);margin-bottom:8px}.role{opacity:.8}.role{border:1px solid var(--color-extra-23);border-radius:8px;padding:8px 12px;cursor:pointer;background:#fff}.role.primary{background:var(--color-extra-11);color:#fff;border-color:var(--color-extra-11)}.role.danger{background:var(--color-extra-21);color:#fff;border-color:var(--color-extra-21)}.role.ghost{background:#fff}.role{flex:1 1 auto}.role{opacity:.7}.toolbar{display:flex;gap:8px;margin-left:16px;margin-right:16px;margin-bottom:12px;padding-top:5px;align-items:center}.toolbar input[type=search]{border:1px solid var(--color-extra-23);border-radius:8px;padding:8px 10px;width:320px;max-width:100%}@keyframes button-loading-stripes{0%{background-position:0 0}to{background-position:200% 0}}.button{--btn-bg: var(--primary);--btn-fg: var(--primary-contrast);--btn-border: var(--primary);display:inline-flex;align-items:center;justify-content:center;gap:.25rem;padding:.5rem 1rem;margin:0;vertical-align:middle;font-family:inherit;font-size:1rem;font-weight:600;line-height:1;background:var(--btn-bg);color:var(--btn-fg);border:1px solid var(--btn-border);border-radius:8px;cursor:pointer;transition:background-color .15s ease,color .15s ease,border-color .15s ease,box-shadow .15s ease;position:relative;overflow:hidden}.button .button__content{position:relative;z-index:2}.button:hover:not(:disabled):not(.button--disabled){background:color-mix(in srgb,var(--btn-bg),black 8%);border-color:color-mix(in srgb,var(--btn-border),black 8%)}.button:active:not(:disabled):not(.button--disabled){background:color-mix(in srgb,var(--btn-bg),black 16%);border-color:color-mix(in srgb,var(--btn-border),black 16%);transform:translateY(0)}.button:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.button--disabled,.button:disabled,.button[aria-disabled=true]{background:var(--surface-2);color:var(--text-muted);border-color:var(--border);cursor:not-allowed;opacity:.7}.button--sm{padding:.25rem .5rem;font-size:.875rem}.button--lg{padding:1rem 1.5rem;font-size:1.25rem}.button--icon{padding:.25rem;width:2.5rem;height:2.5rem}.button--icon .button__label{display:none}.button.button--loading:before{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:1;background-image:repeating-linear-gradient(45deg,color-mix(in srgb,var(--btn-bg),white 14%) 0 4px,color-mix(in srgb,var(--btn-bg),white 8%) 4px 8px,color-mix(in srgb,var(--btn-bg),white 14%) 8px 12px,color-mix(in srgb,var(--btn-bg),white 8%) 12px 16px);background-size:200% 100%;animation:button-loading-stripes 4s linear infinite;opacity:.9}.button--primary{--btn-bg: var(--primary);--btn-border: var(--primary);--btn-fg: var(--primary-contrast)}.button--secondary{--btn-bg: var(--secondary, var(--color-secondary, var(--accent)));--btn-border: var(--secondary, var(--color-secondary, var(--accent)));--btn-fg: var(--primary-contrast)}.button--success{--btn-bg: var(--color-success);--btn-border: var(--color-success);--btn-fg: var(--color-white)}.button--info{--btn-bg: var(--color-info);--btn-border: var(--color-info);--btn-fg: var(--color-white)}.button--warning{--btn-bg: var(--color-warning);--btn-border: var(--color-warning);--btn-fg: var(--color-black)}.button--danger,.button--error{--btn-bg: var(--color-error);--btn-border: var(--color-error);--btn-fg: var(--color-white)}.button--outline{--btn-bg: transparent;--btn-fg: var(--primary);--btn-border: var(--primary);background:transparent;color:var(--btn-fg)}.button--outline:hover:not(:disabled):not(.button--disabled){background:rgba(var(--primary-rgb),.08);border-color:color-mix(in srgb,var(--primary),black 8%)}.button--outline:active:not(:disabled):not(.button--disabled){background:rgba(var(--primary-rgb),.14);border-color:color-mix(in srgb,var(--primary),black 16%)}.button--ghost{--btn-bg: rgba(var(--text-rgb), .06);--btn-fg: var(--text);--btn-border: var(--border)}.button--ghost:hover:not(:disabled):not(.button--disabled){--btn-bg: rgba(var(--text-rgb), .1)}.switch{position:relative;display:inline-block;width:48px;height:28px}.switch .switch__input{opacity:0;width:0;height:0}.switch .switch__slider{position:absolute;cursor:pointer;inset:0;background-color:var(--color-gray-400);transition:background-color .25s ease;border-radius:16px}.switch .switch__slider:before{content:"";position:absolute;height:20px;width:20px;left:4px;bottom:4px;background-color:var(--color-white);transition:transform .25s ease;border-radius:50%;box-shadow:0 1px 2px #00000026}.switch .switch__input:checked+.switch__slider{background-color:var(--color-primary)}.switch .switch__input:checked+.switch__slider:before{transform:translate(20px)}.switch .switch__input:disabled+.switch__slider{background-color:var(--color-gray-200);cursor:not-allowed}.switch .switch__input:disabled+.switch__slider:before{background-color:var(--color-gray-400)}.form-control-toggle{display:flex;align-items:center;gap:.5rem}.form-control-toggle .switch-label{font-size:1rem;color:var(--color-text-primary);-webkit-user-select:none;user-select:none}.dropzone{position:relative;display:block;width:100%;min-height:180px;border-radius:8px;border:1px dashed var(--border);background:var(--surface);color:var(--text);cursor:pointer;overflow:hidden;transition:border-color .15s ease,box-shadow .15s ease,background .15s ease}.dropzone.is-dragging{border-color:var(--primary);box-shadow:0 0 0 3px rgba(var(--primary-rgb),.15)}.dropzone:hover{border-color:var(--primary)}.dropzone__img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.dropzone__overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;text-align:center;padding:1rem;pointer-events:none;background:#00000059;color:var(--color-white);opacity:0;transition:opacity .15s ease}.dropzone:hover .dropzone__overlay,.dropzone.is-dragging .dropzone__overlay{opacity:1}.dropzone__label{font-size:1rem;line-height:1.4}.dropzone__hint{opacity:.95}.upload-progress{position:absolute;left:0;right:0;bottom:0;height:8px;background:rgba(var(--primary-rgb),.15)}.upload-progress__bar{height:100%;background:var(--primary);transition:width .15s ease}.cover-2-3{position:relative;display:block;width:var(--book-cover-max, 200px);aspect-ratio:2/3}.cover-2-3 image-upload,.cover-2-3 .dropzone{height:100%;width:100%}.combo-box{position:relative;width:100%;box-sizing:border-box}.combo-box input{width:100%}.combo-box .combo-dropdown{position:absolute;top:100%;left:0;right:0;z-index:1000;width:100%;box-sizing:border-box;margin-top:.25rem;background:var(--surface);border:1px solid var(--border);border-radius:4px;box-shadow:0 4px 8px #0000000d;padding:0;margin:0;list-style:none}.combo-box .combo-dropdown .combo-option{padding:.5rem 1rem;cursor:pointer;transition:background .2s ease;font-size:1rem;color:var(--text)}.combo-box .combo-dropdown .combo-option:hover{background:var(--surface-2)}.combo-box .combo-dropdown .combo-option.disabled{color:var(--text-muted);cursor:default;font-style:italic}.input{width:100%;padding:.5rem 1rem;font-family:inherit;font-size:1rem;border:1px solid var(--border);border-radius:4px;background-color:var(--surface);color:var(--text);transition:border-color .2s ease,box-shadow .2s ease}.input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px rgba(var(--primary-rgb),.2)}.input::placeholder{color:var(--text-muted);opacity:1}.input--error{border-color:var(--color-error)}.input--error:focus{box-shadow:0 0 0 3px rgba(var(--color-error-rgb, 220, 53, 69),.2)}.input--sm{padding:.25rem .5rem;font-size:.875rem}.input--disabled,.input:disabled{background-color:var(--surface-2);color:var(--text-muted);cursor:not-allowed}textarea.input{min-height:6rem;resize:vertical}html,body{background:var(--bg);color:var(--text);font-family:var(--font-primary)}a{color:var(--link)}a:hover{text-decoration:underline}hr{border:0;border-top:1px solid var(--border)}input,select,textarea{background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:.5rem}input::placeholder,textarea::placeholder{color:var(--text-muted)}input:focus,select:focus,textarea:focus{outline:2px solid var(--primary);outline-offset:1px}.card,.block,.container{background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:1rem;padding:16px}.block{border:0;border-radius:0}.tag,.badge,.pill{background:rgba(var(--text-rgb),.06);color:var(--text);border:1px solid var(--border);border-radius:.5rem}nav,.app-nav{background:var(--surface);border-bottom:1px solid var(--border)}footer,.app-footer{background:var(--surface-2);color:var(--text-muted);border-top:1px solid var(--border)}table{width:100%;border-collapse:collapse}thead th{color:var(--text-muted);background:var(--surface-2);border-bottom:1px solid var(--border)}tbody td{border-bottom:1px solid var(--border)}tbody tr:hover{background:rgba(var(--text-rgb),.04)}.quicknote{background:#eee;border:1px solid #eee;padding:12px;border-radius:4px;font-size:.8em;margin-top:5px}.margin-top{margin-top:10px}
