|
@@ -4,18 +4,39 @@
|
|
|
justify-content: space-between;
|
|
|
align-items: flex-start;
|
|
|
margin-bottom: 24px;
|
|
|
+ padding: 24px;
|
|
|
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
|
+ border-radius: 12px;
|
|
|
+ position: relative;
|
|
|
+ overflow: hidden;
|
|
|
+
|
|
|
+ // 背景装饰
|
|
|
+ &::before {
|
|
|
+ content: '';
|
|
|
+ position: absolute;
|
|
|
+ top: -50%;
|
|
|
+ right: -10%;
|
|
|
+ width: 300px;
|
|
|
+ height: 300px;
|
|
|
+ background: radial-gradient(circle, rgba(255, 255, 255, 0.15) 0%, transparent 70%);
|
|
|
+ border-radius: 50%;
|
|
|
+ }
|
|
|
|
|
|
.header-left {
|
|
|
+ position: relative;
|
|
|
+ z-index: 1;
|
|
|
+
|
|
|
h4 {
|
|
|
- font-size: 16px;
|
|
|
- font-weight: 600;
|
|
|
- color: #1a1a1a;
|
|
|
- margin: 0 0 4px 0;
|
|
|
+ font-size: 22px;
|
|
|
+ font-weight: 700;
|
|
|
+ color: #ffffff;
|
|
|
+ margin: 0 0 8px 0;
|
|
|
+ text-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
|
|
|
}
|
|
|
|
|
|
p {
|
|
|
- font-size: 13px;
|
|
|
- color: #666;
|
|
|
+ font-size: 14px;
|
|
|
+ color: rgba(255, 255, 255, 0.9);
|
|
|
margin: 0;
|
|
|
}
|
|
|
}
|
|
@@ -23,26 +44,32 @@
|
|
|
.header-actions {
|
|
|
display: flex;
|
|
|
gap: 12px;
|
|
|
+ position: relative;
|
|
|
+ z-index: 1;
|
|
|
|
|
|
.btn {
|
|
|
- padding: 8px 16px;
|
|
|
+ padding: 10px 18px;
|
|
|
font-size: 13px;
|
|
|
- border-radius: 6px;
|
|
|
+ border-radius: 8px;
|
|
|
border: none;
|
|
|
cursor: pointer;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
- gap: 6px;
|
|
|
- transition: all 0.2s ease;
|
|
|
+ gap: 8px;
|
|
|
+ transition: all 0.3s ease;
|
|
|
+ font-weight: 500;
|
|
|
|
|
|
&.btn-secondary {
|
|
|
- background: #f8fafc;
|
|
|
- color: #475569;
|
|
|
- border: 1px solid #e2e8f0;
|
|
|
+ background: rgba(255, 255, 255, 0.25);
|
|
|
+ color: #ffffff;
|
|
|
+ border: 1px solid rgba(255, 255, 255, 0.3);
|
|
|
+ backdrop-filter: blur(10px);
|
|
|
|
|
|
&:hover {
|
|
|
- background: #f1f5f9;
|
|
|
- border-color: #cbd5e1;
|
|
|
+ background: rgba(255, 255, 255, 0.35);
|
|
|
+ border-color: rgba(255, 255, 255, 0.5);
|
|
|
+ transform: translateY(-2px);
|
|
|
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -52,76 +79,109 @@
|
|
|
|
|
|
.calendar-filters {
|
|
|
display: flex;
|
|
|
- gap: 20px;
|
|
|
+ gap: 16px;
|
|
|
align-items: flex-end;
|
|
|
margin-bottom: 24px;
|
|
|
- padding: 20px;
|
|
|
- background: #f8fafc;
|
|
|
- border-radius: 8px;
|
|
|
- border: 1px solid #e2e8f0;
|
|
|
+ padding: 24px;
|
|
|
+ background: linear-gradient(135deg, #f8fafc 0%, #ffffff 100%);
|
|
|
+ border-radius: 12px;
|
|
|
+ border: 2px solid #e2e8f0;
|
|
|
flex-wrap: wrap;
|
|
|
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
|
|
|
|
|
|
.filter-group {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
- gap: 6px;
|
|
|
+ gap: 8px;
|
|
|
|
|
|
.filter-label {
|
|
|
font-size: 13px;
|
|
|
- font-weight: 500;
|
|
|
- color: #374151;
|
|
|
+ font-weight: 600;
|
|
|
+ color: #1e293b;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 6px;
|
|
|
}
|
|
|
|
|
|
- .filter-select {
|
|
|
- padding: 8px 12px;
|
|
|
- border: 1px solid #d1d5db;
|
|
|
- border-radius: 6px;
|
|
|
+ .filter-select, .filter-input {
|
|
|
+ padding: 10px 16px;
|
|
|
+ border: 2px solid #e2e8f0;
|
|
|
+ border-radius: 8px;
|
|
|
font-size: 14px;
|
|
|
background: #ffffff;
|
|
|
- min-width: 200px;
|
|
|
- transition: all 0.2s ease;
|
|
|
+ min-width: 180px;
|
|
|
+ transition: all 0.3s ease;
|
|
|
+ font-weight: 500;
|
|
|
+ color: #1e293b;
|
|
|
+
|
|
|
+ // 自定义下拉箭头
|
|
|
+ background-image: url("data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M2 4L6 8L10 4' stroke='%23475569' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E");
|
|
|
+ background-repeat: no-repeat;
|
|
|
+ background-position: right 12px center;
|
|
|
+ padding-right: 36px;
|
|
|
+ appearance: none;
|
|
|
|
|
|
&::placeholder {
|
|
|
- color: #9ca3af;
|
|
|
+ color: #94a3b8;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ border-color: #cbd5e1;
|
|
|
+ background-color: #f8fafc;
|
|
|
}
|
|
|
|
|
|
&:focus {
|
|
|
outline: none;
|
|
|
- border-color: #4f46e5;
|
|
|
- box-shadow: 0 0 0 2px rgba(79, 70, 229, 0.1);
|
|
|
+ border-color: #667eea;
|
|
|
+ box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.15);
|
|
|
+ background-color: #ffffff;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ .filter-input {
|
|
|
+ background-image: none;
|
|
|
+ padding-right: 16px;
|
|
|
+ }
|
|
|
+
|
|
|
.checkbox-label {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
- gap: 8px;
|
|
|
+ gap: 10px;
|
|
|
cursor: pointer;
|
|
|
font-size: 14px;
|
|
|
- color: #374151;
|
|
|
+ color: #1e293b;
|
|
|
margin-top: 20px;
|
|
|
+ font-weight: 500;
|
|
|
+ padding: 8px 12px;
|
|
|
+ border-radius: 8px;
|
|
|
+ transition: all 0.2s ease;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: rgba(102, 126, 234, 0.05);
|
|
|
+ }
|
|
|
|
|
|
input[type="checkbox"] {
|
|
|
display: none;
|
|
|
}
|
|
|
|
|
|
.checkmark {
|
|
|
- width: 18px;
|
|
|
- height: 18px;
|
|
|
- border: 2px solid #d1d5db;
|
|
|
- border-radius: 4px;
|
|
|
+ width: 20px;
|
|
|
+ height: 20px;
|
|
|
+ border: 2px solid #cbd5e1;
|
|
|
+ border-radius: 6px;
|
|
|
position: relative;
|
|
|
- transition: all 0.2s ease;
|
|
|
+ transition: all 0.3s ease;
|
|
|
+ background: #ffffff;
|
|
|
|
|
|
&::after {
|
|
|
content: '';
|
|
|
position: absolute;
|
|
|
- left: 5px;
|
|
|
+ left: 6px;
|
|
|
top: 2px;
|
|
|
- width: 4px;
|
|
|
- height: 8px;
|
|
|
+ width: 5px;
|
|
|
+ height: 10px;
|
|
|
border: solid white;
|
|
|
- border-width: 0 2px 2px 0;
|
|
|
+ border-width: 0 2.5px 2.5px 0;
|
|
|
transform: rotate(45deg);
|
|
|
opacity: 0;
|
|
|
transition: opacity 0.2s ease;
|
|
@@ -129,8 +189,8 @@
|
|
|
}
|
|
|
|
|
|
input:checked + .checkmark {
|
|
|
- background: #4f46e5;
|
|
|
- border-color: #4f46e5;
|
|
|
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
|
+ border-color: #667eea;
|
|
|
|
|
|
&::after {
|
|
|
opacity: 1;
|
|
@@ -140,6 +200,114 @@
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+// 状态图例样式
|
|
|
+.status-legend {
|
|
|
+ margin-bottom: 20px;
|
|
|
+ padding: 20px 24px;
|
|
|
+ background: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%);
|
|
|
+ border: 2px solid #e2e8f0;
|
|
|
+ border-radius: 12px;
|
|
|
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
|
|
|
+
|
|
|
+ .legend-title {
|
|
|
+ font-size: 14px;
|
|
|
+ font-weight: 700;
|
|
|
+ color: #1e293b;
|
|
|
+ margin: 0 0 16px 0;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 8px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .legend-items {
|
|
|
+ display: flex;
|
|
|
+ gap: 24px;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ align-items: center;
|
|
|
+
|
|
|
+ .legend-item {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 10px;
|
|
|
+
|
|
|
+ .legend-color {
|
|
|
+ width: 40px;
|
|
|
+ height: 28px;
|
|
|
+ border-radius: 6px;
|
|
|
+ position: relative;
|
|
|
+ transition: all 0.3s ease;
|
|
|
+
|
|
|
+ &.availability-free {
|
|
|
+ background: linear-gradient(135deg, #d4edda 0%, #c3e6cb 100%);
|
|
|
+ border: 2px solid #28a745;
|
|
|
+
|
|
|
+ &::after {
|
|
|
+ content: '✓';
|
|
|
+ position: absolute;
|
|
|
+ top: 50%;
|
|
|
+ left: 50%;
|
|
|
+ transform: translate(-50%, -50%);
|
|
|
+ color: #155724;
|
|
|
+ font-weight: bold;
|
|
|
+ font-size: 14px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ &.availability-partial {
|
|
|
+ background: linear-gradient(135deg, #cfe2ff 0%, #b6d4fe 100%);
|
|
|
+ border: 2px solid #0d6efd;
|
|
|
+ }
|
|
|
+
|
|
|
+ &.availability-booked {
|
|
|
+ background: linear-gradient(135deg, #9ec5fe 0%, #6ea8fe 100%);
|
|
|
+ border: 2px solid #0a58ca;
|
|
|
+
|
|
|
+ &::after {
|
|
|
+ content: '';
|
|
|
+ position: absolute;
|
|
|
+ top: 4px;
|
|
|
+ right: 4px;
|
|
|
+ width: 8px;
|
|
|
+ height: 8px;
|
|
|
+ background: #0a58ca;
|
|
|
+ border-radius: 50%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ &.review-day {
|
|
|
+ background: linear-gradient(135deg, #fff3cd 0%, #ffe69c 100%);
|
|
|
+ border: 2px solid #ffc107;
|
|
|
+
|
|
|
+ &::after {
|
|
|
+ content: '⚠️';
|
|
|
+ position: absolute;
|
|
|
+ top: 50%;
|
|
|
+ left: 50%;
|
|
|
+ transform: translate(-50%, -50%);
|
|
|
+ font-size: 12px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ &.today {
|
|
|
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
|
+ border: 2px solid #667eea;
|
|
|
+ box-shadow: 0 0 0 2px rgba(102, 126, 234, 0.3);
|
|
|
+ }
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ transform: scale(1.1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .legend-text {
|
|
|
+ font-size: 13px;
|
|
|
+ font-weight: 500;
|
|
|
+ color: #475569;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
// 日历视图样式
|
|
|
.calendar-view {
|
|
|
.calendar-navigation {
|
|
@@ -312,56 +480,188 @@
|
|
|
}
|
|
|
|
|
|
.date-content {
|
|
|
- height: 40px;
|
|
|
+ height: 50px;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
- border-radius: 4px;
|
|
|
+ border-radius: 8px;
|
|
|
position: relative;
|
|
|
+ transition: all 0.3s ease;
|
|
|
+ cursor: pointer;
|
|
|
|
|
|
&.available-day {
|
|
|
- background: #f0fdf4;
|
|
|
- border: 1px dashed #bbf7d0;
|
|
|
+ background: linear-gradient(135deg, #d4edda 0%, #c3e6cb 100%);
|
|
|
+ border: 3px solid #28a745;
|
|
|
+ box-shadow: 0 2px 8px rgba(40, 167, 69, 0.2);
|
|
|
+
|
|
|
+ &::after {
|
|
|
+ content: '✓';
|
|
|
+ position: absolute;
|
|
|
+ top: 4px;
|
|
|
+ right: 4px;
|
|
|
+ width: 16px;
|
|
|
+ height: 16px;
|
|
|
+ background: #28a745;
|
|
|
+ color: white;
|
|
|
+ border-radius: 50%;
|
|
|
+ font-size: 10px;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ font-weight: bold;
|
|
|
+ animation: pulse-available 2s infinite;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: linear-gradient(135deg, #c3e6cb 0%, #b1dfbb 100%);
|
|
|
+ transform: scale(1.08) translateY(-2px);
|
|
|
+ box-shadow: 0 8px 24px rgba(40, 167, 69, 0.4);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- /* 新增:按日可用性颜色编码 */
|
|
|
+ /* 新增:按日可用性颜色编码 - 完全空闲 */
|
|
|
&.availability-free {
|
|
|
- background: #f0fdf4;
|
|
|
- border: 1px dashed #bbf7d0;
|
|
|
+ background: linear-gradient(135deg, #d4edda 0%, #c3e6cb 100%);
|
|
|
+ border: 3px solid #28a745;
|
|
|
+ box-shadow: 0 2px 8px rgba(40, 167, 69, 0.2);
|
|
|
+ position: relative;
|
|
|
+
|
|
|
+ &::before {
|
|
|
+ content: '空闲';
|
|
|
+ position: absolute;
|
|
|
+ bottom: 2px;
|
|
|
+ left: 50%;
|
|
|
+ transform: translateX(-50%);
|
|
|
+ font-size: 10px;
|
|
|
+ font-weight: 700;
|
|
|
+ color: #155724;
|
|
|
+ background: rgba(255, 255, 255, 0.8);
|
|
|
+ padding: 2px 6px;
|
|
|
+ border-radius: 4px;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: linear-gradient(135deg, #c3e6cb 0%, #b1dfbb 100%);
|
|
|
+ transform: scale(1.08) translateY(-2px);
|
|
|
+ box-shadow: 0 8px 24px rgba(40, 167, 69, 0.4);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+ /* 部分可用 - 蓝色 */
|
|
|
&.availability-partial {
|
|
|
- background: #fff7ed;
|
|
|
- border: 1px dashed #fed7aa;
|
|
|
+ background: linear-gradient(135deg, #cfe2ff 0%, #b6d4fe 100%);
|
|
|
+ border: 3px solid #0d6efd;
|
|
|
+ box-shadow: 0 2px 8px rgba(13, 110, 253, 0.2);
|
|
|
+
|
|
|
+ &::before {
|
|
|
+ content: '部分忙';
|
|
|
+ position: absolute;
|
|
|
+ bottom: 2px;
|
|
|
+ left: 50%;
|
|
|
+ transform: translateX(-50%);
|
|
|
+ font-size: 10px;
|
|
|
+ font-weight: 700;
|
|
|
+ color: #084298;
|
|
|
+ background: rgba(255, 255, 255, 0.8);
|
|
|
+ padding: 2px 6px;
|
|
|
+ border-radius: 4px;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: linear-gradient(135deg, #b6d4fe 0%, #9ec5fe 100%);
|
|
|
+ transform: scale(1.05) translateY(-2px);
|
|
|
+ box-shadow: 0 8px 24px rgba(13, 110, 253, 0.4);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+ /* 已预订/忙碌 - 深蓝/紫色 */
|
|
|
&.availability-booked {
|
|
|
- background: #fef2f2;
|
|
|
- border: 1px solid #fecaca;
|
|
|
+ background: linear-gradient(135deg, #9ec5fe 0%, #6ea8fe 100%);
|
|
|
+ border: 3px solid #0a58ca;
|
|
|
+ box-shadow: 0 3px 12px rgba(10, 88, 202, 0.3);
|
|
|
+
|
|
|
+ &::before {
|
|
|
+ content: '忙碌';
|
|
|
+ position: absolute;
|
|
|
+ bottom: 2px;
|
|
|
+ left: 50%;
|
|
|
+ transform: translateX(-50%);
|
|
|
+ font-size: 10px;
|
|
|
+ font-weight: 700;
|
|
|
+ color: #052c65;
|
|
|
+ background: rgba(255, 255, 255, 0.9);
|
|
|
+ padding: 2px 6px;
|
|
|
+ border-radius: 4px;
|
|
|
+ }
|
|
|
+
|
|
|
+ &::after {
|
|
|
+ content: '';
|
|
|
+ position: absolute;
|
|
|
+ top: 4px;
|
|
|
+ right: 4px;
|
|
|
+ width: 10px;
|
|
|
+ height: 10px;
|
|
|
+ background: #0a58ca;
|
|
|
+ border-radius: 50%;
|
|
|
+ animation: pulse-busy 1s infinite;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: linear-gradient(135deg, #6ea8fe 0%, #3d8bfd 100%);
|
|
|
+ transform: scale(1.05) translateY(-2px);
|
|
|
+ box-shadow: 0 10px 28px rgba(10, 88, 202, 0.5);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
&.has-events {
|
|
|
- background: #eff6ff;
|
|
|
- border: 1px solid #dbeafe;
|
|
|
+ background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%);
|
|
|
+ border: 2px solid #3b82f6;
|
|
|
}
|
|
|
|
|
|
+ /* 对图日 - 橙色警告 */
|
|
|
&.review-day {
|
|
|
- background: #fef3c7;
|
|
|
- border: 1px solid #fcd34d;
|
|
|
+ background: linear-gradient(135deg, #fff3cd 0%, #ffe69c 100%);
|
|
|
+ border: 3px solid #ffc107;
|
|
|
+ box-shadow: 0 2px 8px rgba(255, 193, 7, 0.3);
|
|
|
+
|
|
|
+ &::before {
|
|
|
+ content: '对图';
|
|
|
+ position: absolute;
|
|
|
+ bottom: 2px;
|
|
|
+ left: 50%;
|
|
|
+ transform: translateX(-50%);
|
|
|
+ font-size: 10px;
|
|
|
+ font-weight: 700;
|
|
|
+ color: #856404;
|
|
|
+ background: rgba(255, 255, 255, 0.9);
|
|
|
+ padding: 2px 6px;
|
|
|
+ border-radius: 4px;
|
|
|
+ }
|
|
|
+
|
|
|
+ &::after {
|
|
|
+ content: '⚠️';
|
|
|
+ position: absolute;
|
|
|
+ top: 2px;
|
|
|
+ right: 2px;
|
|
|
+ font-size: 12px;
|
|
|
+ animation: shake 2s infinite;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
&.project-day {
|
|
|
- background: #e0e7ff;
|
|
|
- border: 1px solid #c7d2fe;
|
|
|
+ background: linear-gradient(135deg, #e0e7ff 0%, #c7d2fe 100%);
|
|
|
+ border: 2px solid #6366f1;
|
|
|
}
|
|
|
|
|
|
&.vacation-day {
|
|
|
- background: #f3f4f6;
|
|
|
- border: 1px solid #d1d5db;
|
|
|
+ background: linear-gradient(135deg, #f3f4f6 0%, #e5e7eb 100%);
|
|
|
+ border: 2px dashed #9ca3af;
|
|
|
+ opacity: 0.7;
|
|
|
}
|
|
|
|
|
|
&.today {
|
|
|
- box-shadow: 0 0 0 2px #4f46e5;
|
|
|
+ box-shadow: 0 0 0 3px #667eea, 0 4px 12px rgba(102, 126, 234, 0.3);
|
|
|
+ animation: pulse-today 2s infinite;
|
|
|
}
|
|
|
|
|
|
.event-indicators {
|
|
@@ -828,6 +1128,51 @@
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+// 动画定义
|
|
|
+@keyframes pulse-available {
|
|
|
+ 0% {
|
|
|
+ box-shadow: 0 0 0 0 rgba(40, 167, 69, 0.7);
|
|
|
+ }
|
|
|
+ 70% {
|
|
|
+ box-shadow: 0 0 0 8px rgba(40, 167, 69, 0);
|
|
|
+ }
|
|
|
+ 100% {
|
|
|
+ box-shadow: 0 0 0 0 rgba(40, 167, 69, 0);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+@keyframes pulse-busy {
|
|
|
+ 0%, 100% {
|
|
|
+ transform: scale(1);
|
|
|
+ opacity: 1;
|
|
|
+ }
|
|
|
+ 50% {
|
|
|
+ transform: scale(1.3);
|
|
|
+ opacity: 0.6;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+@keyframes pulse-today {
|
|
|
+ 0%, 100% {
|
|
|
+ box-shadow: 0 0 0 3px #667eea, 0 4px 12px rgba(102, 126, 234, 0.3);
|
|
|
+ }
|
|
|
+ 50% {
|
|
|
+ box-shadow: 0 0 0 5px #667eea, 0 6px 16px rgba(102, 126, 234, 0.5);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+@keyframes shake {
|
|
|
+ 0%, 100% {
|
|
|
+ transform: translateX(0);
|
|
|
+ }
|
|
|
+ 10%, 30%, 50%, 70%, 90% {
|
|
|
+ transform: translateX(-2px);
|
|
|
+ }
|
|
|
+ 20%, 40%, 60%, 80% {
|
|
|
+ transform: translateX(2px);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
// 响应式设计
|
|
|
@media (max-width: 1024px) {
|
|
|
.calendar-view {
|