1073 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			CSS
		
	
	
	
			
		
		
	
	
			1073 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			CSS
		
	
	
	
| /* Reset and Base Styles */
 | |
| * {
 | |
|     margin: 0;
 | |
|     padding: 0;
 | |
|     box-sizing: border-box;
 | |
| }
 | |
| 
 | |
| body {
 | |
|     font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
 | |
|     line-height: 1.5;
 | |
|     color: #111827;
 | |
|     background-color: #f9fafb;
 | |
| }
 | |
| 
 | |
| /* Utility Classes */
 | |
| .min-h-screen {
 | |
|     min-height: 100vh;
 | |
| }
 | |
| 
 | |
| .bg-gray-50 {
 | |
|     background-color: #f9fafb;
 | |
| }
 | |
| 
 | |
| .bg-green-700 {
 | |
|     background-color: #15803d;
 | |
| }
 | |
| 
 | |
| .bg-green-600 {
 | |
|     background-color: #16a34a;
 | |
| }
 | |
| 
 | |
| .bg-white {
 | |
|     background-color: #ffffff;
 | |
| }
 | |
| 
 | |
| .bg-gray-100 {
 | |
|     background-color: #f3f4f6;
 | |
| }
 | |
| 
 | |
| .bg-gray-200 {
 | |
|     background-color: #e5e7eb;
 | |
| }
 | |
| 
 | |
| .bg-gray-300 {
 | |
|     background-color: #d1d5db;
 | |
| }
 | |
| 
 | |
| .text-white {
 | |
|     color: #ffffff;
 | |
| }
 | |
| 
 | |
| .text-gray-500 {
 | |
|     color: #6b7280;
 | |
| }
 | |
| 
 | |
| .text-gray-600 {
 | |
|     color: #4b5563;
 | |
| }
 | |
| 
 | |
| .text-gray-700 {
 | |
|     color: #374151;
 | |
| }
 | |
| 
 | |
| .text-gray-900 {
 | |
|     color: #111827;
 | |
| }
 | |
| 
 | |
| .text-blue-500 {
 | |
|     color: #3b82f6;
 | |
| }
 | |
| 
 | |
| .text-green-600 {
 | |
|     color: #16a34a;
 | |
| }
 | |
| 
 | |
| .text-green-900 {
 | |
|     color: #14532d;
 | |
| }
 | |
| 
 | |
| .px-4 {
 | |
|     padding-left: 1rem;
 | |
|     padding-right: 1rem;
 | |
| }
 | |
| 
 | |
| .py-3 {
 | |
|     padding-top: 0.75rem;
 | |
|     padding-bottom: 0.75rem;
 | |
| }
 | |
| 
 | |
| .py-2 {
 | |
|     padding-top: 0.5rem;
 | |
|     padding-bottom: 0.5rem;
 | |
| }
 | |
| 
 | |
| .py-2\.5 {
 | |
|     padding-top: 0.625rem;
 | |
|     padding-bottom: 0.625rem;
 | |
| }
 | |
| 
 | |
| .py-4 {
 | |
|     padding-top: 1rem;
 | |
|     padding-bottom: 1rem;
 | |
| }
 | |
| 
 | |
| .py-6 {
 | |
|     padding-top: 1.5rem;
 | |
|     padding-bottom: 1.5rem;
 | |
| }
 | |
| 
 | |
| .px-3 {
 | |
|     padding-left: 0.75rem;
 | |
|     padding-right: 0.75rem;
 | |
| }
 | |
| 
 | |
| .px-6 {
 | |
|     padding-left: 1.5rem;
 | |
|     padding-right: 1.5rem;
 | |
| }
 | |
| 
 | |
| .p-2 {
 | |
|     padding: 0.5rem;
 | |
| }
 | |
| 
 | |
| .p-3 {
 | |
|     padding: 0.75rem;
 | |
| }
 | |
| 
 | |
| .p-6 {
 | |
|     padding: 1.5rem;
 | |
| }
 | |
| 
 | |
| .flex {
 | |
|     display: flex;
 | |
| }
 | |
| 
 | |
| .items-center {
 | |
|     align-items: center;
 | |
| }
 | |
| 
 | |
