body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}*{box-sizing:border-box;margin:0;padding:0}body{background-color:#f5f5f5;color:#333;font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif}.App{min-height:100vh}.loading{gap:1rem}.login-container{align-items:center;background:linear-gradient(135deg,#667eea,#764ba2);display:flex;justify-content:center;min-height:100vh;padding:2rem}.login-form{background:#fff;border-radius:10px;box-shadow:0 10px 30px #0003;max-width:500px;padding:3rem;width:100%}.login-form h2{color:#333;font-size:1.8rem;margin-bottom:2rem;text-align:center}.form-group{margin-bottom:1.5rem}.form-group label{color:#555;display:block;font-weight:600;margin-bottom:.5rem}.form-group input{border:2px solid #ddd;border-radius:5px;font-size:1rem;padding:.75rem;transition:border-color .3s;width:100%}.form-group input:focus{border-color:#007bff;outline:none}.form-group small{color:#666;display:block;font-size:.85rem;margin-top:.25rem}button{background:#007bff;border:none;border-radius:5px;color:#fff;cursor:pointer;font-size:1rem;font-weight:600;padding:.75rem;transition:background-color .3s;width:100%}button:hover:not(:disabled){background:#0056b3}button:disabled{background:#6c757d;cursor:not-allowed}.error-message{border-radius:5px;margin-bottom:1rem;padding:.75rem}.login-info{border-top:1px solid #eee;margin-top:2rem;padding-top:1.5rem}.login-info h4{color:#333;margin-bottom:1rem}.login-info ul{color:#666;margin-left:1.5rem}.dashboard{background:#f8f9fa;min-height:100vh}.dashboard-header{align-items:center;background:#fff;box-shadow:0 2px 4px #0000001a;display:flex;justify-content:space-between;padding:1rem 2rem}.dashboard-header h1{color:#333;font-size:1.5rem}.logout-btn{background:#dc3545;padding:.5rem 1rem;width:auto}.logout-btn:hover{background:#c82333}.user-info{background:#fff;border-radius:10px;box-shadow:0 2px 10px #0000001a;margin:2rem;padding:2rem}.user-info h2{color:#333;margin-bottom:1rem}.certificate-info{grid-gap:1rem;display:grid;gap:1rem;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));margin-top:1rem}.certificate-info p{margin:.5rem 0}.protected-content{background:#fff;border-radius:10px;box-shadow:0 2px 10px #0000001a;margin:2rem;padding:2rem}.actions{background:#f8f9fa;border:2px dashed #dee2e6;border-radius:8px;margin:2rem 0;padding:1.5rem}.actions h4{color:#333;margin-bottom:1rem}.actions input{margin-bottom:1rem;padding:.5rem}.actions button{padding:.75rem 1.5rem;width:auto}.dashboard-data{border-top:1px solid #eee;margin-top:2rem;padding-top:1.5rem}@media (max-width:768px){.login-form{margin:1rem;padding:2rem}.dashboard-header{flex-direction:column;gap:1rem;text-align:center}.protected-content,.user-info{margin:1rem}.certificate-info{grid-template-columns:1fr}}.unified-login-container{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;margin:40px auto;max-width:800px;padding:20px}.login-header{margin-bottom:30px;text-align:center}.login-header h1{color:#2c3e50;font-size:2.5rem;margin-bottom:10px}.login-header p{color:#7f8c8d;font-size:1.1rem}.login-tabs{background:#f8f9fa;border-bottom:1px solid #ddd;border-radius:10px 10px 0 0;display:flex;margin-bottom:0;overflow:hidden}.login-tabs button{background:#0000;border:none;border-bottom:3px solid #0000;color:#6c757d;cursor:pointer;flex:1 1;font-size:16px;font-weight:500;padding:18px 20px;transition:all .3s ease}.login-tabs button.active{background:#fff;border-bottom:3px solid #007bff;color:#007bff;font-weight:600}.login-tabs button:hover:not(.active){background:#e9ecef;color:#495057}.login-content{background:#fff;border:1px solid #e9ecef;border-radius:0 0 10px 10px;border-top:none;box-shadow:0 4px 20px #0000001a;padding:40px}.error-message{background:#f8d7da;border:1px solid #f5c6cb;border-radius:8px;color:#721c24;line-height:1.5;margin-bottom:25px;padding:15px 20px;white-space:pre-line}.ssl-login-form h3,.upload-login-form h3{color:#2c3e50;font-size:1.5rem;margin-bottom:8px}.ssl-login-form>p,.upload-login-form>p{color:#7f8c8d;font-size:1rem;margin-bottom:25px}.ssl-instructions{background:linear-gradient(135deg,#f8fff8,#f0fff0);border:1px solid #d4edda;border-radius:10px;margin:25px 0;padding:25px}.ssl-instructions h4{color:#155724;font-size:1.2rem;margin-bottom:15px;margin-top:0}.ssl-instructions ul{margin:0;padding-left:20px}.ssl-instructions li{color:#155724;line-height:1.5;margin:10px 0}.ssl-actions{display:flex;flex-wrap:wrap;gap:15px;margin:30px 0}.ssl-login-btn{background:linear-gradient(135deg,#28a745,#20c997);border:none;border-radius:10px;box-shadow:0 4px 15px #28a7454d;color:#fff;cursor:pointer;flex:2 1;font-size:16px;font-weight:600;min-width:300px;padding:18px 30px;transition:all .3s ease}.ssl-login-btn:hover:not(:disabled){box-shadow:0 6px 20px #28a74566;transform:translateY(-2px)}.ssl-login-btn:disabled{background:#6c757d;box-shadow:none;cursor:not-allowed;transform:none}.ssl-test-btn{background:linear-gradient(135deg,#6c757d,#5a6268);border:none;border-radius:10px;color:#fff;cursor:pointer;flex:1 1;font-size:14px;font-weight:500;min-width:180px;padding:18px 25px;transition:all .3s ease}.ssl-test-btn:hover{box-shadow:0 4px 15px #6c757d4d;transform:translateY(-2px)}.browser-config{border-top:2px dashed #e9ecef;margin-top:30px;padding-top:25px}.browser-config h4{color:#2c3e50;font-size:1.2rem;margin-bottom:20px}.browser-config-item{background:#f8f9fa;border-left:4px solid #007bff;border-radius:8px;margin:20px 0;padding:20px}.browser-config-item strong{color:#007bff;display:block;font-size:1.1rem;margin-bottom:12px}.browser-config-item ul{color:#495057;margin:8px 0;padding-left:20px}.browser-config-item li{line-height:1.5;margin:8px 0}.browser-config-item code{background:#e9ecef;border-radius:4px;color:#e83e8c;font-family:Courier New,monospace;font-size:13px;font-weight:700;padding:4px 8px}.ssl-tips,.upload-tips{background:#e3f2fd;border-left:4px solid #2196f3;border-radius:8px;margin-top:25px;padding:20px}.ssl-tips h4,.upload-tips h4{color:#1565c0;font-size:1.1rem;margin-bottom:12px}.ssl-tips ul,.upload-tips ul{color:#1976d2;margin:0;padding-left:20px}.ssl-tips li,.upload-tips li{line-height:1.5;margin:8px 0}.upload-login-form .form-group{margin-bottom:25px}.upload-login-form label{color:#2c3e50;display:block;font-size:1rem;font-weight:600;margin-bottom:10px}.upload-login-form input[type=file],.upload-login-form input[type=password]{border:2px solid #e9ecef;border-radius:8px;box-sizing:border-box;font-size:16px;padding:15px;transition:border-color .3s ease;width:100%}.upload-login-form input[type=file]{padding:12px}.upload-login-form input[type=file]:focus,.upload-login-form input[type=password]:focus{border-color:#007bff;box-shadow:0 0 0 3px #007bff1a;outline:none}.upload-login-form small{color:#6c757d;display:block;font-size:13px;margin-top:8px}.upload-login-form button{background:linear-gradient(135deg,#007bff,#0056b3);border:none;border-radius:10px;box-shadow:0 4px 15px #007bff4d;color:#fff;cursor:pointer;font-size:16px;font-weight:600;margin-top:10px;padding:18px;transition:all .3s ease;width:100%}.upload-login-form button:hover:not(:disabled){box-shadow:0 6px 20px #007bff66;transform:translateY(-2px)}.upload-login-form button:disabled{background:#6c757d;box-shadow:none;cursor:not-allowed;transform:none}@media (max-width:768px){.unified-login-container{margin:20px;padding:10px}.login-tabs{flex-direction:column}.login-tabs button{padding:15px}.login-content{padding:25px 20px}.ssl-actions{flex-direction:column}.ssl-login-btn,.ssl-test-btn{flex:none;min-width:100%}.ssl-login-btn{min-width:100%}}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.login-content{animation:fadeIn .5s ease-out}.loading{align-items:center;background:#f8f9fa;display:flex;flex-direction:column;height:100vh;justify-content:center}.spinner{animation:spin 1s linear infinite;border:4px solid #f3f3f3;border-radius:50%;border-top-color:#007bff;height:50px;margin-bottom:20px;width:50px}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}