/* 白色为主，天蓝色作为操作和选中状态的辅助色。仅由前台模板加载。 */
.front{--blue:#2a8ed0;--blue-ink:#1775af;--green:var(--blue-ink);--dark:#243b53;--pale:#eff8ff;--bg:#fff;--ink:#243343;--muted:#8492a2;--line:#e9eff5;--shadow:0 6px 28px #395f8b07;background:#f7fafc;color:var(--ink)}
.front .phone,.front[data-page="my"] .phone,.front[data-page="login"] .phone{background:#fff;box-shadow:0 0 45px #7b9db00a}
.front #app{padding:22px 20px}
.front header{position:sticky;top:0;z-index:60;border-color:#f1f5f9;background:#fff}
.front header .brand{color:var(--ink);gap:10px;font-weight:650;letter-spacing:.4px;min-width:0}
.front header .brand .icon{color:var(--blue);width:28px;height:28px}
.front header>a{color:#7594aa}
.front header .btn{background:#fff;border-color:#cde5f5;border-radius:20px;color:var(--blue-ink);padding:5px 13px}
.front .icon{stroke-width:1.6}
.front .btn{background:#eff8ff;border-color:#d0e9fa;color:var(--blue-ink);border-radius:11px;transition:background-color .15s,border-color .15s}
.front .btn:hover{filter:none;background:#e5f3fd;border-color:#b4dafa}
.front .btn.outline{background:#fff;border-color:#cfe3f2;color:var(--blue-ink)}
.front .btn.soft{background:#eff8ff;color:var(--blue-ink);border-color:#eff8ff}
.front .btn.danger{background:#fff;color:var(--red);border-color:#ecd0d0}
.front .fixed-actions .btn:not(.outline),.front .form-actions .btn:not(.outline),.front .login-submit:not(.soft),.front .profile-start,.front #entry-form button[type="submit"]{background:#197bb8;border-color:#197bb8;color:#fff}
.front .panel{border-color:var(--line);background:#fff;box-shadow:0 4px 20px #34567703;border-radius:15px}
.front input,.front select,.front textarea{background:#fff;border-color:#dfe8f0;color:var(--ink);border-radius:10px}
.front input:focus,.front select:focus,.front textarea:focus{border-color:#82bfe8;box-shadow:0 0 0 3px #e9f5ff}
.front input[type="checkbox"],.front input[type="radio"]{accent-color:#2184c4}
.front label{color:#546779}
.front h1,.front h2,.front h3{color:var(--ink)}
.front .tabs{gap:25px;border-color:var(--line);margin-top:10px}
.front .tabs button{color:#8290a2;padding:13px 0}
.front .tabs button.active{color:var(--blue-ink)}
.front .tabs button.active:after{background:#5faee5;height:2px;left:12%;right:12%}
.front .badge{background:#edf7ff;color:var(--blue-ink);font-size:11px;padding:3px 10px}
.front .badge.pending{background:#fff6e6;color:#9d762d}
.front .badge.offline,.front .badge.rejected{background:#fff0ef;color:var(--red)}
.front .badge.draft,.front .badge.ended{background:#f1f5f8;color:#8592a1}
.front .avatar{background:#eef8ff;color:var(--blue-ink)}
.front .notice{background:#f3faff;border-color:#deedf7;color:#387fa8}
.front .notice.warn{background:#fff9ed;border-color:#f0e5cf;color:#947440}
.front #toast{background:#2a465eee}
.front dialog{background:#fff;color:var(--ink);box-shadow:0 20px 90px #19375425}
.front dialog::backdrop,.front dialog.profile-dialog::backdrop{background:#22384c65;opacity:1}
.front dialog .dialog-close{color:#8296a7;display:grid;place-items:center;width:32px;height:32px;padding:5px}
.front .dialog-close .icon{width:20px;height:20px}
.front .empty{background:#fff;border:0;color:var(--muted);padding:35px 18px}
.front .empty h3{font-size:15px;color:#617b91;font-weight:500}
.front .empty p{font-size:12px}
.front .campus-empty{display:block;width:164px;height:101px;max-width:100%;margin:0 auto 15px;object-fit:contain}
.front #bottom-nav{background:#fffffff5;border-color:#edf2f7;box-shadow:0 -5px 22px #718fa503}
.front #bottom-nav a{color:#8b9aac;gap:4px}
.front #bottom-nav a.active{color:var(--blue-ink)}
.front #bottom-nav .icon{width:23px;height:23px}
.front #bottom-nav .plus{background:#edf7ff;color:#3b99d7;border:1px solid #d3ebfb;box-shadow:0 0 0 5px #fff;width:42px;height:42px;margin-top:-9px}
.front #bottom-nav .plus .icon{width:24px;height:24px}
.front .hero-title{position:relative;margin:5px 0 20px;padding:21px 18px 24px;min-height:178px;overflow:hidden;border-radius:19px;background:linear-gradient(135deg,#f2faff 0%,#ffffff 52%,#eaf6ff 100%);box-shadow:0 9px 28px #6287a712}
.front .hero-title h1,.front .hero-title p{position:relative;z-index:2;text-shadow:0 1px 2px rgba(255,255,255,.9)}
.front .hero-title h1{font-size:28px;line-height:1.5;letter-spacing:.5px;font-weight:650}
.front .hero-title p{font-size:12px;color:#718ba0;margin-top:9px;letter-spacing:1px}
.front .campus-scenery{display:block;width:100%;height:auto;pointer-events:none;user-select:none}
.front .hero-title:after{content:'';position:absolute;left:0;right:0;bottom:0;height:62%;z-index:1;background:linear-gradient(180deg,rgba(255,255,255,0),rgba(255,255,255,.88));pointer-events:none}
.front .hero-title .campus-scenery{position:absolute;left:0;right:0;bottom:0;width:100%;height:116px;margin:0;object-fit:cover;object-position:center bottom;opacity:.82;z-index:0}
.front .search input{border:1px solid #e1ebf3;background:#fcfdff;padding:11px 15px 11px 41px;color:#3e5366;border-radius:24px}
.front .search .icon{color:#8ba5bc;left:14px;top:13px}
.front .activity-card{border-color:#e6eef6;border-radius:17px;box-shadow:0 4px 18px #5e83a305;margin-bottom:21px}
.front .activity-card .cover{background:#f7fbff}
.front .activity-card .cover:has(>img){background:#fff}
.front .activity-card .cover:not(:has(>img)){background:#fff url('/static/campus-skyline.svg') center/90% auto no-repeat}
.front .activity-card .content{padding:16px 17px}
.front .activity-card h3{font-size:18px;font-weight:600;color:var(--ink)}
.front .activity-card .desc{color:#8696a8;margin-bottom:13px}
.front .meta-row{color:#8294a5;align-items:center;gap:15px}
.front .meta-row>span{display:inline-flex;align-items:center;gap:5px}
.front .meta-row .icon{width:16px;height:16px;color:#8eb6d3}
.front .main-cover,.front .work-hero,.front .work-info{background:#fff}
.front .activity-intro{padding:22px 20px 10px;border-radius:20px 20px 0 0}
.front .activity-intro h1{font-size:23px;letter-spacing:0}
.front .mini-stats{background:#fff;border:1px solid #ebf1f7;border-radius:13px;padding:15px 0;margin:20px 0;box-shadow:0 4px 18px #6085a303}
.front .mini-stats b{font-size:24px;font-weight:600;color:#30475d}
.front .mini-stats small{color:#8a9cae}
.front .mini-stats>div{border-color:#ebf1f7;min-width:0}
.front .inside{padding:0 20px}
.front .work-card{border-color:#e7eff6;border-radius:13px;box-shadow:0 3px 12px #5e83a304}
.front .work-card .content{padding:12px}
.front .work-card img{background:#f9fcff}
.front .work-photo{display:block;position:relative}
.front .work-rank{position:absolute;top:8px;left:8px;display:inline-flex;align-items:center;gap:4px;padding:4px 8px;min-height:27px;border:1px solid #d5eafd;border-radius:8px;background:#f2f9fff5;color:#176a9b;font-size:12px;font-weight:600;line-height:1.3;white-space:nowrap;box-shadow:0 2px 8px #16476a1a;pointer-events:none}
.front .work-rank-leading{background:#197ab4f5;color:#fff;border-color:#ffffff70}
.front .work-rank .icon{width:14px;height:14px;flex-shrink:0}
.front .work-card h3{color:#304459;font-weight:600}
.front .work-card .btn{border-radius:20px;background:#fff;border-color:#b9def6;color:var(--blue-ink);font-weight:500;padding:6px;font-size:12px}
.front .work-card .btn .icon{width:15px;height:15px}
.front .fixed-actions{border-color:var(--line);background:#fffffff5;box-shadow:0 -4px 18px #6085a303;padding-left:20px;padding-right:20px}
.front .fixed-actions .btn{padding:11px 8px;font-size:14px;min-width:0}
.front .work-info{padding:23px 20px}
.front .work-info .description{color:#76889a}
.front .work-info h1{font-size:24px}
.front .upload-box{background:#fcfeff;border-color:#bcdcf2;border-radius:15px;min-height:175px}
.front .upload-box .icon{width:32px;height:32px;color:#64a8d5;margin-bottom:5px}
.front .step-bar{gap:12px;color:#94a2b0}
.front .step-bar .step-number{display:inline-grid;place-items:center;width:23px;height:23px;background:#f2f7fb;border-radius:50%;margin-right:5px;color:#8eacbf;font-size:12px}
.front .step-bar .active .step-number{background:#eaf6ff;color:var(--blue-ink)}
.front .step-separator{width:24px;height:1px;background:#dceaf5;align-self:center}
.front .form-actions{background:#fff;border-top:1px solid var(--line);gap:12px}
.front .form-actions .btn{min-width:0}
.front .my-card{border-color:#e7eff6;background:#fff;border-radius:14px}
.front .my-card h3,.front .my-card .grow{overflow-wrap:anywhere}
.front .my-card .row{min-width:0}
.front .my-card img{flex-shrink:0}
.front .my-card .row+.row{border-color:#eff4f9;font-size:12px}
.front .share-heading{margin:4px 0 20px}
.front .success-icon{background:#eff8ff;color:#58a2d6;border:1px solid #e2f1fd}
.front .share-heading h1{font-size:23px}
.front .share-heading p{font-size:12px;margin-top:8px}
.front .share-poster{border:1px solid #e7eff6;box-shadow:0 6px 24px #7d9caf0b}
.front[data-page="share"] .row .btn{font-size:12px;padding:9px 10px}
.front[data-page="share"] .row .icon{width:17px;height:17px}
.front .pagination{flex-wrap:wrap}
.front[data-page="my"] #app{padding:27px 24px 12px}
.front .my-profile{margin-bottom:17px}
.front .my-profile .campus-scenery{height:90px;object-fit:contain;object-position:center bottom;margin-top:14px;opacity:.83}
.front .profile-identity .avatar{background:#f1f9ff}
.front .profile-name-action{font:inherit;line-height:inherit;max-width:100%;color:inherit}
.front .profile-name-editable{display:inline;overflow-wrap:anywhere}
.front .profile-name-editable .icon{width:14px;height:14px;margin-left:6px;color:#7a9db5;vertical-align:baseline}
.front dialog.nickname-dialog{width:min(360px,calc(100% - 32px));padding:27px 24px 24px;border-radius:20px;text-align:left}
.front .nickname-dialog h2{font-size:20px;margin-bottom:22px}
.front .nickname-dialog label{color:#425a6c}
.front .nickname-dialog input{margin-top:3px;font-size:16px}
.front .nickname-help,.front .nickname-explanation{font-size:13px;color:#728799;line-height:1.8}
.front .nickname-help{margin-top:10px}
.front .nickname-dialog .error-text:empty{display:none}
.front .nickname-proposed{margin-top:16px;padding:17px 12px;background:#f0f8ff;color:#176a9b;border:1px solid #d8ecfb;border-radius:12px;font-size:20px;font-weight:600;text-align:center;overflow-wrap:anywhere}
.front .nickname-actions{display:flex;gap:12px;margin-top:24px}
.front .nickname-actions .btn{flex:1;padding:10px 12px}
.front .profile-avatar-action{display:block;line-height:0;flex-shrink:0}
.front .profile-name-action:focus-visible,.front .profile-avatar-action:focus-visible{outline:2px solid #60aade;outline-offset:4px}
.front .profile-follow{background:#eef8ff;color:var(--blue-ink)}
.front .profile-follow.unfollowed{background:#fff7e9;color:#947440}
.front .profile-edit{color:#7f9ab0}
.front .profile-edit .icon{width:14px;height:14px}
.front .my-create.btn{background:#fff;border:1px solid #b9def6;color:var(--blue-ink);padding:11px;border-radius:14px;letter-spacing:0;font-size:15px}
.front .my-record-tabs{background:#fff;border:1px solid #eaf0f6;border-radius:15px;box-shadow:0 5px 20px #7e9fb107;padding:2px 0}
.front .my-record-tabs button{color:#8e9dab}
.front .my-record-tabs button+button:before{border-color:#edf3f8}
.front .my-record-tabs b{color:#41576b;font-size:24px}
.front .my-record-tabs .active,.front .my-record-tabs .active b{color:var(--blue-ink)}
.front .my-record-tabs .active:after{height:2px;background:#76b9e7;bottom:3px}
.front .my-empty{min-height:235px;gap:0;color:#8a9cad}
.front .my-empty .campus-empty{width:160px;height:102px;margin:0 auto 15px}
.front #my-records{min-height:240px}
.front[data-page="my"] .my-card{border-color:#e7eff6}
.front[data-page="my"] .my-card h3{color:var(--ink)}
.front .my-logout{color:#96a9ba;display:flex;align-items:center;justify-content:center;gap:6px;font-size:12px;margin-top:15px}
.front .my-logout .icon{width:14px;height:14px}
.front .login-emblem,.front .profile-dialog-emblem,.front .wechat-symbol{background:#eff8ff;color:#56a1d4;border:1px solid #e5f2fc}
.front .login-emblem .icon{height:39px;width:39px}
.front .login-card{border-color:#e8f0f7;box-shadow:0 7px 26px #7c9cb008}
.front .login-heading{position:relative}
.front[data-page="login"] .login-clean:after{content:'';display:block;width:100%;height:76px;background:url('/static/campus-skyline.svg') bottom center/contain no-repeat;opacity:.6;margin-top:32px}
.front .login-consent span{color:#8c9bab}
.front .auth-state[data-state="waiting"]:before{background:#62a9db}
.front .profile-dialog .dialog-close{color:#91a4b4}
.front .profile-dialog .profile-refresh{background:#f1f9ff;border-color:#f1f9ff}
.front .profile-refresh .icon{width:16px;height:16px}
.front .legal p{color:#687e91;font-size:14px;line-height:1.9}
.front button:focus-visible,.front a:focus-visible{outline:2px solid #60aade;outline-offset:3px}
@media(max-width:360px){.front #app,.front .inside{padding-left:16px;padding-right:16px}.front .hero-title h1{font-size:25px}.front .hero-title .campus-scenery{height:93px}.front .tabs{gap:23px}.front[data-page="my"] #app{padding:24px 18px 12px}.front .my-profile .campus-scenery{height:76px}.front .fixed-actions{padding-left:14px;padding-right:14px}.front .fixed-actions .btn{font-size:13px}.front .fixed-actions .icon{width:18px;height:18px}.front .my-card img{width:76px;height:66px}.front[data-page="share"] .row .btn{padding:9px 8px}.front[data-page="share"] .row{gap:8px}.front .profile-edit{gap:4px}.front header .brand{font-size:16px}}
@media(prefers-reduced-motion:reduce){.front .btn{transition:none}}
