.app-shell{grid-template-columns:280px minmax(0,1fr);min-height:100vh;display:grid}.sidebar{color:#f8fff9;background:#1f2f2a;border-right:1px solid #2d443d;flex-direction:column;gap:22px;padding:26px 20px;display:flex}.brand h1{margin:8px 0 0;font-size:1.28rem}.chip{letter-spacing:.07em;text-transform:uppercase;color:#9ad2c3;font-family:IBM Plex Mono,ui-monospace,monospace;font-size:.74rem;display:inline-block}.menu{flex-direction:column;gap:10px;display:flex}.menu-link{color:#e8f7f1;background:0 0;border-radius:10px;padding:10px 12px;text-decoration:none;transition:transform .16s,background .16s}.menu-link:hover{background:#29453d;transform:translate(3px)}.menu-link.active{background:#2b5c4f;font-weight:700}.ghost-button{color:#e8f7f1;cursor:pointer;background:0 0;border:1px solid #53796f;border-radius:10px;margin-top:auto;padding:10px 12px}.content-shell{gap:18px;padding:26px;display:grid}.timezone-toolbar{border:1px solid var(--line);white-space:nowrap;background:#fffc;border-radius:14px;flex-wrap:nowrap;justify-content:flex-start;justify-self:start;align-items:center;gap:8px;width:fit-content;max-width:100%;height:38px;min-height:38px;max-height:38px;padding:0 10px;display:inline-flex;overflow:auto hidden}.timezone-toolbar p{white-space:nowrap;text-overflow:ellipsis;max-width:300px;margin:0;overflow:hidden}.timezone-toggle{border:1px solid var(--line);background:#fff;border-radius:999px;flex:none;display:inline-flex;overflow:hidden}.timezone-toggle button{font:inherit;cursor:pointer;background:0 0;border:0;padding:4px 10px;font-size:.88rem;line-height:1}.timezone-toggle button.active{color:#fff;background:#2b5c4f}.panel{background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:18px;padding:20px}.panel-header h2{margin:0;font-size:1.45rem}.panel-header p{color:var(--muted);margin:6px 0 0}.grid-form{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:18px;display:grid}.grid-form label{color:var(--muted);gap:6px;font-size:.9rem;display:grid}.grid-form input,.device-form input,.login-card input{border:1px solid var(--line);font:inherit;background:#fff;border-radius:10px;padding:10px}.form-actions{grid-column:1/-1}.primary-button{background:linear-gradient(140deg, var(--brand), var(--brand-strong));color:#fff;font:inherit;cursor:pointer;border:none;border-radius:12px;padding:11px 14px;font-weight:700}.primary-button:disabled{opacity:.6;cursor:default}.device-form{flex-wrap:wrap;gap:10px;margin:16px 0;display:flex}.device-form input{flex:220px}.table-wrap{margin-top:12px;overflow-x:auto}table{border-collapse:collapse;width:100%;min-width:720px}th,td{border-bottom:1px solid var(--line);text-align:left;vertical-align:top;padding:10px}th{color:var(--muted);text-transform:uppercase;letter-spacing:.06em;font-size:.82rem}.row-actions{gap:8px;display:flex}.row-actions button{border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:8px;padding:6px 8px}.row-actions .danger{color:#8f3b1f;border-color:#d8a18f}.gallery-dropzone{color:#2b5c4f;white-space:nowrap;-webkit-user-select:none;user-select:none;background:#eefaf4;border:1px dashed #87bda8;border-radius:8px;padding:6px 10px;font-size:.82rem;position:relative}.gallery-dropzone-badge{color:#fff;text-align:center;background:#2b5c4f;border-radius:999px;min-width:24px;margin-left:8px;padding:1px 7px;font-size:.74rem;font-weight:700;display:inline-block}.gallery-dropzone.is-dragover{color:#1f4339;background:#dff6ea;border-color:#2b5c4f}.gallery-cell{z-index:1;width:84px;position:relative;overflow:visible}.gallery-cell:hover,.gallery-cell:focus-within{z-index:120}.gallery-thumb{object-fit:cover;border:1px solid var(--line);border-radius:6px;width:72px;height:48px;display:block}.gallery-hover-preview{border:1px solid var(--line);width:420px;box-shadow:var(--shadow);opacity:0;pointer-events:none;z-index:999;background:#fff;border-radius:10px;padding:8px;transition:opacity .14s,transform .14s;position:absolute;top:-12px;left:86px;transform:translateY(4px)}.gallery-hover-image{object-fit:contain;border-radius:6px;width:100%;max-height:320px;display:block}.gallery-cell:hover .gallery-hover-preview,.gallery-cell:focus-within .gallery-hover-preview{opacity:1;transform:translateY(0)}@media (width<=900px){.gallery-hover-preview{width:300px;left:72px}.gallery-hover-image{max-height:240px}}.status-pill{border-radius:999px;padding:3px 10px;font-size:.8rem;font-weight:700}.status-pill.ok{color:var(--ok);background:#dff6ea}.status-pill.pending{color:var(--pending);background:#fff1d9}.status-pill.warn{color:var(--warn);background:#fce6df}.token-card{background:#eefaf4;border:1px dashed #87bda8;border-radius:12px;gap:6px;margin:8px 0;padding:10px;display:grid}code{word-break:break-all;font-family:IBM Plex Mono,ui-monospace,monospace;font-size:.82rem}.inline-message{color:#5a3525;margin:8px 0}.muted{color:var(--muted)}.tiny{font-size:.82rem}.login-shell{place-items:center;min-height:100vh;padding:24px;display:grid}.login-card{border:1px solid var(--line);background:var(--panel);width:min(460px,100%);box-shadow:var(--shadow);border-radius:20px;padding:24px}.login-card h2{margin:6px 0}.eyebrow{text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin:0;font-size:.74rem}.stack{gap:10px;margin-top:14px;display:grid}.error-text{color:#9b3b20;margin:0}.support-list{color:var(--muted);margin:18px 0 0}.support-info-panel{border:1px solid var(--line);background:#fcfffd;border-radius:14px;margin-top:18px;padding:14px}.support-info-panel h3{margin:0 0 10px;font-size:1rem}.support-info-grid{gap:10px;display:grid}.support-info-grid article{border:1px solid var(--line);background:#fff;border-radius:10px;padding:10px}.support-info-grid h4{margin:0 0 6px;font-size:.92rem}.support-info-grid p{color:var(--muted);margin:0}.modal-backdrop{z-index:100;background:#00000073;place-items:center;display:grid;position:fixed;inset:0}.modal-box{background:#fff;border-radius:18px;flex-direction:column;align-items:center;gap:14px;width:min(360px,90vw);padding:24px;display:flex;box-shadow:0 24px 60px #00000038}.modal-header{justify-content:space-between;align-items:center;width:100%;display:flex}.modal-header h3{margin:0;font-size:1rem}.modal-close{cursor:pointer;color:var(--muted);background:0 0;border:none;border-radius:6px;padding:4px 8px;font-size:1.1rem}.modal-close:hover{background:var(--line)}.modal-url{word-break:break-all;color:var(--muted);text-align:center;margin:0;font-family:IBM Plex Mono,ui-monospace,monospace;font-size:.72rem}.modal-actions{gap:10px;width:100%;display:flex}.modal-actions button{border:1px solid var(--line);cursor:pointer;font:inherit;background:#fff;border-radius:10px;flex:1;padding:10px}.modal-actions .primary-button{border:none}@media (width<=820px){.app-shell{grid-template-columns:1fr}.timezone-toolbar{justify-self:stretch;width:100%}.timezone-toolbar p{max-width:220px}}@media (width<=920px){.app-shell{grid-template-columns:1fr}.sidebar{z-index:20;gap:12px;position:sticky;top:0}.menu{flex-direction:row;overflow-x:auto}.menu-link{white-space:nowrap}.grid-form{grid-template-columns:1fr}}:root{--bg:#f2efe8;--panel:#fffdf9;--ink:#201a13;--muted:#6e6256;--line:#d8cfbf;--brand:#1f9d7a;--brand-strong:#0f7f61;--warn:#b95f35;--ok:#207a56;--pending:#7f6224;--shadow:0 18px 40px #35220c1f;color:var(--ink);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Space Grotesk,Avenir Next,Segoe UI,sans-serif;font-weight:400;line-height:1.45}*{box-sizing:border-box}body{background:radial-gradient(circle at 5% 10%, #e4f3ed 0%, transparent 40%), radial-gradient(circle at 95% 90%, #f4e8d9 0%, transparent 42%), var(--bg);min-height:100vh;margin:0}#root{min-height:100vh}