| .justify-between {
 | |
|     justify-content: space-between;
 | |
| }
 | |
| 
 | |
| .justify-center {
 | |
|     justify-content: center;
 | |
| }
 | |
| 
 | |
| .gap-2 {
 | |
|     gap: 0.5rem;
 | |
| }
 | |
| 
 | |
| .gap-3 {
 | |
|     gap: 0.75rem;
 | |
| }
 | |
| 
 | |
| .gap-4 {
 | |
|     gap: 1rem;
 | |
| }
 | |
| 
 | |
| .text-lg {
 | |
|     font-size: 1.125rem;
 | |
|     line-height: 1.75rem;
 | |
| }
 | |
| 
 | |
| .text-sm {
 | |
|     font-size: 0.875rem;
 | |
|     line-height: 1.25rem;
 | |
| }
 | |
| 
 | |
| .text-xs {
 | |
|     font-size: 0.75rem;
 | |
|     line-height: 1rem;
 | |
| }
 | |
| 
 | |
| .font-medium {
 | |
|     font-weight: 500;
 | |
| }
 | |
| 
 | |
| .h-4 {
 | |
|     height: 1rem;
 | |
| }
 | |
| 
 | |
| .w-4 {
 | |
|     width: 1rem;
 | |
| }
 | |
| 
 | |
| .h-3 {
 | |
|     height: 0.75rem;
 | |
| }
 | |
| 
 | |
| .w-3 {
 | |
|     width: 0.75rem;
 | |
| }
 | |
| 
 | |
| .h-8 {
 | |
|     height: 2rem;
 | |
| }
 | |
| 
 | |
| .w-8 {
 | |
|     width: 2rem;
 | |
| }
 | |
| 
 | |
| .h-16 {
 | |
|     height: 4rem;
 | |
| }
 | |
| 
 | |
| .w-9 {
 | |
|     width: 2.25rem;
 | |
| }
 | |
| 
 | |
| .h-4 {
 | |
|     height: 1rem;
 | |
| }
 | |
| 
 | |
| .w-4 {
 | |
|     width: 1rem;
 | |
| }
 | |
| 
 | |
| .after\:h-4::after {
 | |
|     height: 1rem;
 | |
| }
 | |
| 
 | |
| .after\:w-4::after {
 | |
|     width: 1rem;
 | |
| }
 | |
| 
 | |
| .peer-focus\:ring-2:focus ~ .peer-focus\:ring-2 {
 | |
|     box-shadow: 0 0 0 2px;
 | |
| }
 | |
| 
 | |
| .peer-focus\:ring-green-300:focus ~ .peer-focus\:ring-green-300 {
 | |
|     box-shadow: 0 0 0 2px rgba(134, 239, 172, 0.5);
 | |
| }
 | |
| 
 | |
| .w-16 {
 | |
|     width: 4rem;
 | |
| }
 | |
| 
 | |
| .bg-gray-100 {
 | |
|     background-color: #f3f4f6;
 | |
| }
 | |
| 
 | |
| .h-96 {
 | |
|     height: 24rem;
 | |
| }
 | |
| 
 | |
| .h-full {
 | |
|     height: 100%;
 | |
| }
 | |
| 
 | |
| .w-full {
 | |
|     width: 100%;
 | |
| }
 | |
| 
 | |
| .w-48 {
 | |
|     width: 12rem;
 | |
| }
 | |
| 
 | |
| .w-11 {
 | |
|     width: 2.75rem;
 | |
| }
 | |
| 
 | |
| .h-6 {
 | |
|     height: 1.5rem;
 | |
| }
 | |
| 
 | |
| .h-5 {
 | |
|     height: 1.25rem;
 | |
| }
 | |
| 
 | |
| .w-5 {
 | |
|     width: 1.25rem;
 | |
| }
 | |
| 
 | |
| .rounded-md {
 | |
|     border-radius: 0.375rem;
 | |
| }
 | |
| 
 | |
| .rounded-lg {
 | |
|     border-radius: 0.5rem;
 | |
| }
 | |
| 
 | |
| .rounded-full {
 | |
|     border-radius: 9999px;
 | |
| }
 | |
| 
 | |
| .border {
 | |
|     border-width: 1px;
 | |
| }
 | |
