.index-shell { min-height: 100vh; background: #f2f5f9; } .index-page { padding-bottom: calc(env(safe-area-inset-bottom) + 150rpx); } .header-row { position: relative; z-index: 2; display: flex; align-items: flex-start; justify-content: space-between; gap: 18rpx; padding-top: 8rpx; } .index-page .header::after { left: 18rpx; right: auto; top: 128rpx; width: 150rpx; height: 46rpx; opacity: 0.06; transform: rotate(14deg); } .brand-block { min-width: 0; flex: 1; } .location-status { display: block; margin-top: 8rpx; color: #1f2937; font-size: 23rpx; font-weight: 800; line-height: 1.35; } .location-refresh-tip { display: block; margin-top: 2rpx; color: #7a8798; font-size: 20rpx; line-height: 1.3; } .location-not-entered { color: #c5221f; font-weight: 900; } .location-point-name { color: #087443; font-weight: 900; } .metallic-title { display: inline-block; color: #4b5563; font-weight: 900; background: linear-gradient(90deg, #38414d 0%, #dfe6ec 7%, #7f8b97 14%, #f8fbfd 22%, #59636f 31%, #eef3f6 41%, #3f4853 52%, #c4cdd6 64%, #ffffff 73%, #626c78 84%, #2f3741 100%), linear-gradient(180deg, #f9fbfc 0%, #a7b0bb 18%, #ffffff 34%, #5b6470 54%, #d3dae2 74%, #3b4450 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; -webkit-text-stroke: 1rpx rgba(47, 55, 65, 0.42); text-shadow: 0 1rpx 0 rgba(255, 255, 255, 0.92), 0 3rpx 0 rgba(87, 96, 108, 0.78), 0 6rpx 0 rgba(38, 45, 54, 0.62), 0 12rpx 16rpx rgba(15, 23, 42, 0.28), 0 20rpx 28rpx rgba(15, 23, 42, 0.16); } .header-user { display: flex; align-items: center; gap: 12rpx; flex: 0 0 auto; max-width: 300rpx; padding: 10rpx 12rpx; border: 1rpx solid #e1e7f0; border-radius: 16rpx; background: #ffffff; box-shadow: 0 8rpx 0 rgba(205, 216, 229, 0.54), 0 14rpx 22rpx rgba(22, 34, 50, 0.08), inset 0 2rpx 0 rgba(255, 255, 255, 0.96); } .header-user-text { min-width: 0; text-align: right; } .header-name { display: block; color: #1f2933; font-size: 26rpx; font-weight: 700; line-height: 1.25; } .role-line { display: flex; align-items: center; justify-content: flex-end; gap: 4rpx; margin-top: 6rpx; color: #667085; font-size: 22rpx; line-height: 1.2; } .role-arrow { color: #1463ff; font-size: 24rpx; line-height: 1; } .avatar { overflow: hidden; display: flex; align-items: center; justify-content: center; flex: 0 0 auto; border-radius: 50%; background: #e8f1ff; color: #1456c2; font-weight: 700; } .small-avatar { width: 66rpx; height: 66rpx; font-size: 24rpx; } .large-avatar { width: 112rpx; height: 112rpx; font-size: 34rpx; } .avatar-image { width: 100%; height: 100%; } .avatar-text { display: block; line-height: 1; } .large-avatar-text { font-size: 34rpx; } .scan-btn { width: 100%; height: 112rpx; line-height: 112rpx; margin: 0 0 28rpx; padding: 0; border-radius: 18rpx; background: linear-gradient(180deg, #2876ff 0%, #1456c2 100%); color: #ffffff; font-size: 36rpx; font-weight: 700; box-shadow: 0 12rpx 0 #0d3f93, 0 20rpx 30rpx rgba(20, 86, 194, 0.28), inset 0 2rpx 0 rgba(255, 255, 255, 0.26); } .scan-btn:active { transform: translateY(5rpx); box-shadow: 0 7rpx 0 #0d3f93, 0 14rpx 22rpx rgba(20, 86, 194, 0.22), inset 0 2rpx 0 rgba(255, 255, 255, 0.2); } .scan-btn::after { border: 0; } .notice-card { position: relative; overflow: hidden; margin-bottom: 28rpx; border: 1rpx solid #dce5f2; border-radius: 18rpx; background: #ffffff; box-shadow: 0 14rpx 0 rgba(205, 216, 229, 0.62), 0 22rpx 34rpx rgba(22, 34, 50, 0.12), inset 0 2rpx 0 rgba(255, 255, 255, 0.96); } .notice-card::before, .workbench-panel::before { content: ""; position: absolute; right: 18rpx; top: 18rpx; z-index: 1; width: 24rpx; height: 24rpx; border-radius: 50%; opacity: 0.54; pointer-events: none; background: linear-gradient(90deg, transparent 42%, rgba(47, 55, 65, 0.78) 43%, rgba(47, 55, 65, 0.78) 57%, transparent 58%), radial-gradient(circle at 32% 28%, #ffffff 0, #dfe6ec 19%, #97a3af 58%, #475467 100%); box-shadow: 0 3rpx 0 rgba(72, 83, 97, 0.38), 0 6rpx 10rpx rgba(22, 34, 50, 0.14), inset 0 2rpx 0 rgba(255, 255, 255, 0.85); transform: rotate(28deg); } .notice-hero { position: relative; min-height: 178rpx; padding: 24rpx 28rpx; background: linear-gradient(135deg, #1456c2 0%, #15847c 100%); box-sizing: border-box; } .notice-hero::after { content: ""; position: absolute; right: -14rpx; bottom: 14rpx; width: 180rpx; height: 48rpx; opacity: 0.14; transform: rotate(-20deg); pointer-events: none; background: radial-gradient(circle at 18% 50%, transparent 0rpx, transparent 12rpx, #ffffff 13rpx, #ffffff 20rpx, transparent 21rpx), radial-gradient(circle at 86% 50%, #ffffff 0rpx, #ffffff 16rpx, transparent 17rpx), linear-gradient(90deg, transparent 0rpx, transparent 30rpx, #ffffff 31rpx, #ffffff 142rpx, transparent 143rpx); } .notice-badge { display: inline-flex; align-items: center; height: 42rpx; padding: 0 16rpx; border-radius: 999rpx; background: rgba(255, 255, 255, 0.18); color: #ffffff; font-size: 22rpx; font-weight: 700; } .notice-swiper { height: 106rpx; margin-top: 12rpx; } .notice-slide, .notice-empty { display: flex; flex-direction: column; justify-content: center; height: 100%; } .notice-title { display: block; overflow: hidden; color: #ffffff; font-size: 32rpx; font-weight: 700; line-height: 1.3; text-overflow: ellipsis; white-space: nowrap; } .notice-content { display: -webkit-box; overflow: hidden; margin-top: 8rpx; color: rgba(255, 255, 255, 0.86); font-size: 24rpx; line-height: 1.45; -webkit-box-orient: vertical; -webkit-line-clamp: 2; } .notice-list { padding: 16rpx 26rpx 18rpx; } .notice-list-row { display: flex; align-items: center; gap: 12rpx; min-height: 46rpx; } .notice-dot { width: 10rpx; height: 10rpx; border-radius: 50%; background: #12a375; } .notice-list-title { overflow: hidden; min-width: 0; color: #344054; font-size: 24rpx; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; } .trend-card { padding-bottom: 14rpx; border-left: 6rpx solid #12a375; } .trend-head { margin-bottom: 12rpx; } .trend-plot { position: relative; height: 360rpx; padding: 18rpx 8rpx 0 58rpx; box-sizing: border-box; } .trend-axis { position: absolute; left: 0; width: 48rpx; color: #667085; font-size: 20rpx; line-height: 1; text-align: right; } .trend-axis-top { top: 24rpx; } .trend-axis-bottom { bottom: 56rpx; } .trend-plot-body { position: relative; height: 244rpx; margin-right: 10rpx; } .trend-grid-line { position: absolute; left: 0; right: 0; height: 1rpx; background: #e6eaf0; } .trend-grid-line.top { top: 14%; } .trend-grid-line.middle { top: 48%; } .trend-grid-line.bottom { top: 82%; } .trend-segment { position: absolute; z-index: 2; height: 6rpx; border-radius: 999rpx; background: linear-gradient(180deg, #6aa1ff 0%, #1463ff 100%); box-shadow: 0 5rpx 10rpx rgba(20, 99, 255, 0.22); transform-origin: 0 50%; } .trend-point-wrap { position: absolute; z-index: 3; width: 1rpx; height: 1rpx; } .trend-point { position: absolute; left: -11rpx; top: -11rpx; width: 22rpx; height: 22rpx; border: 5rpx solid #1463ff; border-radius: 50%; background: #ffffff; box-shadow: 0 7rpx 12rpx rgba(20, 99, 255, 0.2), inset 0 2rpx 0 rgba(255, 255, 255, 0.9); box-sizing: border-box; } .trend-point-value { position: absolute; left: -44rpx; bottom: 18rpx; width: 88rpx; color: #1f2933; font-size: 21rpx; font-weight: 700; line-height: 1; text-align: center; } .trend-label-row { position: relative; height: 40rpx; margin-top: 24rpx; margin-right: 10rpx; } .trend-date-label { position: absolute; top: 0; width: 78rpx; color: #667085; font-size: 20rpx; line-height: 1; text-align: center; transform: translateX(-50%); } .tappable-stat { position: relative; transition: background 0.15s ease; } .tappable-stat:active { background: #f3f6fb; } .stat-products { border-left-color: #1463ff; } .stat-people { border-left-color: #12a375; } .stat-pending { border-left-color: #d9822b; } .stat-alert { border-color: #ffb4a8; border-left-color: #d92d20; background: linear-gradient(135deg, rgba(217, 45, 32, 0.13), rgba(255, 255, 255, 0.92) 48%), #fff7f5; box-shadow: 0 14rpx 0 rgba(244, 179, 169, 0.7), 0 22rpx 34rpx rgba(180, 35, 24, 0.14), inset 0 2rpx 0 rgba(255, 255, 255, 0.96); } .stat-alert .stat-number, .stat-alert .stat-link { color: #b42318; } .stat-approved { border-left-color: #7c3aed; } .stat-link { display: block; margin-top: 12rpx; color: #6b778c; font-size: 22rpx; font-weight: 600; } .profile-card { padding-bottom: 28rpx; border-left: 6rpx solid #12a375; } .profile-head { display: flex; align-items: center; gap: 20rpx; } .profile-main { min-width: 0; flex: 1; } .profile-name { display: block; color: #1f2933; font-size: 36rpx; font-weight: 700; line-height: 1.3; } .info-row { display: flex; align-items: center; justify-content: space-between; min-height: 72rpx; gap: 20rpx; } .inline-label { margin-bottom: 0; } .info-value { display: flex; align-items: center; gap: 6rpx; color: #1f2933; font-weight: 600; } .role-list { margin-top: 22rpx; } .role-btn { margin-top: 12rpx; height: 72rpx; line-height: 72rpx; border-radius: 14rpx; background: linear-gradient(180deg, #f6faff 0%, #e4efff 100%); color: #1463ff; font-size: 26rpx; box-shadow: 0 7rpx 0 rgba(144, 178, 235, 0.62), 0 12rpx 18rpx rgba(20, 86, 194, 0.1), inset 0 2rpx 0 rgba(255, 255, 255, 0.84); } .role-btn::after { border: 0; } .workbench-panel { position: relative; overflow: hidden; padding: 24rpx 18rpx 10rpx; border: 1rpx solid #e4e9f1; border-radius: 18rpx; background: #ffffff; box-shadow: 0 14rpx 0 rgba(205, 216, 229, 0.62), 0 22rpx 34rpx rgba(22, 34, 50, 0.12), inset 0 2rpx 0 rgba(255, 255, 255, 0.96); } .app-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 18rpx 12rpx; } .app-item { display: flex; flex-direction: column; align-items: center; min-height: 178rpx; padding: 16rpx 8rpx; border-radius: 16rpx; box-sizing: border-box; } .app-item:active { background: #f3f6fb; } .app-item:active .app-icon { transform: translateY(4rpx); box-shadow: 0 5rpx 0 rgba(74, 91, 115, 0.42), 0 8rpx 14rpx rgba(22, 34, 50, 0.12), inset 0 2rpx 0 rgba(255, 255, 255, 0.56), inset 0 -8rpx 12rpx rgba(15, 23, 42, 0.12); } .app-icon { position: relative; overflow: hidden; display: flex; align-items: center; justify-content: center; width: 78rpx; height: 78rpx; border-radius: 22rpx; border: 1rpx solid rgba(255, 255, 255, 0.62); background: linear-gradient(160deg, #ffffff 0%, #dbe8ff 28%, #8bb7ff 58%, #1456c2 100%); color: #1456c2; font-size: 34rpx; font-weight: 800; line-height: 1; text-shadow: 0 2rpx 0 rgba(255, 255, 255, 0.82), 0 4rpx 8rpx rgba(15, 23, 42, 0.18); box-shadow: 0 10rpx 0 rgba(77, 103, 145, 0.42), 0 16rpx 22rpx rgba(22, 34, 50, 0.16), inset 0 3rpx 0 rgba(255, 255, 255, 0.82), inset 0 -10rpx 14rpx rgba(15, 23, 42, 0.14); } .app-icon::before, .app-icon::after { content: ""; position: absolute; width: 14rpx; height: 14rpx; border-radius: 50%; pointer-events: none; background: linear-gradient(90deg, transparent 40%, rgba(47, 55, 65, 0.72) 41%, rgba(47, 55, 65, 0.72) 59%, transparent 60%), radial-gradient(circle at 32% 28%, rgba(255, 255, 255, 0.96) 0, rgba(226, 232, 240, 0.96) 20%, rgba(132, 146, 164, 0.88) 62%, rgba(59, 70, 84, 0.86) 100%); box-shadow: 0 2rpx 0 rgba(49, 61, 77, 0.36), inset 0 1rpx 0 rgba(255, 255, 255, 0.9); } .app-icon::before { left: 10rpx; top: 10rpx; transform: rotate(24deg); } .app-icon::after { right: 10rpx; bottom: 10rpx; transform: rotate(-28deg); } .app-icon-products, .app-icon-device, .app-icon-moldQr, .app-icon-equipment { background: linear-gradient(160deg, #ffffff 0%, #dbe8ff 28%, #8bb7ff 58%, #1456c2 100%); color: #1456c2; } .app-icon-review, .app-icon-audit { background: linear-gradient(160deg, #fffdf7 0%, #ffe2aa 34%, #f0a23a 68%, #a95605 100%); color: #a95605; box-shadow: 0 10rpx 0 rgba(143, 84, 16, 0.38), 0 16rpx 22rpx rgba(104, 62, 17, 0.14), inset 0 3rpx 0 rgba(255, 255, 255, 0.82), inset 0 -10rpx 14rpx rgba(94, 47, 0, 0.14); } .app-icon-people, .app-icon-dashboard, .app-icon-schedule { background: linear-gradient(160deg, #ffffff 0%, #c9f2df 32%, #5fd19d 64%, #087443 100%); color: #087443; box-shadow: 0 10rpx 0 rgba(24, 117, 77, 0.38), 0 16rpx 22rpx rgba(20, 92, 63, 0.14), inset 0 3rpx 0 rgba(255, 255, 255, 0.82), inset 0 -10rpx 14rpx rgba(0, 81, 49, 0.14); } .app-icon-records, .app-icon-notices { background: linear-gradient(160deg, #ffffff 0%, #e6d8ff 32%, #b68dff 64%, #6d35c7 100%); color: #6d35c7; box-shadow: 0 10rpx 0 rgba(98, 67, 151, 0.38), 0 16rpx 22rpx rgba(81, 54, 125, 0.14), inset 0 3rpx 0 rgba(255, 255, 255, 0.82), inset 0 -10rpx 14rpx rgba(65, 29, 122, 0.14); } .app-title { display: block; margin-top: 12rpx; color: #162232; font-size: 25rpx; font-weight: 700; line-height: 1.25; text-align: center; } .app-desc { display: -webkit-box; overflow: hidden; margin-top: 6rpx; color: #7a8699; font-size: 20rpx; line-height: 1.35; text-align: center; -webkit-box-orient: vertical; -webkit-line-clamp: 2; } .bottom-bar { position: fixed; left: 0; right: 0; bottom: 0; z-index: 20; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); padding: 10rpx 22rpx calc(env(safe-area-inset-bottom) + 10rpx); border-top: 1rpx solid #e4e9f1; background: linear-gradient(180deg, #ffffff 0%, #f6f9fd 100%); box-shadow: 0 -8rpx 0 rgba(205, 216, 229, 0.42), 0 -14rpx 28rpx rgba(22, 34, 50, 0.1), inset 0 2rpx 0 rgba(255, 255, 255, 0.96); } .bottom-item { display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 94rpx; color: #8a94a6; font-size: 22rpx; font-weight: 600; border-radius: 18rpx; } .bottom-item.active { background: linear-gradient(180deg, #eef5ff 0%, #dceaff 100%); color: #1463ff; box-shadow: inset 0 2rpx 0 rgba(255, 255, 255, 0.95), 0 7rpx 0 rgba(144, 178, 235, 0.46), 0 12rpx 20rpx rgba(20, 86, 194, 0.14); } .bottom-item.active text:not(.bottom-icon) { color: #1463ff; font-size: 24rpx; font-weight: 800; } .bottom-item text:not(.bottom-icon) { color: #7a8699; } .bottom-icon { display: flex; align-items: center; justify-content: center; width: 46rpx; height: 46rpx; margin-bottom: 6rpx; border: 1rpx solid #c8d2df; border-radius: 16rpx; background: linear-gradient(180deg, #ffffff 0%, #e7edf5 100%); color: #8b96a8; font-size: 28rpx; font-weight: 800; line-height: 1; box-shadow: 0 5rpx 0 rgba(157, 170, 188, 0.4), 0 8rpx 12rpx rgba(22, 34, 50, 0.08), inset 0 2rpx 0 rgba(255, 255, 255, 0.88); } .bottom-item.active .bottom-icon { width: 58rpx; height: 58rpx; margin-bottom: 4rpx; border-color: rgba(255, 255, 255, 0.72); background: linear-gradient(160deg, #ffffff 0%, #dbe8ff 28%, #72a9ff 58%, #1456c2 100%); color: #ffffff; font-size: 34rpx; text-shadow: 0 2rpx 4rpx rgba(15, 23, 42, 0.28); box-shadow: 0 8rpx 0 #0d3f93, 0 14rpx 20rpx rgba(20, 86, 194, 0.24), inset 0 3rpx 0 rgba(255, 255, 255, 0.78), inset 0 -8rpx 14rpx rgba(15, 23, 42, 0.16); }