:root{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,sans-serif;line-height:1.5;font-weight:400;color-scheme:light;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{font-weight:500;color:#2563eb;text-decoration:inherit}a:hover{color:#1d4ed8}body{margin:0;min-width:320px;min-height:100vh}h1{font-size:2rem;line-height:1.2}button{border-radius:6px;border:1px solid transparent;font-size:1em;font-weight:500;font-family:inherit;cursor:pointer;transition:border-color .25s}button:focus,button:focus-visible{outline:2px solid #2563eb;outline-offset:2px}.sequence-diagram{position:relative;min-height:500px;padding:40px 20px;background:#f8f9fa;border-radius:8px;margin:20px 0;overflow:visible}.participants{display:flex;justify-content:space-around;position:relative;z-index:0;height:1300px}.participant{display:flex;flex-direction:column;align-items:center;width:200px}.participant-box{background:linear-gradient(135deg,#2563eb,#1d4ed8);color:#fff;padding:12px 24px;border-radius:8px;font-weight:600;box-shadow:0 4px 6px #0000001a;min-width:120px;text-align:center;position:relative;z-index:10}.participant.client .participant-box{background:#2563eb}.participant.server .participant-box{background:#ef4444}.lifeline{width:2px;height:600px;background:#ddd;margin-top:10px;position:relative}.messages{position:absolute;top:100px;left:0;right:0;width:100%}.message{position:absolute;width:100%;height:120px;display:flex;align-items:center;justify-content:center;transition:opacity .5s ease-in-out}.message.hidden{opacity:0}.message.visible{opacity:1;animation:slideIn .5s ease-out}@keyframes slideIn{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}.arrow{position:relative;width:43%;height:2px;top:15px}.arrow.right{margin-left:-2%}.arrow.left{margin-right:-2%}.arrow-line{position:absolute;top:0;width:100%;height:2px;background:#2563eb}.arrow.right .arrow-line{left:0}.arrow.left .arrow-line{right:0}.arrow-head{position:absolute;top:-4px;width:0;height:0;border-style:solid}.arrow.right .arrow-head{right:-8px;border-width:5px 0 5px 10px;border-color:transparent transparent transparent #2563eb}.arrow.left .arrow-head{left:-8px;border-width:5px 10px 5px 0;border-color:transparent #2563eb transparent transparent}.message-label{position:absolute;top:-20px;background:#fff;padding:8px 12px;border-radius:6px;box-shadow:0 2px 8px #0000001a;border:1px solid #e0e0e0;min-width:200px;z-index:5}.step-badge{display:inline-block;background:linear-gradient(135deg,#2563eb,#1d4ed8);color:#fff;padding:2px 8px;border-radius:10px;font-size:11px;font-weight:700;margin-bottom:6px;margin-right:6px}.message-type{font-weight:600;color:#2563eb;margin-bottom:4px;font-size:14px;display:inline}.message-data{font-size:12px;color:#666;font-family:Courier New,monospace;word-break:break-all}.step-marker{position:absolute;width:100%;height:80px;display:flex;align-items:center;justify-content:center;transition:opacity .5s ease-in-out}.step-marker.hidden{opacity:0}.step-marker.visible{opacity:1;animation:slideIn .5s ease-out}.marker-container{width:100%;display:flex;justify-content:center;align-items:center}.marker-badge{background:#f8f9fa;padding:8px 16px;border-radius:6px;border:2px dashed #2563eb;text-align:center}.marker-title{font-size:13px;color:#666;margin-top:4px;font-weight:500}.step-badge-link{text-decoration:none;display:inline-block}.step-badge-link:hover .step-badge{transform:scale(1.05);box-shadow:0 2px 8px #667eea66;transition:all .2s ease}.marker-badge-link{text-decoration:none;display:block;transition:transform .2s ease}.marker-badge-link:hover{transform:scale(1.02)}.marker-badge-link:hover .marker-badge{background:#e8ebff;border-color:#5566d6}.marker-badge-link:hover .marker-title{color:#2563eb}.step-badge{cursor:pointer;transition:all .2s ease}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--nav-width: 260px;--toc-width: 280px;--header-height: 56px;--color-primary: #2563eb;--color-primary-dark: #1d4ed8;--color-primary-light: #eff6ff;--color-accent: #f59e0b;--color-danger: #ef4444;--color-danger-dark: #dc2626;--color-text: #1e293b;--color-text-muted: #64748b;--color-border: #e2e8f0;--color-bg: #f8fafc;--color-surface: #ffffff;--color-nav-bg: #0f172a;--color-nav-text: #94a3b8;--color-nav-text-active: #f1f5f9;--color-nav-hover: #1e293b;--color-nav-active-bar: #2563eb;--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", sans-serif;--font-mono: "Courier New", "Fira Code", monospace;--radius: 6px;--shadow-sm: 0 1px 3px rgba(0,0,0,.08);--shadow-md: 0 4px 12px rgba(0,0,0,.1)}html,body{height:100%;font-family:var(--font-sans);background:var(--color-bg);color:var(--color-text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#root{height:100%}.topnav{position:fixed;top:0;left:0;right:0;height:var(--header-height);background:var(--color-nav-bg);border-bottom:1px solid #1e293b;display:flex;align-items:center;padding:0 20px;z-index:200;gap:16px}.topnav-brand{display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--color-nav-text-active);font-weight:700;font-size:15px;white-space:nowrap}.topnav-brand-logo{width:30px;height:30px;background:var(--color-primary);border-radius:6px;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:800;color:#fff;flex-shrink:0}.topnav-sep{width:1px;height:28px;background:#334155;flex-shrink:0}.topnav-breadcrumb{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--color-nav-text);flex:1;overflow:hidden}.topnav-breadcrumb span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.topnav-breadcrumb a{color:var(--color-nav-text);text-decoration:none}.topnav-breadcrumb a:hover{color:var(--color-nav-text-active)}.topnav-breadcrumb .sep{color:#475569}.topnav-breadcrumb .current{color:var(--color-nav-text-active);font-weight:500}.topnav-actions{display:flex;align-items:center;gap:8px;margin-left:auto;flex-shrink:0}.app{display:flex;padding-top:var(--header-height);min-height:100vh}.left-sidebar{position:fixed;top:var(--header-height);left:0;bottom:0;width:var(--nav-width);background:var(--color-nav-bg);overflow-y:auto;border-right:1px solid #1e293b;z-index:100;padding:24px 0 40px}.left-sidebar::-webkit-scrollbar{width:4px}.left-sidebar::-webkit-scrollbar-track{background:transparent}.left-sidebar::-webkit-scrollbar-thumb{background:#334155;border-radius:2px}.nav-section{margin-bottom:8px}.nav-section-title{font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#475569;padding:12px 20px 6px}.nav-item{display:block;padding:7px 20px;font-size:13px;color:var(--color-nav-text);text-decoration:none;border-left:3px solid transparent;cursor:pointer;transition:background .15s,color .15s,border-color .15s;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background:none;border-right:none;border-top:none;border-bottom:none;width:100%;text-align:left;font-family:var(--font-sans)}.nav-item:hover{background:var(--color-nav-hover);color:var(--color-nav-text-active)}.nav-item.active{color:var(--color-nav-text-active);background:#2563eb26;border-left-color:var(--color-nav-active-bar);font-weight:600}.nav-item .nav-item-badge{display:inline-block;background:#1e3a5f;color:#60a5fa;font-size:10px;font-weight:700;padding:1px 6px;border-radius:10px;margin-left:6px;font-family:var(--font-mono)}.nav-divider{height:1px;background:#1e293b;margin:12px 0}.nav-item-sub{padding-left:36px}.main-wrapper{flex:1;margin-left:var(--nav-width);display:flex;min-width:0}.content-area{flex:1;min-width:0;padding:40px 40px 80px;max-width:860px}.page-header{margin-bottom:32px;padding-bottom:24px;border-bottom:1px solid var(--color-border)}.page-header-eyebrow{font-size:12px;font-weight:600;color:var(--color-primary);text-transform:uppercase;letter-spacing:.06em;margin-bottom:8px}.page-header h1{font-size:2rem;font-weight:700;color:var(--color-text);line-height:1.2;margin-bottom:12px}.page-header-lead{font-size:15px;color:var(--color-text-muted);line-height:1.7}.page-header-lead a{color:var(--color-primary);text-decoration:none;font-weight:500}.page-header-lead a:hover{text-decoration:underline}.setup-container{display:flex;flex-direction:column;gap:24px}.setup-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);padding:32px;box-shadow:var(--shadow-sm)}.setup-card h2{font-size:1.2rem;font-weight:600;color:var(--color-text);margin-bottom:4px}.setup-card>.card-desc{font-size:14px;color:var(--color-text-muted);margin-bottom:24px;line-height:1.6}.input-group{display:flex;flex-direction:column;gap:0}.field{display:flex;flex-direction:column;gap:5px;margin-bottom:16px}.field label{font-size:13px;font-weight:600;color:var(--color-text)}.field input{padding:8px 12px;border:1px solid var(--color-border);border-radius:var(--radius);font-size:14px;color:var(--color-text);background:var(--color-surface);transition:border-color .2s,box-shadow .2s;font-family:var(--font-sans)}.field input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px #2563eb1a}.field input.input-error{border-color:var(--color-danger)}.error-message{font-size:12px;color:var(--color-danger);font-weight:500;line-height:1.4;margin-top:4px;margin-bottom:8px}.input-error{border-color:var(--color-danger)!important}.input-with-prefix{display:flex;align-items:center;border:1px solid var(--color-border);border-radius:var(--radius);overflow:hidden;transition:border-color .2s,box-shadow .2s;background:var(--color-surface)}.input-with-prefix:focus-within{border-color:var(--color-primary);box-shadow:0 0 0 3px #2563eb1a}.input-prefix{background:#f1f5f9;padding:8px 10px;font-family:var(--font-mono);font-weight:600;font-size:13px;color:var(--color-primary);border-right:1px solid var(--color-border);-webkit-user-select:none;user-select:none}.input-with-prefix input{border:none!important;box-shadow:none!important;padding:8px 12px;flex:1;background:transparent;font-size:14px;color:var(--color-text);font-family:var(--font-sans)}.input-with-prefix input:focus{outline:none}.input-group label{display:block;font-weight:600;color:var(--color-text);font-size:13px;margin-bottom:5px;margin-top:14px}.input-group input{width:100%;padding:8px 12px;border:1px solid var(--color-border);border-radius:var(--radius);font-size:14px;transition:border-color .2s;color:var(--color-text)}.input-group input:focus{outline:none;border-color:var(--color-primary)}.randomness-toggle{margin:12px 0 16px;padding:12px 14px;background:#f8fafc;border:1px solid var(--color-border);border-radius:var(--radius)}.randomness-toggle label{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:13px;font-weight:500!important;color:var(--color-text);margin:0!important}.randomness-toggle input[type=checkbox]{width:15px!important;height:15px;accent-color:var(--color-primary);cursor:pointer}.info-box{margin-top:24px;padding:18px 20px;background:var(--color-primary-light);border-radius:var(--radius);border-left:4px solid var(--color-primary)}.info-box h3{color:var(--color-primary-dark);font-size:14px;font-weight:700;margin-bottom:8px}.info-box p{color:#1e40af;line-height:1.6;font-size:13.5px;margin-bottom:6px}.btn{display:inline-flex;align-items:center;gap:6px;padding:8px 18px;border:1px solid transparent;border-radius:var(--radius);font-size:13.5px;font-weight:600;cursor:pointer;transition:background .2s,box-shadow .2s;font-family:var(--font-sans);white-space:nowrap;margin:0}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--color-primary);color:#fff;border-color:var(--color-primary-dark)}.btn-primary:hover:not(:disabled){background:var(--color-primary-dark)}.btn-secondary{background:var(--color-surface);color:var(--color-primary);border-color:var(--color-primary)}.btn-secondary:hover:not(:disabled){background:var(--color-primary-light)}.btn-danger{background:var(--color-danger);color:#fff;border-color:var(--color-danger-dark)}.btn-danger:hover:not(:disabled){background:var(--color-danger-dark)}.btn-sm{padding:5px 12px;font-size:12.5px}.btn-full{width:100%;justify-content:center;padding:10px 18px}.controls-top{position:sticky;top:var(--header-height);background:var(--color-surface);border-bottom:1px solid var(--color-border);z-index:90;padding:12px 32px;display:flex;justify-content:space-between;align-items:flex-end;gap:16px;flex-wrap:wrap}.input-group-inline{display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap;flex:1}.input-item{display:flex;flex-direction:column;gap:3px}.input-item label{font-size:11px;font-weight:600;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.04em}.input-item input{padding:6px 10px;border:1px solid var(--color-border);border-radius:var(--radius);font-size:13px;color:var(--color-text);background:var(--color-surface);transition:border-color .2s;min-width:140px}.input-item input:focus{outline:none;border-color:var(--color-primary)}.input-item input[type=number]{min-width:90px}.input-with-prefix-inline{display:flex;align-items:center;border:1px solid var(--color-border);border-radius:var(--radius);overflow:hidden;transition:border-color .2s}.input-with-prefix-inline:focus-within{border-color:var(--color-primary)}.input-with-prefix-inline .input-prefix{background:#f1f5f9;padding:6px 8px;font-family:var(--font-mono);font-weight:600;font-size:11px;color:var(--color-primary);border-right:1px solid var(--color-border);-webkit-user-select:none;user-select:none}.input-with-prefix-inline input{border:none!important;padding:6px 10px;flex:1;font-size:13px;min-width:120px;background:transparent}.input-with-prefix-inline input:focus{outline:none}.error-message-inline{color:var(--color-danger);font-size:11px;font-weight:500;max-width:240px}.randomness-toggle-inline{display:flex;align-items:center}.randomness-toggle-inline label{display:flex;align-items:center;gap:6px;cursor:pointer;font-size:12px;white-space:nowrap;color:var(--color-text)}.randomness-toggle-inline input[type=checkbox]{width:auto;cursor:pointer;accent-color:var(--color-primary)}.controls-buttons{display:flex;gap:8px;align-items:flex-end;flex-shrink:0}.input-group-inline .btn{font-size:13px;padding:6px 14px}.protocol-container-split{background:var(--color-surface);border-radius:var(--radius);border:1px solid var(--color-border);box-shadow:var(--shadow-sm);display:flex;flex-direction:column;margin-bottom:40px}.main-content{display:flex;gap:0;min-height:500px}.steps-container{flex:1;min-width:0}.diagram-sidebar{width:420px;flex-shrink:0;border-left:1px solid var(--color-border);background:#f8fafc}.diagram-sticky{position:sticky;top:calc(var(--header-height) + 60px);padding:24px 20px;height:calc(100vh - var(--header-height) - 80px);overflow-y:auto}.diagram-sticky h3{font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-muted);margin-bottom:16px}@media(max-width:1200px){.main-content{flex-direction:column}.diagram-sidebar{width:100%;border-left:none;border-top:1px solid var(--color-border)}.diagram-sticky{position:relative;height:auto}}.step-section{padding:32px;border-bottom:1px solid var(--color-border);scroll-margin-top:calc(var(--header-height) + 60px)}.step-section:last-child{border-bottom:none}.step-header{margin-bottom:16px;display:flex;align-items:center;gap:12px}.step-number{display:inline-flex;align-items:center;justify-content:center;background:var(--color-primary);color:#fff;border-radius:50%;width:28px;height:28px;font-size:12px;font-weight:700;flex-shrink:0}.step-header h2{color:var(--color-text);font-size:1.15rem;font-weight:600}.description{color:var(--color-text-muted);line-height:1.8;margin-bottom:20px;font-size:14.5px}.description code{background:#eff6ff;padding:1px 5px;border-radius:3px;font-family:var(--font-mono);color:var(--color-primary);font-size:13px}.description strong{color:var(--color-text);font-weight:600}.step-content{margin-top:20px}.states{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px}@media(max-width:900px){.states{grid-template-columns:1fr}}.state-box{padding:14px;border-radius:var(--radius);border:1px solid var(--color-border)}.client-state{border-color:#bfdbfe;background:#eff6ff}.server-state{border-color:#fecaca;background:#fff5f5}.state-box h3{font-size:11px;font-weight:700;margin-bottom:8px;color:var(--color-text);text-transform:uppercase;letter-spacing:.05em}.state-box pre{font-family:var(--font-mono);font-size:12px;color:var(--color-text);white-space:pre-wrap;word-break:break-all;line-height:1.6}.computation-box{padding:18px 20px;background:#f8fafc;border-radius:var(--radius);border:1px solid var(--color-border);border-left:4px solid var(--color-primary)}.computation-box h3{color:var(--color-primary-dark);margin-bottom:10px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em}.computation-box pre{font-family:var(--font-mono);font-size:12px;color:var(--color-text);line-height:1.7;white-space:pre-wrap;word-break:break-all}@media(max-width:1024px){:root{--nav-width: 220px}.content-area{padding:24px 24px 60px}.controls-top{padding:10px 24px;flex-direction:column;align-items:flex-start}.step-section{padding:24px}}@media(max-width:768px){.left-sidebar{display:none}.main-wrapper{margin-left:0}.right-sidebar{display:none}.content-area{padding:20px 16px 60px}.diagram-sidebar{display:none}}