| 
 | |
| .border-r {
 | |
|     border-right-width: 1px;
 | |
| }
 | |
| 
 | |
| .border-b {
 | |
|     border-bottom-width: 1px;
 | |
| }
 | |
| 
 | |
| .border-l-2 {
 | |
|     border-left-width: 2px;
 | |
| }
 | |
| 
 | |
| .border-gray-200 {
 | |
|     border-color: #e5e7eb;
 | |
| }
 | |
| 
 | |
| .border-gray-100 {
 | |
|     border-color: #f3f4f6;
 | |
| }
 | |
| 
 | |
| .border-gray-300 {
 | |
|     border-color: #d1d5db;
 | |
| }
 | |
| 
 | |
| .border-green-500 {
 | |
|     border-color: #22c55e;
 | |
| }
 | |
| 
 | |
| .shadow-sm {
 | |
|     box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
 | |
| }
 | |
| 
 | |
| .cursor-pointer {
 | |
|     cursor: pointer;
 | |
| }
 | |
| 
 | |
| .select-none {
 | |
|     user-select: none;
 | |
| }
 | |
| 
 | |
| .space-y-1 > * + * {
 | |
|     margin-top: 0.25rem;
 | |
| }
 | |
| 
 | |
| .flex-1 {
 | |
|     flex: 1 1 0%;
 | |
| }
 | |
| 
 | |
| .transition-transform {
 | |
|     transition-property: transform;
 | |
|     transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
 | |
|     transition-duration: 150ms;
 | |
| }
 | |
| 
 | |
| .transition-colors {
 | |
|     transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
 | |
|     transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
 | |
|     transition-duration: 150ms;
 | |
| }
 | |
| 
 | |
| .rotate-180 {
 | |
|     transform: rotate(180deg);
 | |
| }
 | |
| 
 | |
| .ml-4 {
 | |
|     margin-left: 1rem;
 | |
| }
 | |
| 
 | |
| .mt-2 {
 | |
|     margin-top: 0.5rem;
 | |
| }
 | |
| 
 | |
| .mb-4 {
 | |
|     margin-bottom: 1rem;
 | |
| }
 | |
| 
 | |
| .mx-auto {
 | |
|     margin-left: auto;
 | |
|     margin-right: auto;
 | |
| }
 | |
| 
 | |
| .text-center {
 | |
|     text-align: center;
 | |
| }
 | |
| 
 | |
| .text-left {
 | |
|     text-align: left;
 | |
| }
 | |
| 
 | |
| .uppercase {
 | |
|     text-transform: uppercase;
 | |
| }
 | |
| 
 | |
| .tracking-wider {
 | |
|     letter-spacing: 0.05em;
 | |
| }
 | |
| 
 | |
| .whitespace-nowrap {
 | |
|     white-space: nowrap;
 | |
| }
 | |
| 
 | |
| .overflow-x-auto {
 | |
|     overflow-x: auto;
 | |
| }
 | |
| 
 | |
| .divide-y > * + * {
 | |
|     border-top-width: 1px;
 | |
| }
 | |
| 
 | |
| .divide-gray-200 > * + * {
 | |
|     border-color: #e5e7eb;
 | |
| }
 | |
| 
 | |
| .sr-only {
 | |
|     position: absolute;
 | |
|     width: 1px;
 | |
|     height: 1px;
 | |
|     padding: 0;
 | |
|     margin: -1px;
 | |
|     overflow: hidden;
 | |
|     clip: rect(0, 0, 0, 0);
 | |
|     white-space: nowrap;
 | |
|     border: 0;
 | |
| }
 | |
| 
 | |
| .peer:checked ~ .peer-checked\:bg-green-600 {
 | |
|     background-color: #16a34a;
 | |
| }
 | |
| 
 | |
| .peer-checked\:after\:translate-x-full {
 | |
|     content: '';
 | |
| }
 | |
| 
 | |
| .peer:checked ~ .peer-checked\:after\:translate-x-full::after {
 | |
|     transform: translateX(100%);
 | |
| }
 | |
| 
 | |
| .peer-checked\:after\:border-white::after {
 | |
|     border-color: #ffffff;
 | |
| }
 | |
| 
 | |
