@import"https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700&family=JetBrains+Mono:wght@500&display=swap";:root{--bg: #F7F6F3;--surface: #FFFFFF;--border: #E4E1DB;--border-focus: #A3B8FF;--text-primary: #111111;--text-secondary: #6B6B6B;--text-muted: #A0A0A0;--green: #15803D;--green-light: #F0FDF4;--green-border: #86EFAC;--amber: #B45309;--amber-light: #FFFBEB;--amber-border: #FCD34D;--blue: #1D4ED8;--blue-light: #EFF6FF;--blue-border: #BFDBFE;--red: #DC2626;--red-light: #FEF2F2;--red-border: #FECACA;--gray: #9CA3AF;--gray-light: #F9FAFB;--radius-xs: 6px;--radius-sm: 10px;--radius-md: 16px;--radius-lg: 20px;--shadow-sm: 0 1px 3px rgba(0,0,0,.06);--shadow-md: 0 4px 16px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,.04);--shadow-lg: 0 8px 32px rgba(0,0,0,.1), 0 2px 8px rgba(0,0,0,.06)}*{box-sizing:border-box;margin:0;padding:0}body{font-family:Outfit,-apple-system,sans-serif;background:var(--bg);color:var(--text-primary);min-height:100vh;-webkit-font-smoothing:antialiased}.app{max-width:480px;margin:0 auto;padding:2rem 1.25rem 4rem}.header{text-align:center;margin-bottom:1.75rem}.header h1{font-size:1.7rem;font-weight:700;letter-spacing:-.025em;color:var(--text-primary)}.header .subtitle{margin-top:.45rem;color:var(--text-secondary);font-size:.875rem;line-height:1.55}.spinner{display:flex;align-items:center;justify-content:center;min-height:100vh;color:var(--text-muted);font-size:.9rem;letter-spacing:.01em}.machines{display:flex;flex-direction:column;gap:.65rem;margin-bottom:1rem}.machine-card{background:var(--surface);border-radius:var(--radius-md);padding:1rem 1.125rem;box-shadow:var(--shadow-sm);display:flex;align-items:center;justify-content:space-between;gap:.75rem;border:1.5px solid var(--border);border-left-width:4px;transition:box-shadow .15s ease,border-color .15s ease,background .15s ease}.machine-card.available{border-left-color:var(--green);cursor:pointer}.machine-card.available:hover{box-shadow:var(--shadow-md)}.machine-card.available.selected{background:var(--blue-light);border-color:var(--blue-border);border-left-color:var(--blue);box-shadow:var(--shadow-md)}.machine-card.busy{border-left-color:var(--amber);opacity:.85;cursor:default}.machine-card.offline{border-left-color:var(--gray);background:var(--gray-light);opacity:.75}.machine-info{flex:1;min-width:0}.machine-name{font-weight:600;font-size:.975rem;color:var(--text-primary)}.machine-status{font-size:.8rem;color:var(--text-secondary);margin-top:.2rem;line-height:1.45}.badge{flex-shrink:0;padding:.275rem .75rem;border-radius:999px;font-size:.74rem;font-weight:600;letter-spacing:.02em;text-align:center;border:1.5px solid transparent}.badge.available{background:var(--green-light);color:var(--green);border-color:var(--green-border)}.badge.selected{background:var(--blue-light);color:var(--blue);border-color:var(--blue-border)}.badge.busy{background:var(--amber-light);color:var(--amber);border-color:var(--amber-border)}.badge.offline{background:var(--gray-light);color:var(--gray);border-color:var(--border)}.btn-retry{margin-top:.5rem;background:none;border:1px solid var(--border);border-radius:8px;padding:.28rem .7rem;font-size:.76rem;font-family:inherit;cursor:pointer;color:var(--text-secondary);transition:background .1s}.btn-retry:hover{background:#f3f4f6}.all-busy{background:var(--surface);border:1.5px solid var(--border);border-radius:var(--radius-md);padding:1.2rem 1.25rem;text-align:center;color:var(--text-secondary);font-size:.875rem;line-height:1.6;margin-bottom:1rem}.all-busy.error-notice{background:var(--red-light);border-color:var(--red-border);color:var(--red)}.error-card{background:var(--surface);border-radius:var(--radius-md);border:1.5px solid var(--border);padding:2rem 1.5rem;text-align:center;color:var(--text-secondary);font-size:.9rem;margin-top:2rem;line-height:1.6}.code-section{background:var(--surface);border-radius:var(--radius-lg);padding:1.5rem 1.25rem 1.25rem;box-shadow:var(--shadow-md);border:1.5px solid var(--border)}.code-section h2{font-size:.95rem;font-weight:600;color:var(--text-secondary);margin-bottom:.875rem;line-height:1.45}.code-input{display:block;width:100%;font-family:JetBrains Mono,Courier New,monospace;font-size:2rem;font-weight:500;letter-spacing:.14em;text-align:center;padding:.7rem 1rem;border:2px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);color:var(--text-primary);outline:none;transition:border-color .15s;margin-bottom:.875rem}.code-input:focus{border-color:var(--border-focus)}.code-input::placeholder{color:var(--text-muted);letter-spacing:.1em}.code-input:disabled{opacity:.45}.error-msg{color:var(--red);font-size:.82rem;margin-bottom:.75rem;line-height:1.45;text-align:center}.btn{display:block;width:100%;padding:.875rem 1rem;border:none;border-radius:var(--radius-sm);font-family:inherit;font-size:.95rem;font-weight:600;cursor:pointer;transition:opacity .15s,transform .1s;line-height:1.4;text-align:center}.btn:active:not(:disabled){transform:scale(.98)}.btn:disabled{opacity:.4;cursor:not-allowed}.btn-primary{background:var(--text-primary);color:#fff}.btn-primary:hover:not(:disabled){opacity:.82}.session-view{background:var(--surface);border-radius:var(--radius-lg);padding:2.5rem 1.5rem 2rem;text-align:center;box-shadow:var(--shadow-md);border:1.5px solid var(--border);margin-top:.5rem}.session-check{font-size:2.75rem;line-height:1;margin-bottom:1rem;animation:pop-in .35s cubic-bezier(.34,1.56,.64,1) both}@keyframes pop-in{0%{transform:scale(.5);opacity:0}to{transform:scale(1);opacity:1}}.session-view h2{font-size:1.25rem;font-weight:700;letter-spacing:-.01em;line-height:1.4;margin-bottom:.35rem}.session-machine{font-size:.875rem;color:var(--text-secondary);margin-bottom:1.5rem}.session-timer{font-size:3rem;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.02em;color:var(--text-primary);transition:color .3s}.session-timer.urgent{color:var(--red)}.countdown-label{font-size:.8rem;color:var(--text-muted);margin-top:.35rem;line-height:1.5}.pulse-ring{display:inline-block;width:12px;height:12px;border-radius:50%;background:var(--green);margin-bottom:1.25rem;animation:pulse 1.8s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1;transform:scale(1);box-shadow:0 0 #15803d66}50%{opacity:.8;transform:scale(1.15);box-shadow:0 0 0 8px #15803d00}}
