:root{--blue:#2563eb;--dark:#172033;--muted:#667085;--line:#e5e7eb;--bg:#f5f7fb;--red:#dc2626;--green:#059669}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--dark);font:15px/1.55 -apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC",sans-serif}a{color:var(--blue);text-decoration:none}.top{height:64px;padding:0 max(20px,calc((100% - 1160px)/2));display:flex;align-items:center;justify-content:space-between;background:#fff;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:5}.brand-mini,.brand{display:flex;align-items:center;gap:10px;color:var(--dark);font-weight:700}.logo{display:inline-grid;place-items:center;width:34px;height:34px;background:var(--blue);color:white;border-radius:9px;font-size:21px}.top nav{display:flex;align-items:center;gap:20px}.top nav form{display:inline}.container{max-width:1160px;margin:32px auto;padding:0 20px}.page-head,.section-head,.scan-head{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:22px}h1{font-size:28px;margin:0 0 5px}h2{font-size:20px}h3{margin:9px 0}p{margin:5px 0 12px}.muted,small,.page-head p{color:var(--muted)}.btn{display:inline-flex;justify-content:center;align-items:center;min-height:40px;padding:8px 15px;border:1px solid #d0d5dd;border-radius:9px;background:#fff;color:var(--dark);font:inherit;cursor:pointer}.btn.primary{background:var(--blue);border-color:var(--blue);color:#fff}.btn.danger{border-color:#fecaca;color:var(--red)}.btn.big{min-height:50px;font-weight:700}.block{width:100%}.link{border:0;background:none;color:var(--blue);cursor:pointer;font:inherit;padding:0}.danger-text{color:var(--red)}.stats{display:grid;grid-template-columns:repeat(2,1fr);gap:18px;margin:25px 0}.stats.three{grid-template-columns:repeat(3,1fr)}.stats article,.panel,.project-card,.auth-card,.scanner{background:#fff;border:1px solid var(--line);border-radius:14px;padding:22px;box-shadow:0 4px 18px #1018280a}.stats strong{display:block;font-size:32px;margin-top:5px}.cards{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.project-card{display:flex;flex-direction:column;justify-content:space-between;min-height:230px}.project-card p{color:var(--muted)}.project-meta{border-top:1px solid var(--line);padding:12px 0}.actions{display:flex;gap:9px;flex-wrap:wrap}.tag{display:inline-block;border-radius:20px;padding:3px 9px;font-size:12px;background:#eef2ff;color:#4338ca}.tag.active{background:#ecfdf3;color:#027a48}.tag.archived{background:#f2f4f7;color:#667085}.panel{margin-bottom:20px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.full{grid-column:1/-1}label{display:block;font-weight:600}input,select,textarea{width:100%;padding:11px 12px;border:1px solid #d0d5dd;border-radius:8px;background:#fff;font:inherit;margin-top:5px}textarea{resize:vertical}.list{display:grid;gap:12px}.list article{background:#fff;padding:18px;border:1px solid var(--line);border-radius:12px;display:flex;justify-content:space-between;align-items:center}.auth-card{max-width:430px;margin:8vh auto}.auth-card label{margin:14px 0}.alert{padding:12px 15px;border-radius:9px;margin:12px 0}.alert.error,.feedback.error{background:#fef2f2;color:#b42318}.alert.success,.feedback.success{background:#ecfdf3;color:#027a48}.feedback.warning{background:#fffaeb;color:#b54708}.feedback.pending{background:#eff8ff;color:#175cd3}.scanner{max-width:760px;margin:0 auto 22px}.scan-head{max-width:760px;margin-left:auto;margin-right:auto}.counter{text-align:center}.counter strong{display:block;font-size:30px}.counter span{font-size:12px;color:var(--muted)}#camera{background:#101828;aspect-ratio:4/3;max-height:55vh;border-radius:13px;overflow:hidden;position:relative;display:grid;place-items:center;color:#fff}#video{width:100%;height:100%;object-fit:cover}.scan-frame{position:absolute;width:70%;height:45%;border:2px solid #60a5fa;border-radius:14px;box-shadow:0 0 0 999px #0005}#camera-tip{position:absolute;z-index:2}.scan-actions{display:flex;gap:10px;margin:12px 0}.manual{display:flex;gap:9px}.manual input{margin:0}.feedback{margin-top:12px;padding:13px;text-align:center;border-radius:9px;background:#f2f4f7}.recent>div{display:flex;justify-content:space-between;gap:15px;padding:10px 0;border-bottom:1px solid var(--line)}code{word-break:break-all}.filters{display:grid;grid-template-columns:2fr 1fr 1fr 1fr auto;gap:9px;margin-bottom:15px}.filters input,.filters select{margin:0}.table-wrap{overflow:auto;background:#fff;border:1px solid var(--line);border-radius:12px}table{width:100%;border-collapse:collapse;min-width:700px}th,td{text-align:left;padding:13px;border-bottom:1px solid var(--line);vertical-align:middle}th{background:#f9fafb;font-size:13px}.inline-form{display:flex;gap:5px;align-items:center}.inline-form input{min-width:150px;margin:0}.pagination{display:flex;gap:5px;margin-top:15px;flex-wrap:wrap}.pagination a{padding:7px 11px;background:#fff;border:1px solid var(--line);border-radius:7px}.pagination a.active{background:var(--blue);color:#fff}.empty{text-align:center;padding:35px;color:var(--muted)}.install{display:grid;place-items:center;min-height:100vh;padding:20px}.install-card{width:min(680px,100%);background:#fff;padding:30px;border-radius:16px;box-shadow:0 15px 50px #10182818}.brand h1{font-size:22px}.brand p{color:var(--muted);font-weight:400}.steps{display:flex;justify-content:space-between;margin:28px 0;padding:12px;background:#f2f4f7;border-radius:10px;color:#98a2b3}.steps .on{color:var(--blue)}.check-list{border:1px solid var(--line);border-radius:10px;margin-bottom:18px}.check-list div{display:flex;justify-content:space-between;padding:12px;border-bottom:1px solid var(--line)}.check-list div:last-child{border:0}.ok{color:var(--green)}.bad{color:var(--red)}@media(max-width:760px){.top{height:auto;min-height:58px;padding:10px 15px}.brand-mini{font-size:0}.top nav{gap:12px;font-size:13px}.container{margin:20px auto;padding:0 14px}.page-head{align-items:flex-start;flex-direction:column}.cards{grid-template-columns:1fr}.stats.three{grid-template-columns:1fr 1fr 1fr}.form-grid{grid-template-columns:1fr}.full{grid-column:auto}.list article{align-items:flex-start;flex-direction:column;gap:10px}.filters{grid-template-columns:1fr 1fr}.filters input:first-of-type{grid-column:1/-1}.scan-head h1{font-size:20px}.recent>div{flex-direction:column;gap:2px}.steps{font-size:12px}.install-card{padding:20px}}

