:root{--text:#111;--muted:#666;--border:#ddd;--surface:#fff;--page:#f5f5f5;--accent:#2f5fd0;--accent-hover:#244bb0;--accent-soft:#eaf0fc;--danger:#c62828;--danger-hover:#a51f1f;--danger-soft:#fdecec;--danger-text:#7f1d1d;--success:#1e7d3a;--success-soft:#e8f5ec;--success-text:#14532d}*{box-sizing:border-box}body{background:var(--page);color:var(--text);margin:0;font-family:Arial,Helvetica,sans-serif}a{color:var(--accent)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}button,input,select{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed}.app{min-height:100vh;display:flex}.sidebar{color:#fff;background:#111;width:260px;height:100vh;padding:24px 16px;position:fixed;top:0;bottom:0;left:0;overflow-y:auto}.sidebar-logo{padding:0 12px 30px;font-size:22px;font-weight:700}.nav-section{margin-top:24px}.nav-section-title{color:#888;text-transform:uppercase;letter-spacing:1px;justify-content:space-between;padding:0 12px 8px;font-size:12px;font-weight:700;display:flex}.nav-section-progress{font-variant-numeric:tabular-nums;letter-spacing:0;color:#666}.nav-link{color:#bbb;border-radius:6px;justify-content:space-between;align-items:center;margin-bottom:2px;padding:10px 12px;text-decoration:none;display:flex}.nav-link:hover{color:#fff;background:#222}.nav-link.active{background:var(--accent);color:#fff}.nav-check{color:#5fd38a;font-weight:700}.nav-link.active .nav-check{color:#fff}.main-content{width:calc(100% - 260px);max-width:1400px;margin-left:260px;padding:40px}.page-header{margin-bottom:30px}.page-header h1{margin:0 0 8px;font-size:32px}.page-header p{color:#666;margin:0}.welcome-card,.test-card{background:#fff;border:1px solid #ddd;border-radius:8px;margin-bottom:20px;padding:24px}.test-card h2{margin-top:0}.category-grid{grid-template-columns:repeat(2,1fr);gap:16px;margin-top:20px;display:grid}.category-card{background:#fff;border:1px solid #ddd;border-radius:8px;padding:20px}.category-card h3{margin-top:0}.category-card p{color:#666}.button-row{flex-wrap:wrap;gap:12px;display:flex}button{background:var(--accent);color:#fff;border:1px solid var(--accent);border-radius:5px;padding:10px 16px}button:hover{background:var(--accent-hover);border-color:var(--accent-hover)}button.secondary{background:var(--surface);color:var(--text);border-color:#bbb}button.secondary:hover{background:#f0f0f0;border-color:#999}button.danger{background:var(--danger);border-color:var(--danger);color:#fff}button.danger:hover{background:var(--danger-hover);border-color:var(--danger-hover)}button.danger.secondary{background:var(--surface);color:var(--danger);border-color:var(--danger)}button.danger.secondary:hover{background:var(--danger-soft)}button:disabled,button:disabled:hover{color:#777;background:#ddd;border-color:#ddd}.form-group{flex-direction:column;gap:7px;max-width:400px;margin-bottom:18px;display:flex}.form-group label{font-weight:600}input,select{background:#fff;border:1px solid #bbb;border-radius:5px;padding:10px 12px}input:focus,select:focus,textarea:focus{outline:2px solid var(--accent);outline-offset:1px}input[aria-invalid=true]{border-color:var(--danger);background:snow}input[aria-invalid=true]:focus{outline-color:var(--danger)}.error-message{color:var(--danger);font-size:14px;font-weight:600}.error-message:before{content:"⚠ "}.checkbox-group,.radio-group{flex-direction:column;gap:14px;display:flex}.checkbox-group label,.radio-group label{align-items:center;gap:8px;display:flex}.checkbox-group input,.radio-group input{width:18px;height:18px}.result{background:#f0f0f0;border-left:4px solid #bbb;border-radius:5px;margin-top:20px;padding:14px}.result.success{background:var(--success-soft);border-left-color:var(--success);color:var(--success-text)}.result.error,.result[role=alert]{background:var(--danger-soft);border-left-color:var(--danger);color:var(--danger-text)}.credentials-note{color:var(--muted);border:1px dashed #bbb;border-radius:6px;margin-top:20px;padding:12px 16px;font-size:14px}.credentials-note p{margin:4px 0}.hover-box{text-align:center;cursor:pointer;border:2px dashed #111;width:300px;padding:40px;transition:all .2s}.hover-box:hover{background:var(--accent);border-color:var(--accent);color:#fff}.hover-menu-trigger,.hover-menu-trigger:hover{background:var(--surface);color:var(--text);cursor:default;border:1px dashed #999}.hover-menu{display:inline-block;position:relative}.hover-menu-content{z-index:10;background:#fff;border:1px solid #ccc;min-width:180px;display:none;position:absolute;top:100%;left:0;box-shadow:0 5px 15px #0000001a}.hover-menu:hover .hover-menu-content{flex-direction:column;display:flex}.hover-menu-content button{text-align:left;background:var(--surface);color:var(--text);border:none;border-radius:0}.hover-menu-content button:hover{background:var(--accent-soft)}.right-click-area{text-align:center;-webkit-user-select:none;user-select:none;border:2px dashed #111;width:400px;padding:50px}.dynamic-area{align-items:center;min-height:100px;margin-top:25px;display:flex}.dynamic-element{background:#f5f5f5;border:1px solid #111;margin-top:20px;padding:20px}.spinner{padding:20px;font-weight:700}.progress-container{background:#ddd;border-radius:5px;width:100%;max-width:600px;height:30px;margin-top:25px;overflow:hidden}.progress{background:var(--accent);height:100%;transition:width .2s}.progress-value{margin-top:10px;font-weight:700}.autocomplete{position:relative}.autocomplete-list{z-index:20;background:#fff;border:1px solid #bbb;border-radius:5px;width:400px;margin:-18px 0 0;padding:0;list-style:none;position:absolute;top:100%;left:0;overflow:hidden}.autocomplete-list li{margin:0}.autocomplete-list button{text-align:left;color:#111;background:#fff;border:none;border-radius:0;width:100%}.autocomplete-list button:hover{background:var(--accent-soft)}table{border-collapse:collapse;background:#fff;width:100%;margin-top:20px}caption{text-align:left;margin-bottom:10px;font-weight:600}th,td{text-align:left;border:1px solid #ddd;padding:12px 14px}th{background:#f0f0f0;font-weight:700}tbody tr:hover{background:#f8f8f8}.table-sort-button{color:#111;background:0 0;border:none;padding:0;font-weight:700}.table-sort-button:hover{background:0 0}.table-actions{gap:8px;display:flex}.table-actions button{padding:8px 14px}.modal-backdrop{z-index:100;background:#00000080;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:#fff;border:1px solid #ccc;border-radius:8px;width:420px;max-width:calc(100% - 40px);padding:24px;box-shadow:0 10px 30px #0003}.modal h2{margin-top:0}.modal p{color:#666;margin-bottom:24px}.button-link{background:var(--accent);color:#fff;border:1px solid var(--accent);border-radius:5px;padding:10px 16px;text-decoration:none;display:inline-block}.button-link:hover{background:var(--accent-hover);color:#fff}.test-iframe{background:#fff;border:1px solid #bbb;border-radius:5px;width:100%;max-width:700px;height:300px;margin-top:20px;display:block}.drag-drop-container{align-items:center;gap:40px;margin-top:25px;display:flex}.drag-source,.drop-target{text-align:center;border:2px dashed #111;border-radius:8px;justify-content:center;align-items:center;width:220px;height:140px;display:flex}.drag-source{color:#fff;cursor:grab;background:#111}.drag-source:active{cursor:grabbing}.drop-target{background:#f5f5f5}.drop-target.dropped{color:#fff;background:#111}.mouse-actions{flex-wrap:wrap;gap:12px;margin-top:20px;display:flex}.mouse-hover-area{cursor:pointer;border:1px dashed #111;border-radius:5px;justify-content:center;align-items:center;min-width:180px;padding:10px 16px;display:flex}.mouse-hover-area:hover{color:#fff;background:#111}.mouse-tracking-area{-webkit-user-select:none;user-select:none;border:2px dashed #111;border-radius:8px;justify-content:center;align-items:center;width:100%;max-width:600px;height:250px;margin-top:30px;display:flex;position:relative}.mouse-coordinates{color:#fff;background:#111;border-radius:4px;padding:6px 10px;font-size:14px;position:absolute;top:12px;right:12px}.content-box{background:#f5f5f5;border:1px solid #ddd;border-radius:5px;padding:16px}.special-link{color:#111;font-weight:600;text-decoration:underline;display:inline-block}.api-response{color:#fff;background:#111;border-radius:5px;margin-top:20px;padding:16px;font-family:monospace;font-size:14px;line-height:1.5;overflow-x:auto}.home-hero{color:#fff;background:#111;border-radius:10px;margin-bottom:20px;padding:40px}.home-eyebrow{letter-spacing:2px;color:#aaa;margin-bottom:12px;font-size:12px;font-weight:700}.home-hero h1{margin:0 0 12px;font-size:42px}.home-hero p{color:#ccc;max-width:750px;margin:0;font-size:17px;line-height:1.6}.home-stats{grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:40px;display:grid}.home-stat{background:#fff;border:1px solid #ddd;border-radius:8px;padding:20px}.home-stat strong{margin-bottom:6px;font-size:24px;display:block}.home-stat span{color:#666;font-size:14px}.home-section-header{margin-bottom:20px}.home-section-header h2{margin:0 0 8px;font-size:26px}.category-grid{grid-template-columns:repeat(2,1fr)}.home-category-card{background:#fff;border:1px solid #ddd;border-radius:8px;flex-direction:column;gap:12px;padding:22px;display:flex}.home-category-header{justify-content:space-between;align-items:center;gap:16px;display:flex}.home-category-header h3{margin:0;font-size:19px}.home-category-count{background:var(--accent-soft);min-width:32px;color:var(--accent);font-variant-numeric:tabular-nums;text-align:center;border-radius:20px;padding:5px 9px;font-size:13px;font-weight:700}.home-category-count.is-complete{background:var(--success-soft);color:var(--success)}.home-category-card p{color:#666;margin:0;line-height:1.5}.home-category-link{font-size:14px;font-weight:700}.home-focus{background:#fff;border:1px solid #ddd;border-radius:8px;margin-top:40px;padding:24px}.home-focus h2{margin-top:0}.home-focus-grid{grid-template-columns:repeat(2,1fr);gap:20px;display:grid}.home-focus-grid div{flex-direction:column;gap:6px;display:flex}.home-focus-grid strong{font-size:16px}.home-focus-grid span{color:#666;line-height:1.5}@media (width<=900px){.home-stats{grid-template-columns:repeat(2,1fr)}.category-grid{grid-template-columns:1fr}}@media (width<=600px){.home-stats,.home-focus-grid{grid-template-columns:1fr}.home-hero h1{font-size:34px}}.exercise-task{background:#fff;border:1px solid #ddd;border-left:4px solid #111;border-radius:8px;margin-bottom:24px}.exercise-task-toggle{text-align:left;color:#111;background:0 0;border:none;border-radius:8px;width:100%;padding:12px 16px;font-weight:700}.exercise-task-toggle:hover{background:#f5f5f5}.exercise-task-body{padding:0 20px 18px}.exercise-task-goal{margin:0 0 10px;font-weight:600}.exercise-task-body ol{margin:0 0 14px;padding-left:22px;line-height:1.6}.exercise-task-apis{color:#666;flex-wrap:wrap;align-items:center;gap:6px;font-size:14px;display:flex}.exercise-task-apis code,.exercise-task-hint code{color:#111;background:#f0f0f0;border-radius:4px;padding:2px 6px}.exercise-task-hint{color:#444;margin-top:14px}.exercise-task-hint summary{cursor:pointer;font-weight:600}.exercise-task-hint p{margin:8px 0 0}.product-grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;display:grid}.product-card{border:1px solid #ddd;border-radius:8px;padding:16px}.product-card h3{margin:0 0 6px;font-size:16px}.product-card p{color:#666;margin:0 0 12px}.settings-grid{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px;display:grid}.settings-panel{border:1px solid #ddd;border-radius:8px;padding:16px}.settings-panel h3{margin-top:0}.task-list{margin:0;padding:0;list-style:none}.task-list li{border-bottom:1px solid #eee;align-items:center;gap:12px;padding:10px 0;display:flex}.task-list li span:first-child{flex:1}.status-badge{background:#eee;border-radius:999px;padding:3px 8px;font-size:12px;font-weight:700}.status-badge.overdue{color:#8a1c1c;background:#fde2e2}.status-badge.done{color:#1d5e2f;background:#dff3e4}.toolbar{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.toolbar img{width:36px;height:36px}.icon-button{padding:8px 12px;font-size:18px;line-height:1}.settings-actions{margin-top:16px}.lesson{background:#fff;border:1px solid #ddd;border-left:4px solid #2f5fd0;border-radius:8px;margin-bottom:20px}.lesson-header{cursor:pointer;border-radius:8px;align-items:center;gap:4px;display:flex}.lesson-header:hover{background:#f5f7fd}.lesson-toggle,.lesson-toggle:hover{color:var(--accent);background:0 0;border:none;padding:12px 0 12px 16px;font-weight:700}.lesson-title{padding:12px 16px 12px 0;font-weight:700}.lesson-body{padding:0 20px 20px;line-height:1.6}.lesson-body h3{margin:20px 0 6px;font-size:17px}.lesson-body h3:first-child{margin-top:4px}.lesson-body p,.lesson-body ul{margin:0 0 10px}.lesson-body code,.api-reference code{background:#f0f0f0;border-radius:4px;padding:1px 5px;font-size:.92em}.lesson-code{color:#f5f5f5;background:#111;border-radius:6px;margin:8px 0 14px;padding:14px 16px;font-size:13px;line-height:1.55;overflow-x:auto}.lesson-code code{font-size:inherit;background:0 0;padding:0}.lesson-callout{background:#fff7e0;border:1px solid #f0dca0;border-radius:6px;margin:12px 0;padding:10px 14px}.request-line{color:#444;font-family:monospace;font-size:14px}.api-reference td,.api-reference th{vertical-align:top}.method{min-width:58px;font-family:monospace;font-weight:700;display:inline-block}.notification-list{margin:12px 0 0;padding-left:20px}.form-row{flex-wrap:wrap;align-items:flex-end;gap:12px;display:flex}.form-row .form-group{min-width:160px;margin-bottom:0}.exercise-task-header{align-items:center;gap:10px;padding-right:10px;display:flex}.exercise-task-header .exercise-task-toggle{flex:1;width:auto}.solved-toggle{background:var(--surface);color:var(--text);border-color:#bbb;padding:6px 12px;font-size:14px}.solved-toggle:hover{background:var(--success-soft);border-color:var(--success);color:var(--success-text)}.solved-toggle.is-solved,.solved-toggle.is-solved:hover{background:var(--success);border-color:var(--success);color:#fff}.exercise-task:has(.is-solved){border-left-color:var(--success)}.difficulty-badge{white-space:nowrap;border-radius:999px;padding:3px 9px;font-size:12px;font-weight:700;display:inline-block}.difficulty-beginner{color:#1d6b36;background:#e3f4e8}.difficulty-intermediate{color:#7a4f00;background:#fff1d6}.difficulty-advanced{color:#5b2bb5;background:#efe7fd}.progress-meter{background:#e8e8e8;border-radius:999px;height:6px;margin-top:10px;overflow:hidden}.progress-meter>div{background:var(--accent);border-radius:999px;height:100%;transition:width .3s}.home-category-card .progress-meter{margin-top:0}.home-stat-next{flex-direction:column;justify-content:center;gap:6px;display:flex}.home-stat-next a{font-size:18px;font-weight:700;text-decoration:none}.home-stat-next a:hover{text-decoration:underline}.home-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.filter-chips{flex-wrap:wrap;gap:8px;display:flex}.chip{background:var(--surface);color:var(--text);border-color:#ccc;border-radius:999px;padding:6px 14px;font-size:14px}.chip:hover{background:var(--accent-soft);border-color:var(--accent)}.chip.is-active,.chip.is-active:hover{background:var(--accent);border-color:var(--accent);color:#fff}.exercise-list{border-top:1px solid #eee;margin:0;padding:0;list-style:none}.exercise-list li{border-bottom:1px solid #eee;align-items:center;gap:10px;padding:9px 0;display:flex}.exercise-list a{color:var(--text);flex:1;font-weight:600;text-decoration:none}.exercise-list a:hover{color:var(--accent);text-decoration:underline}.exercise-solved{color:var(--success);font-weight:700}.radio-group label.is-disabled{color:#999}.custom-select{flex-direction:column;gap:7px;max-width:400px;display:flex;position:relative}.custom-select-label{font-weight:600}.custom-select-button{text-align:left}.custom-select-button:after{content:" ▾";float:right}.custom-select-list{background:var(--surface);z-index:20;border:1px solid #bbb;border-radius:5px;margin:4px 0 0;padding:4px 0;list-style:none;position:absolute;top:100%;left:0;right:0;box-shadow:0 5px 15px #0000001a}.custom-select-list li{cursor:pointer;padding:9px 14px}.custom-select-list li:hover,.custom-select-list li[aria-selected=true]{background:var(--accent-soft)}select[multiple]{padding:4px}.tooltip-anchor{display:inline-block;position:relative}.tooltip{background:var(--text);color:#fff;border-radius:5px;width:max-content;max-width:260px;padding:8px 12px;font-size:14px;position:absolute;top:50%;left:calc(100% + 10px);transform:translateY(-50%)}.auth-card{background:var(--surface);border:1px solid var(--border);border-top:4px solid var(--accent);border-radius:12px;max-width:420px;margin:10px auto 16px;padding:32px;box-shadow:0 10px 30px #0000000f}.auth-card-brand{color:var(--accent);letter-spacing:1px;text-transform:uppercase;font-size:13px;font-weight:700}.auth-card h2{margin:6px 0 22px;font-size:22px}.auth-card .form-group{max-width:none}.auth-card-remember{margin-bottom:18px}.auth-card-submit{width:100%;padding:12px 16px;font-weight:700}.auth-card-note{background:var(--accent-soft);border-radius:6px;margin:0 0 18px;padding:10px 12px;font-size:14px}.auth-cross-link{max-width:420px;color:var(--muted);text-align:center;margin:0 auto;font-size:14px}.test-card+.auth-cross-link{text-align:left;max-width:none;margin:0}.account-details{grid-template-columns:max-content 1fr;gap:8px 16px;margin:0 0 4px;display:grid}.account-details dt{color:var(--muted)}.account-details dd{margin:0;font-weight:600}.auth-card .result+.auth-card-submit{margin-top:18px}.spinner{align-items:center;gap:10px;display:flex}.spinner-icon{border:3px solid var(--accent-soft);border-top-color:var(--accent);border-radius:50%;width:18px;height:18px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.toast{z-index:50;background:var(--success);color:#fff;border-radius:6px;padding:12px 18px;font-weight:600;position:fixed;bottom:24px;right:24px;box-shadow:0 8px 24px #0000002e}.disappear-grid{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:20px;display:grid}.disappear-grid .dynamic-element{margin:0 0 12px}.job-status{background:#e8e8e8;border-radius:999px;padding:2px 10px;font-weight:700;display:inline-block}.job-status-queued{color:#7a4f00;background:#fff1d6}.job-status-running{background:var(--accent-soft);color:var(--accent)}.job-status-passed{background:var(--success-soft);color:var(--success)}.overlay-panel{border:1px solid var(--border);border-radius:6px;max-width:420px;margin-top:16px;padding:16px;position:relative}.overlay-panel p{margin:0 0 12px}.loading-overlay{background:#ffffffd9;border-radius:6px;justify-content:center;align-items:center;font-weight:700;display:flex;position:absolute;inset:0}.slide-track{height:56px;margin-top:16px;overflow:hidden}.slide-in{animation:1.5s ease-out slide-in}@keyframes slide-in{0%{transform:translate(600px)}to{transform:translate(0)}}.scroll-box{border:1px solid var(--border);border-radius:6px;max-width:520px;height:180px;margin-top:12px;padding:0 16px 16px;overflow-y:auto}.flaky-list{max-width:420px;margin:12px 0 0;padding:0;list-style:none}.flaky-list li{border-bottom:1px solid #eee;justify-content:space-between;align-items:center;padding:8px 0;display:flex}.session-banner{background:#fff1d6;border-left:4px solid #d99a00;border-radius:6px;margin-top:16px;padding:14px 16px;font-weight:600}.session-banner.expired{background:var(--danger-soft);border-left-color:var(--danger);color:var(--danger-text)}.promo-banner{background:#f0f0f0;border-radius:6px;padding:14px 16px;font-weight:600}.promo-banner.weekend{background:var(--accent-soft);color:var(--accent)}.table-empty{color:var(--muted);text-align:center;padding:24px;font-style:italic}tfoot td{color:var(--muted);background:#fafafa;font-weight:600}.add-user-form{border:1px solid var(--border);border-radius:6px;margin-top:20px;padding:16px}.add-user-form h3{margin:0 0 12px}.add-user-form .form-row{align-items:flex-start;margin-bottom:16px}.data-grid-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:12px;display:flex}.data-grid-toolbar .form-group{margin-bottom:0}.data-grid table[aria-busy=true] tbody{opacity:.45}.data-grid td:first-child,.data-grid th:first-child{text-align:center;width:44px}.pagination{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-top:14px;display:flex}.pagination .button-row{gap:8px}.data-grid .request-line{color:var(--muted);font-family:inherit;font-size:14px}.data-grid-toolbar input[type=search]{min-width:280px}.property-product{max-width:320px}.tab-list{border-bottom:2px solid var(--border);gap:4px;display:flex}.tab,.tab:hover{color:var(--muted);background:0 0;border:none;border-bottom:3px solid #0000;border-radius:0;margin-bottom:-2px;font-weight:600}.tab:hover{color:var(--text)}.tab.is-selected{color:var(--accent);border-bottom-color:var(--accent)}.tab-panel{padding:16px 4px 4px}.accordion-item{border-bottom:1px solid #eee}.accordion-item h3{margin:0;font-size:16px}.accordion-trigger,.accordion-trigger:hover{text-align:left;width:100%;color:var(--text);background:0 0;border:none;padding:14px 4px;font-weight:600}.accordion-trigger:after{content:"+";float:right;color:var(--muted)}.accordion-trigger[aria-expanded=true]:after{content:"−"}.accordion-panel{color:var(--muted);padding:0 4px 14px}.toggle{background:var(--surface);color:var(--text);border-color:#bbb}.toggle:hover{background:var(--accent-soft);border-color:var(--accent)}.toggle.is-on,.toggle.is-on:hover{background:var(--accent);border-color:var(--accent);color:#fff}.shadow-cards{flex-wrap:wrap;gap:12px;display:flex}.audit-images{flex-wrap:wrap;align-items:center;gap:16px;display:flex}.audit-images img{border:1px solid var(--border);border-radius:6px;width:64px;height:64px;padding:6px}.audit-links li{margin-bottom:6px}.release-notes{border:1px solid var(--border);border-radius:6px;padding:4px 16px 8px}