| .after\:content-\[\'\'\]::after {
 | |
|     content: '';
 | |
| }
 | |
| 
 | |
| .after\:absolute::after {
 | |
|     position: absolute;
 | |
| }
 | |
| 
 | |
| .after\:top-\[2px\]::after {
 | |
|     top: 2px;
 | |
| }
 | |
| 
 | |
| .after\:left-\[2px\]::after {
 | |
|     left: 2px;
 | |
| }
 | |
| 
 | |
| .after\:bg-white::after {
 | |
|     background-color: #ffffff;
 | |
| }
 | |
| 
 | |
| .after\:border-gray-300::after {
 | |
|     border-color: #d1d5db;
 | |
| }
 | |
| 
 | |
| .after\:border::after {
 | |
|     border-width: 1px;
 | |
| }
 | |
| 
 | |
| .after\:rounded-full::after {
 | |
|     border-radius: 9999px;
 | |
| }
 | |
| 
 | |
| .after\:h-5::after {
 | |
|     height: 1.25rem;
 | |
| }
 | |
| 
 | |
| .after\:w-5::after {
 | |
|     width: 1.25rem;
 | |
| }
 | |
| 
 | |
| .after\:transition-all::after {
 | |
|     transition-property: all;
 | |
|     transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
 | |
|     transition-duration: 150ms;
 | |
| }
 | |
| 
 | |
| .peer-focus\:outline-none:focus ~ .peer-focus\:outline-none {
 | |
|     outline: 2px solid transparent;
 | |
|     outline-offset: 2px;
 | |
| }
 | |
| 
 | |
| .peer-focus\:ring-4:focus ~ .peer-focus\:ring-4 {
 | |
|     box-shadow: 0 0 0 4px;
 | |
| }
 | |
| 
 | |
| .peer-focus\:ring-green-300:focus ~ .peer-focus\:ring-green-300 {
 | |
|     box-shadow: 0 0 0 4px rgba(134, 239, 172, 0.5);
 | |
| }
 | |
| 
 | |
| .min-h-\[calc\(100vh-60px\)\] {
 | |
|     min-height: calc(100vh - 60px);
 | |
| }
 | |
| 
 | |
| .relative {
 | |
|     position: relative;
 | |
| }
 | |
| 
 | |
| .inline-flex {
 | |
|     display: inline-flex;
 | |
| }
 | |
| 
 | |
| .absolute {
 | |
|     position: absolute;
 | |
| }
 | |
| 
 | |
| .top-\[2px\] {
 | |
|     top: 2px;
 | |
| }
 | |
| 
 | |
| .left-\[2px\] {
 | |
|     left: 2px;
 | |
| }
 | |
| 
 | |
| .hidden {
 | |
|     display: none;
 | |
| }
 | |
| 
 | |
| /* Hover Effects */
 | |
| .hover\:bg-gray-50:hover {
 | |
|     background-color: #f9fafb;
 | |
| }
 | |
| 
 | |
| .hover\:bg-gray-100:hover {
 | |
|     background-color: #f3f4f6;
 | |
| }
 | |
| 
 | |
| .bg-red-600 {
 | |
|     background-color: #dc2626;
 | |
| }
 | |
| 
 | |
| .hover\:bg-red-700:hover {
 | |
|     background-color: #b91c1c;
 | |
| }
 | |
| 
 | |
| .hover\:bg-green-700:hover {
 | |
|     background-color: #15803d;
 | |
| }
 | |
| 
 | |
| .hover\:text-green-900:hover {
 | |
|     color: #14532d;
 | |
| }
 | |
| 
 | |
| /* Focus Effects */
 | |
| .focus\:border-green-500:focus {
 | |
|     border-color: #22c55e;
 | |
| }
 | |
| 
 | |
| .focus\:outline-none:focus {
 | |
|     outline: 2px solid transparent;
 | |
|     outline-offset: 2px;
 | |
| }
 | |
| 
 | |
| /* Custom Toggle Switch Styles */
 | |
| .toggle-switch {
 | |
|     position: relative;
 | |
|     display: inline-block;
 | |
|     width: 44px;
 | |
|     height: 24px;
 | |
| }
 | |
| 
 | |
