*{box-sizing:border-box;margin:0;padding:0}body{font-family:Segoe UI,system-ui,sans-serif;background:#f0f2f5;color:#1a1a2e;min-height:100vh}h1,h2,h3{font-weight:600}.btn{display:inline-flex;align-items:center;gap:6px;padding:10px 20px;border-radius:8px;border:none;cursor:pointer;font-size:.95rem;font-weight:500;transition:opacity .2s,transform .1s}.btn:active{transform:scale(.98)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:#3b5bdb;color:#fff}.btn-primary:hover:not(:disabled){background:#2f4ac9}.btn-danger{background:#e03131;color:#fff}.btn-success{background:#2f9e44;color:#fff}.btn-neutral{background:#e9ecef;color:#333}.card{background:#fff;border-radius:14px;box-shadow:0 2px 12px #00000014;padding:28px;margin-bottom:24px}.badge{display:inline-block;padding:3px 10px;border-radius:999px;font-size:.78rem;font-weight:600}.badge-green{background:#d3f9d8;color:#2f9e44}.badge-red{background:#ffe3e3;color:#c92a2a}.badge-gray{background:#e9ecef;color:#555}.badge-blue{background:#dbe4ff;color:#3b5bdb}.dropzone{border:2px dashed #adb5bd;border-radius:10px;padding:32px 20px;text-align:center;color:#666;cursor:pointer;transition:all .2s;background:#f8f9fa}.dropzone:hover,.dropzone.active{border-color:#3b5bdb;background:#edf2ff;color:#3b5bdb}.img-preview{display:block;max-height:200px;max-width:100%;margin-top:16px;border-radius:8px;border:1px solid #dee2e6;object-fit:contain}.sig-card{border:1px solid #e9ecef;border-radius:10px;padding:16px;margin-bottom:14px}.sig-card.error{border-color:#f03e3e;background:#fff5f5}.sig-card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;flex-wrap:wrap;gap:8px}.sig-table{width:100%;border-collapse:collapse;font-size:.88rem}.sig-table td{padding:5px 8px;vertical-align:top}.row-label{color:#888;white-space:nowrap;width:180px;font-weight:500}.img-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:20px}.img-label{font-size:.82rem;color:#888;margin-bottom:6px;font-weight:600;text-transform:uppercase;letter-spacing:.04em}.result-img{max-width:100%;border-radius:8px;border:1px solid #dee2e6;background:#f8f9fa}.generated-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:18px}.gen-item{display:flex;flex-direction:column}.options-row{display:flex;gap:18px;margin-top:18px;flex-wrap:wrap;align-items:flex-end}.option-label{display:flex;flex-direction:column;gap:6px;font-size:.88rem;color:#555;font-weight:500}.num-input{width:80px;padding:8px 10px;border:1px solid #ced4da;border-radius:8px;font-size:.95rem}.text-input{padding:8px 12px;border:1px solid #ced4da;border-radius:8px;font-size:.88rem;width:100%}.create-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px 20px;margin-top:4px}.create-field{display:flex;flex-direction:column;gap:5px}.create-field.span-2{grid-column:span 2}.create-label{font-size:.78rem;font-weight:600;color:#777;text-transform:uppercase;letter-spacing:.05em}.create-input{padding:8px 12px;border:1px solid #ced4da;border-radius:8px;font-size:.9rem;background:#fff;transition:border-color .15s}.create-input:focus{outline:none;border-color:#3b5bdb;box-shadow:0 0 0 3px #3b5bdb1f}.create-check{display:flex;align-items:center;font-size:.9rem;color:#333;cursor:pointer;padding-top:4px}.result-header{display:flex;justify-content:space-between;align-items:center;font-weight:600;color:#1a5c3a;font-size:1rem;flex-wrap:wrap;gap:8px}.result-box{border:1px solid #b2f2bb;background:#f4fdf6;border-radius:10px;padding:18px 20px}.error-box{background:#fff5f5;border:1px solid #f03e3e;border-radius:8px;padding:12px 16px;color:#c92a2a;font-size:.9rem}.btn-sm{padding:5px 12px!important;font-size:.82rem!important}@media(max-width:600px){.create-grid{grid-template-columns:1fr}.create-field.span-2{grid-column:span 1}}.panel-title{margin-bottom:16px}.panel-desc{color:#555;margin-bottom:20px;font-size:.9rem}.btn-row{margin-top:16px;display:flex;gap:10px}.btn-row-top{margin-top:10px}.card-error{border-left:4px solid #e03131}.card-error p{color:#c92a2a}.badge-row{display:flex;gap:6px}.error-pre{font-size:.75rem;margin-top:8px;white-space:pre-wrap}.mono{font-family:monospace;font-size:.78rem;word-break:break-all}.bbox-info{font-size:.85rem;color:#555;margin-bottom:12px}.action-row{margin-bottom:18px;display:flex;gap:10px;flex-wrap:wrap}.dl-row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.mt-16{margin-top:16px}.mt-24,.section-gap{margin-top:24px}.section-title-sm{margin-bottom:12px}.generate-btn{margin-top:20px;min-width:180px}.option-label-grow{flex:1}.download-link{margin-top:10px;display:inline-flex!important}.download-link-sm{margin-top:8px;display:inline-flex!important}.btn-secondary{background:#e9ecef;color:#333}.btn-secondary:hover:not(:disabled){background:#dee2e6}.hint-box{margin-top:14px;padding:10px 14px;background:#eef4ff;border:1px solid #b8d0f8;border-radius:8px;font-size:.85rem;color:#1a4a9e}.root-ca-box{margin-top:10px;padding:12px 16px;background:#fff9db;border:1px solid #ffd43b;border-radius:8px;font-size:.82rem;color:#7a4f00;line-height:1.5}.root-ca-box ol{margin:6px 0 0 18px;padding:0}.root-ca-box li{margin-bottom:4px}.stamp-preview{margin-top:14px;text-align:center}.stamp-preview-label{margin:0 0 8px;color:#555;font-size:.8rem;text-transform:uppercase;letter-spacing:.05em}.stamp-img{max-width:100%;border:1px solid #dee2e6;border-radius:8px;box-shadow:0 2px 12px #1e50a026}.app-wrapper{max-width:960px;margin:0 auto;padding:0 16px 60px}.app-header{background:linear-gradient(135deg,#1e3a8a,#3b5bdb);color:#fff;border-radius:0 0 18px 18px;padding:28px 32px;margin-bottom:28px}.header-content{display:flex;align-items:center;gap:18px}.header-icon{font-size:2.6rem}.app-header h1{font-size:1.5rem;margin-bottom:4px}.header-sub{font-size:.88rem;opacity:.85}.tab-bar{display:flex;gap:8px;margin-bottom:24px;flex-wrap:wrap}.tab-btn{padding:10px 20px;border-radius:10px;border:2px solid transparent;background:#fff;font-size:.92rem;font-weight:500;cursor:pointer;color:#444;box-shadow:0 1px 4px #00000014;transition:all .18s}.tab-btn:hover{border-color:#3b5bdb;color:#3b5bdb}.tab-btn.active{background:#3b5bdb;color:#fff;border-color:#3b5bdb;box-shadow:0 2px 10px #3b5bdb44}.app-main{animation:fadeIn .25s ease}@keyframes fadeIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
