*,*:before,*:after{box-sizing:border-box}*{margin:0}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,sans-serif;line-height:1.5;color:#1e293b;background:#f8fafc}img,picture,video,canvas,svg{display:block;max-width:100%}input,button,textarea,select{font:inherit}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}#root{min-height:100vh}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:#f1f5f9}::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#94a3b8}::selection{background:#3b82f6;color:#fff}:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes slideDown{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@keyframes scaleIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@media print{body{background:#fff}.no-print{display:none!important}}.input-group{display:flex;flex-direction:column;gap:.5rem}.input-label{font-weight:600;color:#374151;font-size:.875rem}.input{padding:.75rem 1rem;border:2px solid #e5e7eb;border-radius:8px;font-size:1rem;transition:all .2s ease;font-family:inherit}.input:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.input-error{border-color:#ef4444}.input-error:focus{border-color:#ef4444;box-shadow:0 0 0 3px #ef44441a}.input-error-text{color:#ef4444;font-size:.875rem}.textarea{min-height:100px;resize:vertical}.btn{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:.5rem;font-weight:600;border:none;border-radius:8px;cursor:pointer;transition:all .2s ease;font-family:inherit}.btn:disabled{opacity:.6;cursor:not-allowed}.btn-small{padding:.5rem 1rem;font-size:.875rem}.btn-medium{padding:.75rem 1.5rem;font-size:1rem}.btn-large{padding:1rem 2rem;font-size:1.125rem}.btn-primary{background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff}.btn-primary:hover:not(:disabled){background:linear-gradient(135deg,#2563eb,#1d4ed8);transform:translateY(-1px);box-shadow:0 4px 12px #2563eb4d}.btn-secondary{background:#f1f5f9;color:#475569;border:1px solid #e2e8f0}.btn-secondary:hover:not(:disabled){background:#e2e8f0}.btn-danger{background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff}.btn-danger:hover:not(:disabled){background:linear-gradient(135deg,#dc2626,#b91c1c);transform:translateY(-1px);box-shadow:0 4px 12px #dc26264d}.btn-success{background:linear-gradient(135deg,#22c55e,#16a34a);color:#fff}.btn-success:hover:not(:disabled){background:linear-gradient(135deg,#16a34a,#15803d);transform:translateY(-1px);box-shadow:0 4px 12px #16a34a4d}.btn-content{display:inline-flex;align-items:center;justify-content:center}.btn-loading .btn-content{visibility:hidden}.btn-spinner-overlay{position:absolute;inset:0;display:inline-flex;align-items:center;justify-content:center;pointer-events:none}.btn-spinner{width:1em;height:1em;border:2px solid transparent;border-top-color:currentColor;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.join-session-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#1e3a5f,#0f172a);padding:1rem}.join-card{background:#fff;border-radius:24px;padding:3rem;width:100%;max-width:420px;box-shadow:0 20px 60px #0000004d}.logo-section{text-align:center;margin-bottom:2.5rem}.game-logo{max-width:100%;height:auto;max-height:120px}.join-form{display:flex;flex-direction:column;gap:1.25rem}.error-message{background:#fef2f2;color:#dc2626;padding:.75rem 1rem;border-radius:8px;font-size:.875rem;text-align:center}.instructor-link{margin-top:2rem;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:.25rem;font-size:.875rem;color:#64748b}.instructor-link a{color:#3b82f6;text-decoration:none;font-weight:500}.instructor-link a:hover{text-decoration:underline}.instructor-link-separator{color:#94a3b8;margin:0 .125rem}.patient-chip{border-radius:50%;border-width:4px;border-style:solid;display:flex;align-items:center;justify-content:center;cursor:grab;position:relative;background:#fff;box-shadow:0 2px 8px #00000026;transition:box-shadow .2s ease}.patient-chip:hover{box-shadow:0 4px 12px #0003}.patient-chip-movable{box-shadow:0 0 0 3px #3b82f640,0 2px 8px #00000026}.patient-chip.dragging{cursor:grabbing;box-shadow:0 8px 24px #0000004d}.patient-chip-small{width:36px;height:36px;border-width:3px}.patient-chip-medium{width:48px;height:48px}.patient-chip-large{width:60px;height:60px;border-width:5px}.patient-chip-inner{width:100%;height:100%;border-radius:50%;display:flex;align-items:center;justify-content:center;position:relative}.patient-type{font-weight:800;font-size:1.25rem}.patient-chip-small .patient-type{font-size:.875rem}.patient-chip-large .patient-type{font-size:1.5rem}.waiting-badge{position:absolute;top:-8px;right:-8px;background:#1e293b;color:#fff;font-size:.625rem;padding:2px 4px;border-radius:8px;font-weight:600}.dice-indicator{position:absolute;right:-48px;top:50%;transform:translateY(-50%);width:42px;height:42px}.d20-svg{width:100%;height:100%;filter:drop-shadow(0 2px 6px rgba(0,0,0,.4))}.dice-number{transition:none;-webkit-user-select:none;user-select:none}.dice-number.rolling{animation:pulse-dice .15s infinite}@keyframes pulse-dice{0%,to{opacity:1}50%{opacity:.7}}.dice-indicator.rolling .d20-svg{animation:shake-dice .08s infinite}@keyframes shake-dice{0%,to{transform:rotate(0) scale(1)}25%{transform:rotate(8deg) scale(1.05)}75%{transform:rotate(-8deg) scale(1.05)}}.dice-indicator:not(.rolling) .d20-svg polygon{transition:fill .3s ease}.dice-indicator:not(.rolling) .d20-svg{animation:dice-settle .3s ease-out}@keyframes dice-settle{0%{transform:scale(1.1)}50%{transform:scale(.95)}to{transform:scale(1)}}.room-card{background:#fff;border-radius:12px;border:3px solid;overflow:hidden;min-width:0;width:100%;height:100%;box-shadow:0 2px 8px #0000001a;transition:all .2s ease}.room-card.greyed-out{opacity:.5;filter:grayscale(.5)}.room-card.highlighted{box-shadow:0 0 0 4px #3b82f64d,0 4px 12px #00000026}.room-header{padding:.5rem .75rem;color:#fff;font-weight:600;font-size:.875rem;display:flex;justify-content:center;align-items:center}.room-name{width:100%;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.room-cost{font-size:.75rem;opacity:.9}.room-body{padding:.75rem}.room-label{font-size:.625rem;color:#64748b;text-transform:uppercase;letter-spacing:.05em;margin-bottom:.5rem}.room-slots{display:flex;gap:.5rem;justify-content:center;margin-bottom:.75rem}.room-slot{width:40px;height:40px;border:2px solid #e2e8f0;border-radius:50%;display:flex;align-items:center;justify-content:center;position:relative;transition:all .2s ease;cursor:pointer}.room-slot:hover:not(.occupied){border-color:#94a3b8;background:#f8fafc}.room-slot.slot-highlighted{border-color:#3b82f6;background:#3b82f61a;animation:pulse-highlight 1s infinite}@keyframes pulse-highlight{0%,to{box-shadow:0 0 #3b82f666}50%{box-shadow:0 0 0 8px #3b82f600}}.slot-number{font-weight:700;color:#94a3b8;font-size:.875rem}.slot-patient{position:absolute;inset:-4px;display:flex;align-items:center;justify-content:center}.room-footer{display:flex;justify-content:space-between;align-items:center}.emergency-label{font-weight:800;font-size:.625rem;letter-spacing:.05em}.room-capability-dots{display:flex;gap:4px}.capability-dot{width:8px;height:8px;border-radius:50%;border:1px solid rgba(15,23,42,.15)}.room-inventory-card{background:#fff;border-radius:8px;border:2px solid;overflow:hidden;cursor:pointer;box-shadow:0 2px 4px #0000001a;position:relative}.inventory-header{padding:.375rem .5rem;color:#fff;font-weight:600;font-size:.75rem;text-align:center}.inventory-header span{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.inventory-body{padding:.5rem;text-align:center}.inventory-slots{display:flex;gap:4px;justify-content:center;margin-bottom:.5rem}.inventory-slot{width:24px;height:24px;border:1px solid #e2e8f0;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.625rem;font-weight:600;color:#94a3b8}.inventory-cost{font-size:.75rem;font-weight:600;color:#475569}.inventory-count{position:absolute;top:-8px;right:-8px;background:#1e293b;color:#fff;width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.75rem;font-weight:700}.empty-room-slot{background:#f8fafc;border:2px dashed #cbd5e1;border-radius:12px;height:100%;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease}.empty-room-slot:hover{border-color:#94a3b8;background:#f1f5f9}.empty-room-slot.highlighted{border-color:#3b82f6;border-style:solid;background:#3b82f60d}.slot-label{color:#94a3b8;font-size:.875rem}.waiting-queue{display:flex;flex-direction:column;flex:1;min-height:0}.queue-header{display:flex;justify-content:space-between;align-items:center;padding:.875rem 1rem;background:linear-gradient(135deg,#22c55e,#16a34a);flex-shrink:0}.queue-title{font-size:.75rem;font-weight:700;color:#fff;text-transform:uppercase;letter-spacing:.06em}.queue-count{font-size:.75rem;font-weight:700;color:#14532d;background:#ffffff59;padding:.15rem .5rem;border-radius:999px}.queue-slots{display:flex;flex-direction:column;gap:.4rem;flex:1;overflow-y:auto;padding:.75rem;background:#f0fdf4}.queue-slot{width:100%;min-height:52px;border-radius:8px;display:flex;align-items:center;justify-content:center;position:relative;padding:.4rem;padding-right:55px}.queue-slot.risk-event{border-color:#ef4444;background:#ef44440d}.queue-slot.filled{background:#fff;border:1.5px solid #e2e8f0;box-shadow:0 1px 4px #0000000f}.queue-slot.selected{border-color:#3b82f6;background:#3b82f60f;box-shadow:0 0 0 3px #3b82f626}.queue-slot.empty{border:1.5px dashed #f1f5f9;background:transparent}.slot-number{color:#e2e8f0;font-weight:600;font-size:.8rem}.event-indicator{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);padding:.5rem .75rem;border-radius:6px;font-size:.75rem;font-weight:700;white-space:nowrap;z-index:20;box-shadow:0 4px 12px #0000004d;text-transform:uppercase;letter-spacing:.5px}.event-indicator.cardiac{background:linear-gradient(135deg,#dc2626,#b91c1c);color:#fff;animation:cardiac-pulse .6s ease-in-out infinite}.event-indicator.lwbs{background:linear-gradient(135deg,#f59e0b,#d97706);color:#fff;animation:lwbs-slide .4s ease-out}@keyframes cardiac-pulse{0%,to{transform:translate(-50%,-50%) scale(1);box-shadow:0 4px 12px #dc262666}50%{transform:translate(-50%,-50%) scale(1.05);box-shadow:0 6px 20px #dc262699}}@keyframes lwbs-slide{0%{opacity:0;transform:translate(-50%,-30%)}to{opacity:1;transform:translate(-50%,-50%)}}.queue-full-warning{margin:0 .75rem .75rem;background:#fef2f2;color:#dc2626;padding:.5rem .75rem;border-radius:6px;font-size:.75rem;text-align:center;font-weight:600;flex-shrink:0}.patient-arrival{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;padding:2rem;border-radius:16px;box-shadow:0 20px 60px #0003;z-index:100}.arrival-header{font-size:1.5rem;font-weight:700;color:#1e293b;margin-bottom:1.5rem;text-align:center}.arrival-patients{display:flex;gap:1rem;justify-content:center}.patient-treated-bubble{position:absolute;top:-30px;left:50%;transform:translate(-50%);background:#22c55e;color:#fff;padding:.25rem .75rem;border-radius:12px;font-size:.75rem;font-weight:600;white-space:nowrap;z-index:10}.turn-summary-card{background:#fff;border-radius:12px;padding:.875rem;box-shadow:0 4px 6px -1px #0000001a;border:1px solid #f3f4f6;margin-top:.5rem;display:flex;flex-direction:column;gap:.625rem}.turn-summary-card h3{margin:0;font-size:.9rem;color:#1f2937;border-bottom:1px solid #e5e7eb;padding-bottom:.375rem}.section-group{display:flex;flex-direction:column;gap:.375rem}.static-group{border-bottom:1px dashed #e5e7eb;padding-bottom:.5rem}.row{display:flex;gap:1.25rem}.sub-section{flex:1;display:flex;flex-direction:column;gap:.25rem}.sub-section.full-width{flex:none;width:100%}.sub-section h4{margin:0;font-size:.7rem;font-weight:600;color:#6b7280;text-transform:uppercase;letter-spacing:.03em}.chips-row{display:flex;flex-wrap:wrap;gap:.375rem;min-height:28px;align-items:center}.compact-chip{position:relative;width:28px;height:28px}.compact-chip .patient-chip{width:28px;height:28px;font-size:.75rem;border-width:2px}.compact-chip .patient-type{font-weight:600}.tiny-badge{position:absolute;bottom:-6px;left:50%;transform:translate(-50%);background:#ef4444;color:#fff;font-size:.55rem;padding:1px 4px;border-radius:3px;font-weight:700;line-height:1.2}.val-bubble{position:absolute;top:-24px;left:50%;transform:translate(-50%);padding:2px 6px;border-radius:10px;font-size:.65rem;font-weight:800;color:#fff;white-space:nowrap;z-index:100}.val-bubble.cost{background:#ef4444}.val-bubble.revenue{background:#10b981}.none{font-size:.75rem;color:#d1d5db;font-style:italic}.compact-chip.active .patient-chip{box-shadow:0 0 10px #3b82f666;transform:scale(1.2)}.compact-chip.active.risk .patient-chip{box-shadow:0 0 12px #ef444480}.results-container{display:flex;flex-direction:column;gap:.375rem}.modal-overlay{position:fixed;inset:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:1000;padding:1rem}.modal-content{background:#fff;border-radius:16px;padding:2rem;max-width:500px;width:100%;max-height:90vh;overflow-y:auto;box-shadow:0 20px 40px #0003}.modal-title{margin:0 0 1.5rem;font-size:1.5rem;color:#1e293b}.modal-danger .modal-title{color:#dc2626}.modal-warning .modal-title{color:#f59e0b}.modal-actions{display:flex;gap:1rem;margin-top:1.5rem;justify-content:flex-end}.game-board{min-height:100vh;background:linear-gradient(135deg,#f0f9ff,#e0f2fe);padding:1rem;position:relative}.game-board-loading{display:flex;align-items:center;justify-content:center;min-height:100vh;font-size:1.25rem;color:#64748b}.nudge-popup{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:#dc2626;color:#fff;padding:2rem 3rem;border-radius:16px;font-size:1.5rem;font-weight:700;z-index:1000;box-shadow:0 20px 60px #dc262666;cursor:pointer}.game-header{background:linear-gradient(135deg,#1e293b,#334155);color:#fff;padding:.75rem 2rem;border-radius:12px;margin-bottom:1.5rem;display:flex;justify-content:space-between;align-items:center;box-shadow:0 4px 12px #00000026;position:sticky;top:1rem;z-index:100;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.header-info{display:flex;align-items:center;gap:1.5rem}.header-identity{display:flex;flex-direction:column;gap:.15rem}.player-name-display{font-size:1rem;font-weight:700}.session-name-display{font-size:.8rem;color:#94a3b8}.header-divider{width:1px;height:2rem;background:#fff3}.hour-display{font-size:1.25rem;font-weight:700}.phase-display{font-size:.9rem;padding:.35rem .75rem;background:#ffffff1a;border-radius:6px;color:#94a3b8}.header-stats{display:flex;gap:2rem}.header-stat{display:flex;flex-direction:column;align-items:flex-end;gap:.1rem}.header-stat .stat-label{font-size:.7rem;color:#94a3b8;text-transform:uppercase;letter-spacing:.05em;font-weight:600}.header-stat .stat-value{font-size:1.25rem;font-weight:700}.header-stat.revenue .stat-value{color:#4ade80}.header-stat.cost .stat-value{color:#f87171}.header-stat.profit.positive .stat-value{color:#4ade80}.header-stat.profit.negative .stat-value{color:#f87171}.header-stat.players-ready{border-left:1px solid #334155;padding-left:2rem}.header-stat.players-ready .stat-value{color:#fbbf24}.header-stat.players-ready.last-player .stat-value{animation:blink-ready .8s ease-in-out infinite;color:#f87171}@keyframes blink-ready{0%,to{opacity:1}50%{opacity:.3}}.board-layout{display:grid;grid-template-columns:200px 1fr 280px;gap:1.5rem}@media(max-width:1200px){.board-layout{grid-template-columns:1fr}}.waiting-area{background:#fff;border-radius:16px;box-shadow:0 2px 12px #00000014,0 0 0 2px #22c55e;display:flex;flex-direction:column;overflow:hidden}.room-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-auto-rows:170px;gap:1rem;background:#fff;border-radius:16px;padding:1.5rem;box-shadow:0 2px 12px #00000014}.room-grid-cell{position:relative;height:170px;width:100%}.remove-room-btn{position:absolute;top:-8px;right:-8px;background:#ef4444;color:#fff;border:none;padding:4px 8px;border-radius:4px;font-size:.625rem;cursor:pointer;opacity:0;transition:opacity .2s ease}.room-grid-cell:hover .remove-room-btn{opacity:1}.room-inventory{background:#fff;border-radius:16px;padding:1.5rem;box-shadow:0 2px 12px #00000014;display:flex;flex-direction:column;gap:1.5rem}.room-inventory h3{margin:0;font-size:1.125rem;color:#1e293b}.inventory-grid{display:flex;flex-direction:column;gap:.75rem}.staffing-summary{padding:1rem;background:#f8fafc;border-radius:8px}.summary-row{display:flex;justify-content:space-between;margin-bottom:.5rem;font-size:.875rem}.cost-value{font-weight:700;color:#dc2626}.over-budget{color:#dc2626;font-weight:700}.budget-bar{height:8px;background:#e2e8f0;border-radius:4px;overflow:hidden;margin-top:.5rem}.budget-fill{height:100%;background:linear-gradient(90deg,#22c55e,#16a34a);border-radius:4px;transition:width .3s ease}.demand-info{padding:1rem;background:#f0f9ff;border-radius:8px}.demand-info h4{margin:0 0 .75rem;font-size:.875rem;color:#1e293b}.demand-row{display:flex;justify-content:space-between;font-size:.875rem;margin-bottom:.25rem}.demand-type{font-weight:600}.demand-type.type-a{color:#dc2626}.demand-type.type-b{color:#eab308}.demand-type.type-c{color:#2563eb}.staffing-footer{display:flex;flex-direction:column;gap:.75rem}.staffing-waiting-message{text-align:center;padding:.6rem 1rem;background:#f0fdf4;border:1px solid #86efac;border-radius:8px;color:#166534;font-size:.875rem;font-weight:500}.budget-info{display:flex;flex-direction:column;gap:.35rem;font-size:.875rem;color:#1e293b}.budget-line{display:flex;justify-content:space-between;gap:.5rem}.sequencing-controls{background:#fff;border-radius:16px;padding:1.5rem;box-shadow:0 2px 12px #00000014;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:.75rem}.sequencing-warning{background:#fef3c7;border:1px solid #f59e0b;color:#92400e;padding:.75rem 1rem;border-radius:8px;font-size:.875rem;text-align:center;max-width:280px}.waiting-message-container{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:50;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.waiting-message{background:#fff;padding:2.5rem;border-radius:16px;text-align:center;box-shadow:0 20px 60px #0003;max-width:400px;width:90%;animation:popIn .3s cubic-bezier(.175,.885,.32,1.275)}.waiting-message h3{margin:0 0 1rem;color:#1e293b;font-size:1.5rem}.waiting-message p{margin:0;color:#64748b;line-height:1.5}.waiting-message.paused-message{border:3px solid #f97316}.waiting-message.paused-message h3{color:#ea580c}@keyframes popIn{0%{opacity:0;transform:scale(.9) translateY(20px)}to{opacity:1;transform:scale(1) translateY(0)}}.player-game{min-height:100vh;background:#f0f9ff}.player-header{background:linear-gradient(135deg,#1e293b,#334155);color:#fff;padding:.75rem 1.5rem;display:flex;justify-content:space-between;align-items:center}.player-info{display:flex;align-items:center;gap:1rem}.player-name{font-weight:700;font-size:1.125rem}.session-code{font-size:.875rem;opacity:.8}.player-game-loading{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem;background:#f0f9ff}.loading-spinner{width:48px;height:48px;border:4px solid #e2e8f0;border-top-color:#3b82f6;border-radius:50%}.player-game-error{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem;background:#f0f9ff;text-align:center}.player-game-error h2{color:#dc2626;margin:0}.player-game-error button{padding:.75rem 1.5rem;background:#3b82f6;color:#fff;border:none;border-radius:8px;cursor:pointer;font-weight:600}.waiting-screen{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#1e3a5f,#0f172a);padding:1rem}.waiting-card{background:#fff;border-radius:24px;padding:3rem;text-align:center;max-width:480px;box-shadow:0 20px 60px #0000004d}.waiting-card .game-title{font-size:2.5rem;font-weight:900;color:#dc2626;margin:0 0 1rem}.waiting-card h2{margin:0 0 .5rem;color:#1e293b}.waiting-card p{color:#64748b;margin:0 0 1.5rem}.session-info{background:#f1f5f9;padding:1rem;border-radius:8px;margin-bottom:1.5rem}.session-info strong{font-family:monospace;font-size:1.25rem;letter-spacing:.1em}.loading-dots{font-size:2rem;color:#64748b}.loading-dots span{margin:0 2px}.loading-screen{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#f0f9ff,#e0f2fe);font-size:1.25rem;color:#64748b}