| .toggle-switch input {
 | |
|     opacity: 0;
 | |
|     width: 0;
 | |
|     height: 0;
 | |
| }
 | |
| 
 | |
| .toggle-slider {
 | |
|     position: absolute;
 | |
|     cursor: pointer;
 | |
|     top: 0;
 | |
|     left: 0;
 | |
|     right: 0;
 | |
|     bottom: 0;
 | |
|     background-color: #e5e7eb;
 | |
|     transition: .4s;
 | |
|     border-radius: 24px;
 | |
| }
 | |
| 
 | |
| .toggle-slider:before {
 | |
|     position: absolute;
 | |
|     content: "";
 | |
|     height: 20px;
 | |
|     width: 20px;
 | |
|     left: 2px;
 | |
|     top: 2px;
 | |
|     background-color: white;
 | |
|     transition: .4s;
 | |
|     border-radius: 50%;
 | |
|     border: 1px solid #d1d5db;
 | |
| }
 | |
| 
 | |
| input:checked + .toggle-slider {
 | |
|     background-color: #16a34a;
 | |
| }
 | |
| 
 | |
| input:focus + .toggle-slider {
 | |
|     box-shadow: 0 0 0 4px rgba(134, 239, 172, 0.3);
 | |
| }
 | |
| 
 | |
| input:checked + .toggle-slider:before {
 | |
|     transform: translateX(20px);
 | |
|     border-color: white;
 | |
| }
 | |
| 
 | |
| /* Table Styles */
 | |
| table {
 | |
|     border-collapse: collapse;
 | |
| }
 | |
| 
 | |
| thead th {
 | |
|     background-color: #f9fafb;
 | |
|     font-weight: 500;
 | |
|     text-transform: uppercase;
 | |
|     letter-spacing: 0.05em;
 | |
|     font-size: 0.75rem;
 | |
|     color: #6b7280;
 | |
|     padding: 0.75rem 1.5rem;
 | |
|     text-align: left;
 | |
| }
 | |
| 
 | |
| tbody td {
 | |
|     padding: 1rem 1.5rem;
 | |
|     border-top: 1px solid #e5e7eb;
 | |
|     font-size: 0.875rem;
 | |
| }
 | |
| 
 | |
| tbody tr:hover {
 | |
|     background-color: #f9fafb;
 | |
| }
 | |
| 
 | |
| /* Button Styles */
 | |
| button {
 | |
|     border: none;
 | |
|     background: none;
 | |
|     cursor: pointer;
 | |
|     font-family: inherit;
 | |
| }
 | |
| 
 | |
| /* Input Styles */
 | |
| input[type="text"] {
 | |
|     border: 1px solid #e5e7eb;
 | |
|     border-radius: 0.375rem;
 | |
|     padding: 0.5rem 0.75rem;
 | |
|     font-size: 0.875rem;
 | |
|     width: 100%;
 | |
|     transition: border-color 0.15s ease;
 | |
| }
 | |
| 
 | |
| input[type="text"]:focus {
 | |
|     outline: none;
 | |
|     border-color: #22c55e;
 | |
| }
 | |
| 
 | |
| /* Animation */
 | |
| @keyframes fadeIn {
 | |
|     from { opacity: 0; }
 | |
|     to { opacity: 1; }
 | |
| }
 | |
| 
 | |
| .fade-in {
 | |
|     animation: fadeIn 0.3s ease-in;
 | |
| }
 | |
| 
 | |
| /* 小开关样式 - 用于等级编辑页面 */
 | |
| .small-toggle input[type="checkbox"]:checked + div {
 | |
|     background-color: #16a34a !important;
 | |
| }
 | |
| 
 | |
| .small-toggle input[type="checkbox"]:checked + div:after {
 | |
|     transform: translateX(1rem) !important;
 | |
|     border-color: white !important;
 | |
| }
 | |
| 
 | |
| .small-toggle div {
 | |
|     background-color: #e5e7eb;
 | |
|     transition: all 0.3s ease;
 | |
| }
 | |
| 
 | |
