.app-shell{min-height:100vh;min-height:100dvh;display:flex;flex-direction:column;padding:calc(20px + var(--safe-top)) 20px calc(16px + var(--safe-bottom))}.app-shell__main{flex:1;width:100%;max-width:420px;margin:0 auto}.app-shell__footer{margin-top:24px;padding-top:16px;border-top:1px solid var(--color-border);color:var(--color-text-muted);font-size:13px;line-height:1.6;text-align:center}.installer-page{display:flex;flex-direction:column;align-items:center;text-align:center;gap:16px;padding-top:12px}.app-icon{width:112px;height:112px;border-radius:24px;overflow:hidden;box-shadow:0 10px 30px #1a56db2e,0 2px 8px #0f172a14;background:#fff}.app-icon img{width:100%;height:100%;object-fit:cover}.app-icon--muted{box-shadow:0 8px 24px #0f172a14}.installer-page__title{margin:8px 0 0;font-size:28px;line-height:1.25;letter-spacing:-.02em}.installer-page__desc{margin:0;color:var(--color-text-muted);font-size:16px}.installer-page__actions{width:100%;display:flex;flex-direction:column;gap:12px;margin-top:8px}.installer-page__hint{margin:0;color:var(--color-text-muted);font-size:14px}.btn{width:100%;min-height:52px;border:none;border-radius:14px;padding:14px 18px;font-size:17px;font-weight:600;cursor:pointer;transition:transform .15s ease,background-color .15s ease}.btn:active{transform:scale(.98)}.btn-primary{background:var(--color-primary);color:#fff}.btn-primary:hover{background:var(--color-primary-dark)}.btn-secondary{background:var(--color-secondary);color:var(--color-primary)}.btn-small{width:auto;min-height:40px;padding:10px 16px;font-size:14px}.steps-card{width:100%;padding:16px 18px;border-radius:16px;background:#fff;border:1px solid var(--color-border);text-align:left}.steps-card__title{margin:0 0 12px;font-size:15px;font-weight:600}.steps-list{margin:0;padding-left:20px;color:#334155}.steps-list li+li{margin-top:8px}.url-box{width:100%;padding:14px 16px;border-radius:14px;background:#fff;border:1px solid var(--color-border);text-align:left;word-break:break-all}.url-box__label{margin:0 0 6px;font-size:13px;color:var(--color-text-muted)}.url-box__value{margin:0;font-size:14px;color:#1e293b}.success-banner,.info-banner{display:flex;gap:12px;align-items:flex-start;padding:14px 16px;border-radius:16px;margin-bottom:16px}.success-banner{background:#ecfdf3;border:1px solid #bbf7d0}.info-banner{flex-direction:column;background:#eff6ff;border:1px solid #bfdbfe}.success-banner__icon{width:28px;height:28px;border-radius:50%;background:#16a34a;color:#fff;display:grid;place-items:center;font-size:16px;flex-shrink:0}.success-banner__title,.info-banner__title{margin:0;font-size:16px;font-weight:700}.success-banner__text,.info-banner__text{margin:4px 0 0;color:#334155;font-size:14px}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;background:#0f172a73;display:flex;align-items:flex-end;justify-content:center;padding:16px 16px calc(16px + var(--safe-bottom))}.modal{width:100%;max-width:420px;background:#fff;border-radius:20px 20px 16px 16px;padding:20px 20px 16px;box-shadow:0 20px 50px #0f172a2e}.modal__header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}.modal__title{margin:0;font-size:20px}.modal__close{width:36px;height:36px;border:none;border-radius:50%;background:#f1f5f9;color:#475569;font-size:24px;line-height:1;cursor:pointer}.modal-steps{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:14px}.modal-step{display:flex;gap:12px;align-items:flex-start}.modal-step__index{width:28px;height:28px;border-radius:50%;background:var(--color-primary);color:#fff;display:grid;place-items:center;font-size:14px;font-weight:700;flex-shrink:0}.modal-step__title{margin:0;font-size:16px;font-weight:600}.modal-step__desc{margin:4px 0 0;color:var(--color-text-muted);font-size:14px}.modal__action{margin-top:18px}.mock-app{background:#fff;border:1px solid var(--color-border);border-radius:20px;padding:18px;box-shadow:0 8px 24px #0f172a0d}.mock-app__header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:16px}.mock-app__eyebrow{margin:0;color:var(--color-primary);font-size:13px;font-weight:600}.mock-app__title{margin:4px 0 0;font-size:24px}.mock-app__badge{padding:6px 10px;border-radius:999px;background:#f8fafc;border:1px solid var(--color-border);color:var(--color-text-muted);font-size:12px;white-space:nowrap}.mock-app__stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:18px}.mock-stat{padding:12px 10px;border-radius:14px;background:#f8fbff;text-align:center}.mock-stat strong{display:block;font-size:22px;color:var(--color-primary)}.mock-stat span{display:block;margin-top:4px;font-size:12px;color:var(--color-text-muted)}.mock-app__section h3{margin:0 0 12px;font-size:16px}.course-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}.course-item{padding:12px;border-radius:14px;background:#f8fafc;border:1px solid var(--color-border)}.course-item__main{display:flex;justify-content:space-between;gap:12px;margin-bottom:10px}.course-item__title{margin:0;font-size:15px;font-weight:600}.course-item__status{margin:0;font-size:13px;color:var(--color-text-muted);white-space:nowrap}.course-item__progress{height:6px;border-radius:999px;background:#e2e8f0;overflow:hidden}.course-item__progress-bar{height:100%;border-radius:inherit;background:linear-gradient(90deg,#1a56db,#3b82f6)}.mock-app__note{margin:16px 0 0;color:var(--color-text-muted);font-size:13px;line-height:1.6}@media(min-width:768px){.modal-overlay{align-items:center}.modal{border-radius:20px}}:root{color:#0f172a;background:#f5f7fb;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;line-height:1.5;font-weight:400;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--color-primary: #1a56db;--color-primary-dark: #1648b8;--color-theme: #0b1020;--color-secondary: #e8eef9;--color-text-muted: #64748b;--color-border: #dbe3f0;--safe-top: env(safe-area-inset-top, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px)}*,*:before,*:after{box-sizing:border-box}html,body,#root{min-height:100%}body{margin:0;min-width:320px;background:linear-gradient(180deg,#f8fbff,#eef3fb)}button{font:inherit}img{display:block;max-width:100%}
