diff --git a/templates/index.html b/templates/index.html index e4fa1c8..ade758c 100644 --- a/templates/index.html +++ b/templates/index.html @@ -72,40 +72,88 @@ } .form-group { - margin-bottom: 15px; + margin-bottom: 20px; } .form-group label { - display: block; - margin-bottom: 5px; - font-weight: 500; - color: #555; + display: flex; + align-items: center; + gap: 6px; + margin-bottom: 8px; + font-weight: 600; + color: #2c3e50; + font-size: 14px; + } + + .form-group label .label-icon { + width: 20px; + height: 20px; + display: inline-flex; + align-items: center; + justify-content: center; + background: #eef2f7; + border-radius: 4px; + font-size: 12px; + } + + .form-group .form-hint { + font-size: 12px; + color: #999; + margin-top: 4px; + font-weight: 400; } .form-control { width: 100%; - padding: 8px 12px; - border: 1px solid #ddd; - border-radius: 4px; + padding: 10px 14px; + border: 1.5px solid #e1e8ed; + border-radius: 8px; font-size: 14px; + transition: all 0.2s; + background: #fafbfc; } .form-control:focus { outline: none; border-color: #3498db; + background: white; + box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1); } select { - background: white; + background: #fafbfc; + cursor: pointer; + } + + select[multiple] { + padding: 6px; + } + + select[multiple] option { + padding: 8px 12px; + border-radius: 4px; + margin-bottom: 2px; + cursor: pointer; + transition: background 0.15s; + } + + select[multiple] option:hover { + background: #eef2f7; + } + + select[multiple] option:checked { + background: #3498db; + color: white; } .btn { - padding: 8px 16px; + padding: 8px 20px; border: none; - border-radius: 4px; + border-radius: 8px; cursor: pointer; font-size: 14px; - transition: all 0.3s; + font-weight: 500; + transition: all 0.2s; } .btn-primary { @@ -144,6 +192,17 @@ background: #d35400; } + .btn-secondary { + background: #eef2f7; + color: #555; + border: 1px solid #e1e8ed; + } + + .btn-secondary:hover { + background: #dde4ed; + color: #333; + } + .btn-sm { padding: 4px 8px; font-size: 12px; @@ -171,21 +230,69 @@ } .checkbox-group { - display: flex; - flex-wrap: wrap; - gap: 10px; - max-height: 300px; + display: grid; + grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); + gap: 6px; + max-height: 240px; overflow-y: auto; - padding: 10px; - border: 1px solid #ddd; - border-radius: 4px; + padding: 12px; + border: 1.5px solid #e1e8ed; + border-radius: 8px; + background: #fafbfc; + } + + .checkbox-group::-webkit-scrollbar { + width: 6px; + } + + .checkbox-group::-webkit-scrollbar-track { + background: transparent; + } + + .checkbox-group::-webkit-scrollbar-thumb { + background: #ccc; + border-radius: 3px; + } + + .checkbox-group::-webkit-scrollbar-thumb:hover { + background: #aaa; } .checkbox-item { display: flex; align-items: center; - gap: 5px; - min-width: 200px; + gap: 8px; + padding: 6px 10px; + border-radius: 6px; + cursor: pointer; + transition: all 0.15s; + user-select: none; + } + + .checkbox-item:hover { + background: #eef2f7; + } + + .checkbox-item.checked { + background: #e8f4fd; + border: 1px solid #bee5eb; + } + + .checkbox-item input[type="checkbox"] { + width: 16px; + height: 16px; + accent-color: #3498db; + cursor: pointer; + flex-shrink: 0; + } + + .checkbox-item label { + font-size: 13px; + color: #444; + cursor: pointer; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } .status-badge { @@ -254,50 +361,172 @@ left: 0; width: 100%; height: 100%; - background: rgba(0,0,0,0.5); + background: rgba(0,0,0,0.4); z-index: 1000; + backdrop-filter: blur(2px); } .modal.active { display: flex; align-items: center; justify-content: center; + animation: fadeIn 0.2s ease; + } + + @keyframes fadeIn { + from { opacity: 0; } + to { opacity: 1; } } .modal-content { background: white; - border-radius: 8px; - padding: 30px; - max-width: 800px; - width: 90%; + border-radius: 16px; + padding: 0; + max-width: 860px; + width: 92%; max-height: 90vh; overflow-y: auto; + box-shadow: 0 20px 60px rgba(0,0,0,0.15); + animation: slideUp 0.25s ease; + } + + @keyframes slideUp { + from { transform: translateY(20px); opacity: 0; } + to { transform: translateY(0); opacity: 1; } + } + + .modal-content::-webkit-scrollbar { + width: 6px; + } + + .modal-content::-webkit-scrollbar-track { + background: transparent; + } + + .modal-content::-webkit-scrollbar-thumb { + background: #ddd; + border-radius: 3px; } .modal-header { display: flex; justify-content: space-between; align-items: center; - margin-bottom: 20px; + padding: 20px 28px; + border-bottom: 1px solid #eef2f7; + background: linear-gradient(135deg, #f8fafc 0%, #eef2f7 100%); + border-radius: 16px 16px 0 0; + position: sticky; + top: 0; + z-index: 10; } .modal-title { - font-size: 20px; - font-weight: 600; + font-size: 18px; + font-weight: 700; + color: #2c3e50; + display: flex; + align-items: center; + gap: 8px; + } + + .modal-title::before { + content: ''; + display: inline-block; + width: 4px; + height: 20px; + background: #3498db; + border-radius: 2px; } .close-btn { background: none; border: none; - font-size: 24px; + font-size: 22px; cursor: pointer; color: #999; + width: 32px; + height: 32px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 8px; + transition: all 0.2s; } .close-btn:hover { + background: #eef2f7; color: #333; } + .modal-body { + padding: 24px 28px; + } + + .modal-footer { + display: flex; + gap: 10px; + justify-content: flex-end; + padding: 16px 28px; + border-top: 1px solid #eef2f7; + background: #fafbfc; + border-radius: 0 0 16px 16px; + } + + .form-section { + margin-bottom: 24px; + padding-bottom: 20px; + border-bottom: 1px dashed #eef2f7; + } + + .form-section:last-child { + border-bottom: none; + margin-bottom: 0; + padding-bottom: 0; + } + + .form-section-title { + font-size: 13px; + font-weight: 600; + color: #3498db; + text-transform: uppercase; + letter-spacing: 0.5px; + margin-bottom: 14px; + display: flex; + align-items: center; + gap: 8px; + } + + .form-section-title .section-num { + width: 22px; + height: 22px; + display: inline-flex; + align-items: center; + justify-content: center; + background: #3498db; + color: white; + border-radius: 50%; + font-size: 12px; + font-weight: 700; + } + + .entity-select-wrapper { + position: relative; + } + + .entity-select-wrapper .selected-count { + position: absolute; + top: -8px; + right: 12px; + background: #3498db; + color: white; + font-size: 11px; + padding: 2px 8px; + border-radius: 10px; + font-weight: 600; + z-index: 1; + } + .pagination { display: flex; justify-content: center; @@ -455,53 +684,70 @@ -