| .small-toggle div:after {
 | |
|     content: '';
 | |
|     position: absolute;
 | |
|     top: 2px;
 | |
|     left: 2px;
 | |
|     background-color: white;
 | |
|     border: 1px solid #d1d5db;
 | |
|     border-radius: 50%;
 | |
|     height: 1rem;
 | |
|     width: 1rem;
 | |
|     transition: all 0.3s ease;
 | |
| }
 | |
| 
 | |
| /* Tab样式 */
 | |
| .tab-item {
 | |
|     border-bottom: 2px solid transparent;
 | |
|     transition: all 0.2s ease;
 | |
| }
 | |
| 
 | |
| .tab-item:hover {
 | |
|     color: #374151;
 | |
|     background-color: #f9fafb;
 | |
| }
 | |
| 
 | |
| .tab-item.active {
 | |
|     border-bottom-color: #22c55e;
 | |
|     color: #16a34a;
 | |
| }
 | |
| 
 | |
| /* 输入框样式 */
 | |
| input[type="number"] {
 | |
|     border: 1px solid #d1d5db;
 | |
|     border-radius: 0.25rem;
 | |
|     padding: 0.25rem 0.5rem;
 | |
|     font-size: 0.875rem;
 | |
|     line-height: 1.25rem;
 | |
|     transition: border-color 0.15s ease;
 | |
| }
 | |
| 
 | |
| input[type="number"]:focus {
 | |
|     outline: none;
 | |
|     border-color: #22c55e;
 | |
|     box-shadow: 0 0 0 1px #22c55e;
 | |
| }
 | |
| 
 | |
| input[type="number"]:disabled {
 | |
|     background-color: #f3f4f6;
 | |
|     color: #9ca3af;
 | |
|     cursor: not-allowed;
 | |
| }
 | |
| 
 | |
| /* 按钮样式 */
 | |
| .btn-green {
 | |
|     background-color: #16a34a;
 | |
|     color: white;
 | |
|     padding: 0.5rem 1rem;
 | |
|     border-radius: 0.375rem;
 | |
|     font-size: 0.875rem;
 | |
|     font-weight: 500;
 | |
|     transition: background-color 0.15s ease;
 | |
|     border: none;
 | |
|     cursor: pointer;
 | |
| }
 | |
| 
 | |
| .btn-green:hover {
 | |
|     background-color: #15803d;
 | |
| }
 | |
| 
 | |
| .btn-gray {
 | |
|     background-color: #6b7280;
 | |
|     color: white;
 | |
|     padding: 0.5rem 1rem;
 | |
|     border-radius: 0.375rem;
 | |
|     font-size: 0.875rem;
 | |
|     font-weight: 500;
 | |
|     transition: background-color 0.15s ease;
 | |
|     border: none;
 | |
|     cursor: pointer;
 | |
| }
 | |
| 
 | |
| .btn-gray:hover {
 | |
|     background-color: #4b5563;
 | |
| }
 | |
| @media (max-width: 768px) {
 | |
|     .w-48 {
 | |
|         width: 100%;
 | |
|     }
 | |
|     
 | |
|     .flex {
 | |
|         flex-direction: column;
 | |
|     }
 | |
|     
 | |
|     .min-h-\[calc\(100vh-60px\)\] {
 | |
|         min-height: auto;
 | |
|     }
 | |
| }
 | |
| 
 | |
| /* 弹窗样式 */
 | |
| .fixed {
 | |
|     position: fixed;
 | |
| }
 | |
| 
 | |
| .inset-0 {
 | |
|     top: 0;
 | |
|     right: 0;
 | |
|     bottom: 0;
 | |
|     left: 0;
 | |
| }
 | |
| 
 | |
| .bg-black {
 | |
|     background-color: #000000;
 | |
| }
 | |
| 
 | |
| .bg-opacity-50 {
 | |
|     background-color: rgba(0, 0, 0, 0.5);
 | |
| }
 | |
| 
 | |
| .z-50 {
 | |
|     z-index: 50;
 | |
| }
 | |
| 
 | |
| .w-96 {
 | |
|     width: 24rem;
 | |
| }
 | |
| 
 | |
| .max-w-md {
 | |
|     max-width: 28rem;
 | |
| }
 | |
| 
 | |
| .mx-4 {
 | |
|     margin-left: 1rem;
 | |
|     margin-right: 1rem;
 | |
| }
 | |
