.viz-container&#123;max-width:1100px;margin:0 auto&#125; .viz-header&#123;text-align:center;margin-bottom:40px&#125; .viz-header h1&#123;font-size:2.5rem;font-weight:800;margin-bottom:12px;background:linear-gradient(90deg,#22d3ee,#a78bfa);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text&#125; .subtitle&#123;color:#94a3b8;font-size:1.15rem;line-height:1.6;max-width:700px;margin:0 auto&#125; .overview-section&#123;margin-bottom:40px&#125; .overview-card&#123;background:rgba(0,0,0,.2);border:1px solid rgba(255,255,255,.1);border-radius:14px;padding:28px;color:#cbd5e1;line-height:1.8;font-size:.95rem&#125; .overview-card strong&#123;color:#e2e8f0&#125; .interactive-section&#123;margin-bottom:48px;background:rgba(0,0,0,.15);border:1px solid rgba(255,255,255,.08);border-radius:14px;padding:32px&#125; .interactive-section h2&#123;font-size:1.5rem;font-weight:700;color:#fff;margin-bottom:8px&#125; .section-desc&#123;color:#94a3b8;line-height:1.6;margin-bottom:24px;font-size:.95rem&#125; .section-desc code&#123;background:rgba(255,255,255,.1);padding:2px 6px;border-radius:4px;font-size:.85rem;color:#e2e8f0&#125; .color-header&#123;color:#fb7185&#125; .color-payload&#123;color:#a78bfa&#125; .color-signature&#123;color:#22d3ee&#125; .structure-diagram&#123;display:flex;align-items:stretch;gap:0;margin-bottom:28px;flex-wrap:wrap;justify-content:center&#125; .structure-part&#123;flex:1;min-width:200px;background:rgba(0,0,0,.3);border-radius:12px;padding:20px;text-align:center&#125; .structure-dot&#123;display:flex;align-items:center;font-size:2rem;font-weight:800;color:#64748b;padding:0 8px&#125; .part-label&#123;font-weight:700;font-size:1rem;margin-bottom:8px&#125; .part-color-bar&#123;height:4px;border-radius:2px;margin-bottom:12px&#125; .header-part .part-label&#123;color:#fb7185&#125; .header-part .part-color-bar&#123;background:#fb7185&#125; .payload-part .part-label&#123;color:#a78bfa&#125; .payload-part .part-color-bar&#123;background:#a78bfa&#125; .signature-part .part-label&#123;color:#22d3ee&#125; .signature-part .part-color-bar&#123;background:#22d3ee&#125; .part-content&#123;margin-bottom:12px&#125; .part-content code&#123;font-size:.75rem;color:#94a3b8;word-break:break-all;background:rgba(0,0,0,.3);padding:6px 10px;border-radius:6px;display:block&#125; .part-desc&#123;font-size:.82rem;color:#64748b;line-height:1.5&#125; .registered-claims&#123;background:rgba(0,0,0,.2);border:1px solid rgba(255,255,255,.08);border-radius:12px;padding:24px&#125; .registered-claims h3&#123;font-size:1.1rem;color:#fff;margin-bottom:16px&#125; .claims-grid&#123;display:grid;grid-template-columns:repeat(2,1fr);gap:10px&#125; .claim-item&#123;font-size:.88rem;color:#94a3b8;line-height:1.5;padding:8px 12px;background:rgba(0,0,0,.2);border-radius:8px&#125; .claim-item strong&#123;color:#22d3ee;font-family:monospace&#125; .decoder-layout&#123;display:grid;grid-template-columns:1fr 1fr;gap:24px;margin-bottom:20px&#125; .decoder-input-area label,.decoder-output-area label&#123;display:block;font-size:.85rem;color:#94a3b8;margin-bottom:8px;font-weight:600;text-transform:uppercase;letter-spacing:.5px&#125; .jwt-textarea&#123;width:100%;padding:16px;background:rgba(0,0,0,.4);border:1px solid rgba(255,255,255,.15);border-radius:10px;color:#e2e8f0;font-family:"SF Mono",Monaco,"Cascadia Code",monospace;font-size:.85rem;resize:vertical;line-height:1.6;word-break:break-all;box-sizing:border-box&#125; .jwt-textarea:focus&#123;outline:none;border-color:#22d3ee;box-shadow:0 0 0 2px rgba(34,211,238,.2)&#125; .jwt-colored&#123;margin-top:12px;padding:14px;background:rgba(0,0,0,.4);border-radius:10px;font-family:"SF Mono",Monaco,"Cascadia Code",monospace;font-size:.82rem;line-height:1.6;word-break:break-all;min-height:40px&#125; .jwt-header-text&#123;color:#fb7185&#125; .jwt-payload-text&#123;color:#a78bfa&#125; .jwt-signature-text&#123;color:#22d3ee&#125; .jwt-dot&#123;color:#475569;font-weight:800&#125; .decoded-panel&#123;background:rgba(0,0,0,.3);border:1px solid rgba(255,255,255,.1);border-radius:10px;padding:16px;margin-bottom:12px&#125; .panel-label&#123;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:1px;margin-bottom:10px&#125; .header-panel .panel-label&#123;color:#fb7185&#125; .payload-panel .panel-label&#123;color:#a78bfa&#125; .signature-panel .panel-label&#123;color:#22d3ee&#125; .algo-badge&#123;background:rgba(251,113,133,.2);color:#fb7185;padding:2px 8px;border-radius:4px;font-size:.75rem;font-weight:600;margin-left:8px&#125; .decoded-json&#123;margin:0;font-family:"SF Mono",Monaco,"Cascadia Code",monospace;font-size:.82rem;color:#e2e8f0;white-space:pre-wrap;word-break:break-all;line-height:1.6&#125; .header-panel .decoded-json&#123;color:#fb7185&#125; .payload-panel .decoded-json&#123;color:#a78bfa&#125; .signature-display&#123;font-family:"SF Mono",Monaco,"Cascadia Code",monospace;font-size:.82rem;color:#22d3ee;word-break:break-all;line-height:1.6&#125; .token-meta&#123;margin-top:12px;display:flex;flex-direction:column;gap:6px&#125; .meta-item&#123;font-size:.82rem;color:#94a3b8;display:flex;gap:8px&#125; .meta-label&#123;font-weight:600;color:#64748b;min-width:70px&#125; .meta-value&#123;color:#e2e8f0&#125; .meta-value.expired&#123;color:#ef4444;font-weight:600&#125; .meta-value.valid&#123;color:#22c55e;font-weight:600&#125; .decoder-actions&#123;display:flex;gap:12px;flex-wrap:wrap&#125; .builder-layout&#123;display:grid;grid-template-columns:1fr 1fr;gap:24px&#125; .builder-form label&#123;display:block;font-size:.82rem;color:#94a3b8;margin-bottom:6px;font-weight:600&#125; .form-group&#123;margin-bottom:16px&#125; .form-row&#123;display:grid;grid-template-columns:1fr 1fr;gap:16px&#125; .form-input,.form-select,.form-textarea&#123;width:100%;padding:10px 14px;background:rgba(0,0,0,.3);border:1px solid rgba(255,255,255,.15);border-radius:8px;color:#e2e8f0;font-size:.9rem;box-sizing:border-box&#125; .form-select&#123;cursor:pointer&#125; .form-textarea&#123;font-family:"SF Mono",Monaco,"Cascadia Code",monospace;font-size:.85rem;resize:vertical&#125; .form-input:focus,.form-select:focus,.form-textarea:focus&#123;outline:none;border-color:#22d3ee;box-shadow:0 0 0 2px rgba(34,211,238,.2)&#125; .builder-output label&#123;display:block;font-size:.85rem;color:#94a3b8;margin-bottom:8px;font-weight:600;text-transform:uppercase;letter-spacing:.5px&#125; .built-token&#123;padding:16px;background:rgba(0,0,0,.4);border-radius:10px;font-family:"SF Mono",Monaco,"Cascadia Code",monospace;font-size:.82rem;line-height:1.6;word-break:break-all;min-height:60px;border:1px solid rgba(255,255,255,.1)&#125; .built-decoded&#123;margin-top:16px&#125; .built-section&#123;margin-bottom:12px&#125; .built-section pre&#123;margin:6px 0 0;font-size:.82rem;color:#e2e8f0;white-space:pre-wrap;background:rgba(0,0,0,.2);padding:10px;border-radius:8px&#125; .exp-calculator&#123;display:grid;grid-template-columns:1fr 1fr;gap:24px&#125; .exp-inputs&#123;display:flex;flex-direction:column;gap:12px&#125; .exp-results&#123;display:grid;grid-template-columns:1fr 1fr;gap:12px;align-content:start&#125; .exp-result-card&#123;background:rgba(0,0,0,.3);border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:16px&#125; .exp-label&#123;font-size:.75rem;color:#64748b;text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px;font-weight:600&#125; .exp-value&#123;font-size:.9rem;color:#e2e8f0;line-height:1.5&#125; .algo-comparison&#123;display:grid;grid-template-columns:repeat(2,1fr);gap:20px;margin-bottom:24px&#125; .algo-card&#123;background:rgba(0,0,0,.2);border:1px solid rgba(255,255,255,.08);border-radius:12px;overflow:hidden&#125; .algo-header&#123;padding:16px 20px;display:flex;align-items:center;justify-content:space-between&#125; .algo-header h3&#123;margin:0;font-size:1.2rem;color:#fff&#125; .algo-type&#123;font-size:.75rem;padding:4px 10px;border-radius:20px;font-weight:600&#125; .algo-header.hs256&#123;background:rgba(251,113,133,.15);border-bottom:2px solid #fb7185&#125; .algo-header.hs256 .algo-type&#123;background:rgba(251,113,133,.2);color:#fb7185&#125; .algo-header.rs256&#123;background:rgba(167,139,250,.15);border-bottom:2px solid #a78bfa&#125; .algo-header.rs256 .algo-type&#123;background:rgba(167,139,250,.2);color:#a78bfa&#125; .algo-header.es256&#123;background:rgba(34,211,238,.15);border-bottom:2px solid #22d3ee&#125; .algo-header.es256 .algo-type&#123;background:rgba(34,211,238,.2);color:#22d3ee&#125; .algo-header.ps256&#123;background:rgba(52,211,153,.15);border-bottom:2px solid #34d399&#125; .algo-header.ps256 .algo-type&#123;background:rgba(52,211,153,.2);color:#34d399&#125; .algo-body&#123;padding:20px&#125; .algo-body p&#123;font-size:.88rem;color:#94a3b8;line-height:1.6;margin-bottom:14px&#125; .algo-details&#123;display:flex;flex-direction:column;gap:8px;margin-bottom:14px&#125; .algo-detail&#123;display:flex;justify-content:space-between;padding:6px 0;border-bottom:1px solid rgba(255,255,255,.05);font-size:.82rem&#125; .detail-label&#123;color:#64748b;font-weight:600&#125; .detail-value&#123;color:#e2e8f0;text-align:right&#125; .highlight-green&#123;color:#22c55e&#125; .highlight-yellow&#123;color:#eab308&#125; .highlight-red&#123;color:#ef4444&#125; .algo-pros-cons&#123;font-size:.82rem;line-height:1.6&#125; .pros&#123;color:#94a3b8;margin-bottom:8px&#125; .pros strong&#123;color:#22c55e&#125; .cons&#123;color:#94a3b8&#125; .cons strong&#123;color:#ef4444&#125; .algo-recommendation&#123;background:rgba(34,211,238,.08);border:1px solid rgba(34,211,238,.2);border-radius:12px;padding:20px&#125; .algo-recommendation h3&#123;font-size:1rem;color:#22d3ee;margin-bottom:8px&#125; .algo-recommendation p&#123;font-size:.9rem;color:#94a3b8;line-height:1.7&#125; .algo-recommendation strong&#123;color:#e2e8f0&#125; .algo-recommendation code&#123;background:rgba(255,255,255,.1);padding:2px 6px;border-radius:4px;font-size:.82rem;color:#ef4444&#125; .practices-grid&#123;display:grid;grid-template-columns:repeat(2,1fr);gap:20px&#125; .practice-card&#123;background:rgba(0,0,0,.2);border:1px solid rgba(255,255,255,.08);border-radius:12px;padding:24px&#125; .practice-card h3&#123;font-size:1.1rem;color:#fff;margin-bottom:14px&#125; .practice-card p&#123;font-size:.88rem;color:#94a3b8;line-height:1.6;margin-bottom:12px&#125; .practice-list&#123;color:#94a3b8;font-size:.85rem;line-height:1.8;padding-left:20px;margin:0&#125; .practice-list li&#123;margin-bottom:4px&#125; .practice-list strong&#123;color:#e2e8f0&#125; .practice-list code&#123;background:rgba(255,255,255,.1);padding:1px 5px;border-radius:3px;font-size:.8rem;color:#22d3ee&#125; .practice-list em&#123;color:#a78bfa&#125; .practice-comparison&#123;display:grid;grid-template-columns:1fr 1fr;gap:16px&#125; .practice-option&#123;padding:16px;border-radius:10px;font-size:.85rem&#125; .practice-option strong&#123;display:block;margin-bottom:8px;font-size:.95rem&#125; .practice-option ul&#123;margin:0;padding-left:18px;line-height:1.7;color:#94a3b8&#125; .practice-option ul code&#123;background:rgba(255,255,255,.1);padding:1px 5px;border-radius:3px;font-size:.78rem;color:#e2e8f0&#125; .practice-option.good&#123;background:rgba(34,197,94,.08);border:1px solid rgba(34,197,94,.2)&#125; .practice-option.good strong&#123;color:#22c55e&#125; .practice-option.bad&#123;background:rgba(239,68,68,.08);border:1px solid rgba(239,68,68,.2)&#125; .practice-option.bad strong&#123;color:#ef4444&#125; .practice-badge&#123;font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:1px;padding:3px 8px;border-radius:4px;display:inline-block;margin-bottom:8px;background:rgba(34,197,94,.2);color:#22c55e&#125; .practice-badge.warning&#123;background:rgba(239,68,68,.2);color:#ef4444&#125; .attacks-grid&#123;display:grid;grid-template-columns:repeat(2,1fr);gap:20px&#125; .attack-card&#123;background:rgba(0,0,0,.2);border:1px solid rgba(255,255,255,.08);border-radius:12px;overflow:hidden&#125; .attack-header&#123;padding:14px 20px;display:flex;align-items:center;gap:12px&#125; .attack-header h3&#123;margin:0;font-size:1rem;color:#fff&#125; .severity&#123;font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:1px;padding:3px 8px;border-radius:4px;white-space:nowrap&#125; .attack-header.critical&#123;background:rgba(239,68,68,.12);border-bottom:2px solid #ef4444&#125; .attack-header.critical .severity&#123;background:rgba(239,68,68,.3);color:#ef4444&#125; .attack-header.high&#123;background:rgba(249,115,22,.12);border-bottom:2px solid #f97316&#125; .attack-header.high .severity&#123;background:rgba(249,115,22,.3);color:#f97316&#125; .attack-header.medium&#123;background:rgba(234,179,8,.12);border-bottom:2px solid #eab308&#125; .attack-header.medium .severity&#123;background:rgba(234,179,8,.3);color:#eab308&#125; .attack-body&#123;padding:20px&#125; .attack-body p&#123;font-size:.85rem;color:#94a3b8;line-height:1.6;margin-bottom:12px&#125; .attack-body strong&#123;color:#e2e8f0&#125; .attack-example&#123;background:rgba(0,0,0,.3);border:1px solid rgba(255,255,255,.08);border-radius:8px;padding:12px;margin-bottom:12px;font-family:"SF Mono",Monaco,"Cascadia Code",monospace;font-size:.78rem;color:#94a3b8;line-height:1.6;overflow-x:auto&#125; .attack-example code&#123;font-size:.78rem;color:#e2e8f0;background:none;padding:0&#125; .comparison-table-wrapper&#123;overflow-x:auto&#125; .comparison-table&#123;width:100%;border-collapse:collapse;font-size:.88rem&#125; .comparison-table th,.comparison-table td&#123;padding:14px 18px;text-align:left;border-bottom:1px solid rgba(255,255,255,.06)&#125; .comparison-table thead th&#123;font-weight:700;text-transform:uppercase;font-size:.75rem;letter-spacing:.5px;color:#64748b;border-bottom:2px solid rgba(255,255,255,.1)&#125; .comparison-table th.jwt-col&#123;color:#22d3ee&#125; .comparison-table th.session-col&#123;color:#a78bfa&#125; .comparison-table td&#123;color:#94a3b8&#125; .aspect-label&#123;font-weight:600;color:#e2e8f0&#125; .comparison-table td.advantage&#123;color:#22c55e;font-weight:500&#125; .comparison-table tbody tr:hover&#123;background:rgba(255,255,255,.03)&#125; .b64-utility&#123;display:grid;grid-template-columns:1fr auto 1fr;gap:16px;align-items:start&#125; .b64-col label&#123;display:block;font-size:.82rem;color:#94a3b8;margin-bottom:8px;font-weight:600&#125; .b64-arrow&#123;display:flex;align-items:center;font-size:1.5rem;color:#64748b;padding-top:30px&#125; .action-btn&#123;padding:10px 20px;border-radius:8px;border:1px solid rgba(255,255,255,.15);cursor:pointer;font-size:.88rem;font-weight:600;transition:all .2s;background:rgba(255,255,255,.05);color:#e2e8f0&#125; .action-btn:hover&#123;background:rgba(255,255,255,.1)&#125; .primary-btn&#123;background:rgba(34,211,238,.2);border:1px solid rgba(34,211,238,.4);color:#22d3ee&#125; .primary-btn:hover&#123;background:rgba(34,211,238,.3)&#125; .secondary-btn&#123;background:rgba(167,139,250,.15);border:1px solid rgba(167,139,250,.3);color:#a78bfa&#125; .secondary-btn:hover&#123;background:rgba(167,139,250,.25)&#125; .reset-btn&#123;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.15);color:#94a3b8&#125; .reset-btn:hover&#123;background:rgba(255,255,255,.1)&#125; .viz-footer&#123;text-align:center;color:#666;font-size:.9rem;padding:20px 0;border-top:1px solid rgba(255,255,255,.1);margin-bottom:30px&#125; .share-buttons&#123;display:flex;align-items:center;justify-content:center;gap:16px;margin-bottom:30px&#125; .share-buttons span&#123;color:#666&#125; .share-btn&#123;padding:10px 20px;background:rgba(255,255,255,.1);border-radius:8px;color:#fff;font-size:.9rem;transition:background .2s;text-decoration:none&#125; .share-btn:hover&#123;background:rgba(255,255,255,.2)&#125; @media(max-width:768px)&#123; .viz-header h1&#123;font-size:1.8rem&#125; .interactive-section&#123;padding:20px&#125; .decoder-layout&#123;grid-template-columns:1fr&#125; .builder-layout&#123;grid-template-columns:1fr&#125; .exp-calculator&#123;grid-template-columns:1fr&#125; .exp-results&#123;grid-template-columns:1fr&#125; .algo-comparison&#123;grid-template-columns:1fr&#125; .practices-grid&#123;grid-template-columns:1fr&#125; .attacks-grid&#123;grid-template-columns:1fr&#125; .structure-diagram&#123;flex-direction:column;gap:12px&#125; .structure-dot&#123;display:none&#125; .claims-grid&#123;grid-template-columns:1fr&#125; .form-row&#123;grid-template-columns:1fr&#125; .practice-comparison&#123;grid-template-columns:1fr&#125; .b64-utility&#123;grid-template-columns:1fr&#125; .b64-arrow&#123;display:none&#125; .decoder-actions&#123;flex-direction:column&#125; .comparison-table&#123;font-size:.8rem&#125; .comparison-table th,.comparison-table td&#123;padding:10px 12px&#125; &#125; @media(max-width:480px)&#123; .viz-header h1&#123;font-size:1.5rem&#125; .subtitle&#123;font-size:1rem&#125; .algo-detail&#123;flex-direction:column;gap:4px&#125; .detail-value&#123;text-align:left&#125; &#125;{}
