:root{--ink: #040c1c;--ink-2: #0d1a33;--muted: #66728a;--line: #e3e8f0;--bg: #f4f6fa;--card: #ffffff;--soft: #eef2f8;--brand: #2f7bff;--brand-deep: #143e9e;--brand-soft: #e6efff;--brand-gradient: linear-gradient(135deg, #2f7bff 0%, #143e9e 100%);--star: #f2a516;--green: #16915a;--green-soft: #dff5ea;--red: #d23b2a;--red-soft: #fde3df;--radius: 18px;--shadow-sm: 0 1px 2px rgba(4, 12, 28, .06);--shadow: 0 1px 2px rgba(4, 12, 28, .05), 0 8px 24px -12px rgba(4, 12, 28, .12);--shadow-lg: 0 2px 4px rgba(4, 12, 28, .06), 0 20px 40px -16px rgba(4, 12, 28, .25);--ease: cubic-bezier(.2, .7, .2, 1);font-family:Inter,system-ui,-apple-system,Segoe UI,sans-serif;color:var(--ink)}*{box-sizing:border-box}html,body,#root{min-height:100%}body{margin:0;background:var(--bg);-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.45}body.no-scroll{overflow:hidden}h1,h2,h3,p{margin:0}button{font:inherit;color:inherit;border:0;background:none;cursor:pointer;padding:0}button:disabled{opacity:.5;cursor:not-allowed}input,select,textarea{font:inherit;color:inherit}a{color:inherit;text-decoration:none}:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.muted{color:var(--muted)}.small{font-size:12px}.center{text-align:center}.pad{padding:24px 0}.grow{flex:1;min-width:0}.row{display:flex;align-items:center}.row.gap{gap:10px}.wrap{flex-wrap:wrap}.ellipsis{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.clamp-1{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}.center-screen{min-height:60vh;display:grid;place-items:center}.page{min-height:100vh;display:flex;flex-direction:column}.page>main{flex:1}.container{width:100%;max-width:1240px;margin:0 auto;padding:0 24px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:40px;padding:0 16px;border-radius:12px;font-weight:600;white-space:nowrap;transition:background .15s,color .15s,box-shadow .15s,transform .15s var(--ease)}.btn:active:not(:disabled){transform:translateY(1px)}.btn-sm{height:32px;padding:0 12px;border-radius:10px;font-size:13px}.btn-block{width:100%}.btn-primary{background:var(--brand-gradient);color:#fff;box-shadow:0 4px 14px -6px #2f7bffb3}.btn-primary:hover:not(:disabled){filter:brightness(1.08);box-shadow:0 6px 18px -6px #2f7bffbf}.btn-ghost{background:var(--card);border:1px solid var(--line)}.btn-ghost:hover:not(:disabled){background:var(--soft)}.btn-light{background:#fff;color:var(--ink)}.btn-light:hover{background:var(--brand-soft)}.btn-dark-ghost{color:#fff;border:1px solid rgba(255,255,255,.18)}.btn-dark-ghost:hover{background:#ffffff14}.btn-danger{background:var(--red);color:#fff}.btn-danger:hover:not(:disabled){background:#b8301f}.text-btn{color:var(--brand);font-weight:600}.text-btn:hover{text-decoration:underline}.icon-btn{width:36px;height:36px;border-radius:10px;display:inline-grid;place-items:center;color:var(--muted);transition:background .15s,color .15s}.icon-btn:hover{background:var(--soft);color:var(--ink)}.icon-btn.danger:hover{background:var(--red-soft);color:var(--red)}.topbar{position:sticky;top:0;z-index:20;background:var(--ink);color:#fff;box-shadow:0 1px #ffffff0a,0 6px 20px -12px #00000080}.topbar-inner{max-width:1240px;margin:0 auto;padding:12px 24px;display:flex;align-items:center;gap:20px}.brand{display:flex;align-items:center;gap:14px;flex:none}.brand-logo{height:26px;width:auto;display:block}.brand-divider{width:1px;height:24px;background:#fff3}.brand-name{display:inline-flex;align-items:center;gap:6px;font-weight:600;font-size:15px;letter-spacing:.01em}.brand-name svg{color:var(--brand)}.topbar-right{margin-left:auto;display:flex;align-items:center;gap:10px;flex:none}.search{position:relative;flex:1;max-width:520px;margin:0 auto}.search input{width:100%;height:42px;padding:0 40px 0 42px;border-radius:12px;border:1px solid rgba(255,255,255,.12);background:#ffffff14;color:#fff;outline:none;transition:background .15s,border-color .15s}.search input::placeholder{color:#ffffff8c}.search input:focus{background:#ffffff24;border-color:var(--brand)}.search input::-webkit-search-cancel-button{display:none}.search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);color:#fff9;pointer-events:none}.search-clear{position:absolute;right:8px;top:50%;transform:translateY(-50%);width:28px;height:28px;border-radius:8px;display:grid;place-items:center;color:#ffffffb3}.search-clear:hover{background:#ffffff1f;color:#fff}.search-sm{margin:0;max-width:320px}.search-sm input{height:38px;background:var(--card);color:var(--ink);border-color:var(--line);padding-left:38px}.search-sm input::placeholder{color:var(--muted)}.search-sm input:focus{background:#fff}.search-sm .search-icon{left:12px;color:var(--muted)}.avatar{display:inline-grid;place-items:center;width:32px;height:32px;border-radius:50%;background:var(--brand-gradient);color:#fff;font-weight:700;font-size:12px;flex:none}.avatar.lg{width:44px;height:44px;font-size:15px}.profile{position:relative}.profile-btn{display:flex;align-items:center;gap:8px;padding:4px 8px 4px 4px;border-radius:999px;transition:background .15s}.profile-btn:hover,.profile-btn[aria-expanded=true]{background:#ffffff1a}.profile-name{font-weight:600}.menu{position:absolute;right:0;top:calc(100% + 8px);width:270px;background:var(--card);color:var(--ink);border-radius:16px;box-shadow:var(--shadow-lg);border:1px solid var(--line);padding:8px;animation:pop .16s var(--ease)}.menu-head{display:flex;gap:12px;align-items:center;padding:10px 10px 14px;border-bottom:1px solid var(--line);margin-bottom:6px}.menu-head b{display:block}.menu button{width:100%;display:flex;align-items:center;gap:10px;padding:10px;border-radius:10px;text-align:left;font-weight:500}.menu button:hover{background:var(--soft)}.menu button svg{color:var(--muted)}.role-chip{display:inline-block;margin-top:4px;padding:1px 8px;border-radius:999px;background:var(--brand-soft);color:var(--brand-deep);font-size:11px;font-weight:600}.hero{padding:36px 0 8px}.hero h1{font-size:28px;letter-spacing:-.02em}.hero p{margin-top:6px;font-size:15px;max-width:640px}.section{margin-top:28px}.section-head{display:flex;align-items:center;gap:10px;margin-bottom:14px}.section-head h2{display:flex;align-items:center;gap:8px;font-size:18px;letter-spacing:-.01em}.section-head h2 svg{color:var(--brand)}.section-head .star-icon{color:var(--star)}.count{padding:2px 9px;border-radius:999px;background:var(--soft);color:var(--muted);font-size:12px;font-weight:600}.banner{margin-top:24px;display:flex;align-items:center;gap:12px;padding:12px 16px;border-radius:14px;background:var(--brand-soft);color:var(--brand-deep);animation:fade .25s var(--ease)}.banner svg{flex:none}.banner span{flex:1}.app-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px}.fav-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:12px}.app-card{position:relative;display:flex;flex-direction:column;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);min-height:180px;transition:transform .2s var(--ease),box-shadow .2s var(--ease),border-color .2s;animation:fade .3s var(--ease) both}.app-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-lg);border-color:#bcd3ff}.app-card-link{flex:1;display:flex;flex-direction:column;gap:14px;padding:20px 20px 8px;border-radius:var(--radius) var(--radius) 0 0}.app-card-link:focus-visible{outline-offset:-2px}.app-card-body{min-width:0}.app-title{font-size:16px;font-weight:650;letter-spacing:-.01em;transition:color .15s}.app-card:hover .app-title{color:var(--brand)}.app-desc{margin-top:4px;color:var(--muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.app-card-actions{display:flex;align-items:center;justify-content:space-between;padding:8px 12px 12px 14px}.open-btn{display:inline-flex;align-items:center;gap:4px;padding:6px 10px;border-radius:9px;font-weight:600;font-size:13px;color:var(--muted);transition:background .15s,color .15s}.app-card:hover .open-btn{background:var(--brand-soft);color:var(--brand)}.app-card:hover .open-btn svg{transform:translate(1px,-1px)}.open-btn svg{transition:transform .15s var(--ease)}.fav-btn{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;color:#aab3c3;transition:color .15s,background .15s,transform .2s var(--ease)}.fav-btn:hover{background:#fff6e0;color:var(--star)}.fav-btn.on{color:var(--star)}.fav-btn.on svg{animation:pop .25s var(--ease)}.app-card.compact{flex-direction:row;align-items:center;min-height:0}.app-card.compact .app-card-link{flex-direction:row;align-items:center;gap:12px;padding:12px;border-radius:var(--radius) 0 0 var(--radius);min-width:0}.app-card.compact .app-title{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.app-card.compact .app-desc{-webkit-line-clamp:1;font-size:13px}.app-card.compact .app-card-actions{flex-direction:column;padding:8px 8px 8px 0;gap:2px}.app-card.compact .open-btn{padding:6px}.app-card.compact .open-btn{font-size:0;gap:0}.app-icon{display:block;flex:none;object-fit:contain;background:var(--soft);box-shadow:inset 0 0 0 1px #0000000a}.app-icon-fallback{display:grid;place-items:center;color:#fff;font-weight:700;letter-spacing:.02em}.skeleton{pointer-events:none;background:linear-gradient(90deg,var(--card) 0%,var(--soft) 50%,var(--card) 100%);background-size:200% 100%;animation:shimmer 1.2s linear infinite}.empty{text-align:center;padding:48px 24px;background:var(--card);border:1px dashed var(--line);border-radius:var(--radius);display:flex;flex-direction:column;align-items:center;gap:8px}.empty h3{font-size:17px}.empty p{max-width:420px}.empty .btn{margin-top:10px}.empty-icon{width:56px;height:56px;border-radius:16px;display:grid;place-items:center;background:var(--brand-soft);color:var(--brand);margin-bottom:6px}.empty.gate{margin-top:48px}.footer{text-align:center;padding:40px 0 28px}.toasts{position:fixed;left:50%;bottom:24px;transform:translate(-50%);display:flex;flex-direction:column;gap:8px;z-index:100;width:max-content;max-width:calc(100vw - 32px)}.toast{display:flex;align-items:center;gap:8px;padding:10px 16px;border-radius:12px;background:var(--ink);color:#fff;box-shadow:var(--shadow-lg);animation:rise .22s var(--ease);font-weight:500}.toast svg{color:#7ee2ad;flex:none}.toast.error{background:var(--red)}.toast.error svg{color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:#040c1c80;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);display:grid;place-items:center;padding:16px;animation:fade .15s;overflow-y:auto}.modal{position:relative;width:100%;max-width:440px;background:var(--card);border-radius:22px;box-shadow:var(--shadow-lg);padding:28px;animation:rise .22s var(--ease);outline:none}.modal h2{font-size:20px;letter-spacing:-.01em}.modal-close{position:absolute;top:14px;right:14px}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:22px}.confirm-modal p{margin-top:8px}.form-modal{max-width:820px}.login-form{display:flex;flex-direction:column;gap:14px}.login-form>p{margin-top:-6px}.login-badge{width:48px;height:48px;border-radius:14px;display:grid;place-items:center;background:var(--brand-soft);color:var(--brand)}.field{display:flex;flex-direction:column;gap:6px}.field>span{font-weight:600;font-size:13px}.field input,.field textarea,select,.input-icon input{width:100%;border:1px solid var(--line);background:#f9fbfd;border-radius:11px;padding:10px 12px;outline:none;transition:border-color .15s,background .15s,box-shadow .15s}.field textarea{resize:vertical;min-height:80px}.field input:focus,.field textarea:focus,select:focus,.input-icon input:focus{border-color:var(--brand);background:#fff;box-shadow:0 0 0 3px #2f7bff1f}.field.inline{flex-direction:row;align-items:center;gap:10px}.field.inline input{width:100px}.hint{color:var(--muted);font-size:12px}.form-error{color:var(--red);background:var(--red-soft);padding:9px 12px;border-radius:10px;font-size:13px;margin-top:12px}.login-form .form-error{margin-top:0}.check{display:inline-flex;align-items:center;gap:8px;cursor:pointer;font-weight:500}.check input{accent-color:var(--brand);width:16px;height:16px}.input-icon{position:relative;margin-top:8px}.input-icon svg{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--muted)}.input-icon input{padding-left:34px}.form-grid{display:grid;grid-template-columns:1fr 260px;gap:24px;margin-top:18px}.form-fields{display:flex;flex-direction:column;gap:16px;min-width:0}.dropzone{display:flex;align-items:center;gap:16px;padding:14px;border:1.5px dashed var(--line);border-radius:14px;background:#f9fbfd;transition:border-color .15s,background .15s}.dropzone.over{border-color:var(--brand);background:var(--brand-soft)}.dropzone .hint{display:block;margin-top:6px}.row.between{justify-content:space-between}.segmented button{display:inline-flex;align-items:center;gap:5px}.icon-builder{display:flex;align-items:flex-start;gap:16px;padding:14px;border:1px solid var(--line);border-radius:14px;background:#f9fbfd}.icon-builder .field{margin-bottom:10px}.sub-label,.field>.sub-label{display:block;font-size:12px;font-weight:600;color:var(--muted);margin-bottom:6px}.icon-text-input{max-width:120px;font-weight:700;letter-spacing:.04em}.swatches{display:grid;grid-template-columns:repeat(6,32px);gap:8px;margin-bottom:8px}.swatch{width:32px;height:32px;border-radius:9px;display:grid;place-items:center;color:#fff;box-shadow:inset 0 0 0 1px #040c1c14;transition:transform .15s var(--ease),box-shadow .15s}.swatch:hover{transform:scale(1.1)}.swatch.on{box-shadow:0 0 0 2px #fff,0 0 0 4px var(--brand)}.preview{display:flex;flex-direction:column;gap:10px}.preview-label{font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}.preview-card{animation:none;pointer-events:none}.admin{padding-top:28px;padding-bottom:40px}.admin-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:20px}.admin-head h1{font-size:26px;letter-spacing:-.02em}.tabs{display:flex;gap:4px;padding:4px;background:var(--card);border:1px solid var(--line);border-radius:12px}.tab{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border-radius:9px;font-weight:600;color:var(--muted);transition:background .15s,color .15s}.tab:hover{color:var(--ink)}.tab.active{background:var(--brand-soft);color:var(--brand-deep)}.toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:16px}.toolbar>.btn{margin-left:auto}.segmented{display:inline-flex;padding:3px;background:var(--card);border:1px solid var(--line);border-radius:11px}.segmented button{padding:6px 12px;border-radius:8px;font-weight:600;color:var(--muted);font-size:13px}.segmented button.on{background:var(--ink);color:#fff}.seg-count{opacity:.7;font-weight:500;margin-left:2px}.admin-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.admin-row{display:flex;align-items:center;gap:16px;padding:12px 16px;background:var(--card);border:1px solid var(--line);border-radius:14px;transition:box-shadow .15s,border-color .15s}.admin-row:hover{box-shadow:var(--shadow);border-color:#d5dde9}.admin-row.disabled .app-icon{filter:grayscale(1);opacity:.55}.admin-row-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.link-url{color:var(--muted);font-size:12.5px;max-width:100%;display:inline-flex;align-items:center;gap:4px}.link-url:hover{color:var(--brand)}.status{padding:1px 8px;border-radius:999px;font-size:11px;font-weight:600;flex:none}.status.on{background:var(--green-soft);color:var(--green)}.status.off{background:var(--soft);color:var(--muted)}.fav-count{display:inline-flex;align-items:center;gap:4px;color:var(--muted);font-weight:600;font-size:13px;min-width:44px}.fav-count svg{color:var(--star)}.row-actions{display:flex;gap:2px}.switch{position:relative;display:inline-block;width:40px;height:24px;flex:none;cursor:pointer}.switch input{opacity:0;width:0;height:0;position:absolute}.switch span{position:absolute;top:0;right:0;bottom:0;left:0;background:#cfd6e2;border-radius:999px;transition:background .2s}.switch span:after{content:"";position:absolute;left:3px;top:3px;width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:var(--shadow-sm);transition:transform .2s var(--ease)}.switch input:checked+span{background:var(--green)}.switch input:checked+span:after{transform:translate(16px)}.switch input:focus-visible+span{outline:2px solid var(--brand);outline-offset:2px}.table-wrap{background:var(--card);border:1px solid var(--line);border-radius:14px;overflow-x:auto}.table{width:100%;border-collapse:collapse;min-width:640px}.table th{text-align:left;font-size:12px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;padding:12px 16px;border-bottom:1px solid var(--line)}.table td{padding:12px 16px;border-bottom:1px solid var(--line);vertical-align:middle}.table tr:last-child td{border-bottom:0}.table .num{text-align:right}.table select{width:auto;min-width:140px;padding:7px 10px}.table select.inactive{color:var(--red)}.role-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px;margin-bottom:16px}.role-card{display:flex;flex-direction:column;gap:2px;padding:12px 14px;background:var(--card);border:1px solid var(--line);border-radius:12px}.pending-chip{display:inline-block;margin-top:4px;padding:1px 8px;border-radius:999px;background:#fff4d6;color:#8a5a00;font-size:11px;font-weight:600}.temp-password{display:flex;align-items:center;gap:10px;padding:12px 14px;border-radius:12px;background:var(--brand-soft);border:1px dashed var(--brand)}.temp-password code{flex:1;font-size:17px;font-weight:700;letter-spacing:.04em;color:var(--brand-deep);-webkit-user-select:all;user-select:all;word-break:break-all}@keyframes fade{0%{opacity:0}to{opacity:1}}@keyframes rise{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@keyframes pop{0%{transform:scale(.85)}60%{transform:scale(1.12)}to{transform:scale(1)}}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation:none!important;transition:none!important}}@media (max-width: 900px){.form-grid{grid-template-columns:1fr}.preview{display:none}}@media (max-width: 760px){.container{padding:0 16px}.topbar-inner{flex-wrap:wrap;padding:10px 16px;gap:10px 12px}.search{order:3;flex-basis:100%;max-width:none}.brand-divider,.profile-name,.admin-link span{display:none}.brand-logo{height:20px}.brand{gap:8px}.brand-name{font-size:13px}.brand-name svg{display:none}.admin-link{width:40px;padding:0}.profile-btn{padding-right:4px;gap:2px}.hero{padding-top:24px}.hero h1{font-size:22px}.app-grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,240px),1fr));gap:12px}.fav-grid{grid-template-columns:1fr}.admin-row{flex-wrap:wrap;gap:12px}.admin-row-main{flex-basis:calc(100% - 64px)}.fav-count{margin-left:60px}.toolbar>.btn{margin-left:0}.search-sm{max-width:none;flex-basis:100%}.modal{padding:22px 18px}}