| 
 | |
| .space-y-4 > * + * {
 | |
|     margin-top: 1rem;
 | |
| }
 | |
| 
 | |
| .mb-1 {
 | |
|     margin-bottom: 0.25rem;
 | |
| }
 | |
| 
 | |
| .ml-2 {
 | |
|     margin-left: 0.5rem;
 | |
| }
 | |
| 
 | |
| .border-t-0 {
 | |
|     border-top-width: 0;
 | |
| }
 | |
| 
 | |
| .rounded-t {
 | |
|     border-top-left-radius: 0.25rem;
 | |
|     border-top-right-radius: 0.25rem;
 | |
| }
 | |
| 
 | |
| .rounded-b {
 | |
|     border-bottom-left-radius: 0.25rem;
 | |
|     border-bottom-right-radius: 0.25rem;
 | |
| }
 | |
| 
 | |
| .text-red-500 {
 | |
|     color: #ef4444;
 | |
| }
 | |
| 
 | |
| .bg-blue-600 {
 | |
|     background-color: #2563eb;
 | |
| }
 | |
| 
 | |
| .hover\:bg-blue-700:hover {
 | |
|     background-color: #1d4ed8;
 | |
| }
 | |
| 
 | |
| .hover\:bg-gray-200:hover {
 | |
|     background-color: #e5e7eb;
 | |
| }
 | |
| 
 | |
| .text-gray-400 {
 | |
|     color: #9ca3af;
 | |
| }
 | |
| 
 | |
| .hover\:text-gray-600:hover {
 | |
|     color: #4b5563;
 | |
| }
 | |
| 
 | |
| .focus\:ring-2:focus {
 | |
|     box-shadow: 0 0 0 2px;
 | |
| }
 | |
| 
 | |
| .focus\:ring-green-500:focus {
 | |
|     box-shadow: 0 0 0 2px rgba(34, 197, 94, 0.5);
 | |
| }
 | |
| 
 | |
| .focus\:border-green-500:focus {
 | |
|     border-color: #22c55e;
 | |
| }
 | |
| 
 | |
| /* 弹窗动画 */
 | |
| @keyframes modalFadeIn {
 | |
|     from {
 | |
|         opacity: 0;
 | |
|         transform: scale(0.95);
 | |
|     }
 | |
|     to {
 | |
|         opacity: 1;
 | |
|         transform: scale(1);
 | |
|     }
 | |
| }
 | |
| 
 | |
| .modal-content {
 | |
|     animation: modalFadeIn 0.2s ease-out;
 | |
| }
 | |
| 
 | |
| /* 数字输入框调节按钮 */
 | |
| .number-adjuster {
 | |
|     display: flex;
 | |
|     flex-direction: column;
 | |
| }
 | |
| 
 | |
| .number-adjuster button {
 | |
|     padding: 0.25rem 0.5rem;
 | |
|     font-size: 0.75rem;
 | |
|     line-height: 1rem;
 | |
|     background-color: #f3f4f6;
 | |
|     border: 1px solid #d1d5db;
 | |
|     transition: background-color 0.15s ease;
 | |
| }
 | |
| 
 | |
| .number-adjuster button:hover {
 | |
|     background-color: #e5e7eb;
 | |
| }
 | |
| 
 | |
| .number-adjuster button:first-child {
 | |
|     border-top-left-radius: 0.25rem;
 | |
|     border-top-right-radius: 0.25rem;
 | |
| }
 | |
| 
 | |
| .number-adjuster button:last-child {
 | |
|     border-bottom-left-radius: 0.25rem;
 | |
|     border-bottom-right-radius: 0.25rem;
 | |
|     border-top-width: 0;
 | |
| }
 | |
| 
 | |
| /* 网格布局 */
 | |
| .grid {
 | |
|     display: grid;
 | |
| }
 | |
| 
 | |
| .grid-cols-1 {
 | |
|     grid-template-columns: repeat(1, minmax(0, 1fr));
 | |
| }
 | |
| 
 | |
| .grid-cols-2 {
 | |
|     grid-template-columns: repeat(2, minmax(0, 1fr));
 | |
| }
 | |
| 
 | |
| .grid-cols-4 {
 | |
|     grid-template-columns: repeat(4, minmax(0, 1fr));
 | |
| }
 | |
| 
 | |
| @media (min-width: 768px) {
 | |
|     .md\:grid-cols-2 {
 | |
|         grid-template-columns: repeat(2, minmax(0, 1fr));
 | |
|     }
 | |
|     
 | |
|     .md\:grid-cols-4 {
 | |
|         grid-template-columns: repeat(4, minmax(0, 1fr));
 | |
|     }
 | |
| }
 | |
| 
 | |
| /* 间距工具 */
 | |
| .space-x-2 > * + * {
 | |
|     margin-left: 0.5rem;
 | |
| }
 | |
| 
 | |
| .space-x-4 > * + * {
 | |
|     margin-left: 1rem;
 | |
| }
 | |
| 
 | |
| /* 徽章样式 */
 | |
| .bg-blue-100 {
 | |
|     background-color: #dbeafe;
 | |
| }
 | |
| 
 | |
| .text-blue-800 {
 | |
|     color: #1e40af;
 | |
| }
 | |
| 
 | |
| .bg-purple-100 {
 | |
|     background-color: #ede9fe;
 | |
| }
 | |
| 
 | |
| .text-purple-800 {
 | |
|     color: #5b21b6;
 | |
| }
 | |
| 
 | |
| .bg-blue-50 {
 | |
|     background-color: #eff6ff;
 | |
| }
 | |
| 
 | |
| .text-blue-600 {
 | |
|     color: #2563eb;
 | |
| }
 | |
| 
 | |
| .text-blue-900 {
 | |
|     color: #1e3a8a;
 | |
| }
 | |
| 
 | |
| .border-blue-200 {
 | |
|     border-color: #bfdbfe;
 | |
| }
 | |
| 
 | |
| .bg-green-50 {
 | |
|     background-color: #f0fdf4;
 | |
| }
 | |
| 
 | |
| .border-green-200 {
 | |
|     border-color: #bbf7d0;
 | |
| }
 | |
| 
 | |
| .text-green-900 {
 | |
|     color: #14532d;
 | |
| }
 | |
| 
 | |
| .text-2xl {
 | |
|     font-size: 1.5rem;
 | |
|     line-height: 2rem;
 | |
| }
 | |
| 
 | |
| .font-bold {
 | |
|     font-weight: 700;
 | |
| }
 | |
| 
 | |
| .flex-shrink-0 {
 | |
|     flex-shrink: 0;
 | |
| }
 | |
| 
 | |
| .rounded-full {
 | |
|     border-radius: 9999px;
 | |
| }
 | |
| 
 | |
| .px-2\.5 {
 | |
|     padding-left: 0.625rem;
 | |
|     padding-right: 0.625rem;
 | |
| }
 | |
| 
 | |
| .py-0\.5 {
 | |
|     padding-top: 0.125rem;
 | |
|     padding-bottom: 0.125rem;
 | |
| }
 | |
| 
 | |
| .font-mono {
 | |
|     font-family: ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace;
 | |
| }
 | |
| 
 | |
| .inline-block {
 | |
|     display: inline-block;
 | |
| }
 | |
| 
 | |
| .ml-1 {
 | |
|     margin-left: 0.25rem;
 | |
| }
 | |
| 
 | |
| .w-12 {
 | |
|     width: 3rem;
 | |
| }
 | |
| 
 | |
| .text-center {
 | |
|     text-align: center;
 | |
| }
 | |
| 
 | |
| .sm\:px-6 {
 | |
|     padding-left: 1.5rem;
 | |
|     padding-right: 1.5rem;
 | |
| }
 | |
| 
 | |
| .border-t {
 | |
|     border-top-width: 1px;
 | |
| }
 | |
| 
 | |
| .overflow-hidden {
 | |
|     overflow: hidden;
 | |
| }
 | |
| 
 | |
| .shadow-sm {
 | |
|     box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
 | |
| }
 | |
| 
 | |
| .focus\:border-green-500:focus {
 | |
|     border-color: #22c55e;
 | |
| }
 | |
| 
 | |
| .focus\:ring-green-500:focus {
 | |
|     box-shadow: 0 0 0 1px #22c55e;
 | |
| } |