:root{--p:#0f766e;--p2:#115e59;--bg:#f5f8f7;--card:#fff;--t:#1f2937;--m:#6b7280;--line:#e5e7eb;--warn:#b45309;--red:#b91c1c;--r:12px}
*{box-sizing:border-box}body{margin:0;font:16px/1.6 "Noto Sans TC",system-ui,sans-serif;background:var(--bg);color:var(--t)}
a{color:var(--p);text-decoration:none}h1{font-size:1.5rem;margin:.4rem 0 1rem}h2{font-size:1.15rem}h3{margin:.2rem 0;font-size:1rem}
.wrap{max-width:1000px;margin:0 auto;padding:16px;min-height:70vh}.muted,small{color:var(--m)}
.top{display:flex;justify-content:space-between;align-items:center;padding:10px 16px;background:#fff;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:5}
.logo{font-weight:700;font-size:1.15rem}nav{display:flex;gap:14px;align-items:center}
footer{text-align:center;color:var(--m);font-size:.85rem;padding:24px 16px}
.btn{display:inline-block;background:var(--p);color:#fff;border:1px solid var(--p);padding:9px 18px;border-radius:999px;font:inherit;font-weight:500;cursor:pointer}
.btn:hover{background:var(--p2)}.btn:disabled{opacity:.5;cursor:wait}.btn.sm{padding:5px 14px}
.btn.ghost{background:#fff;color:var(--p)}.btn.ghost:hover{background:#ecfdf5}.btn.danger{background:#fff;color:var(--red);border-color:var(--red)}
input,select,textarea{width:100%;padding:10px 12px;border:1px solid #cbd5d1;border-radius:10px;font:inherit;background:#fff}
input:focus,select:focus,textarea:focus{outline:2px solid #99f6e4;border-color:var(--p)}
.hero{background:linear-gradient(135deg,#ccfbf1,#ecfccb);border-radius:var(--r);padding:28px 20px;margin-bottom:20px}.hero h1{margin:0}
.search{display:flex;gap:8px;margin:12px 0}.filters{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;margin-bottom:16px}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:14px}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);overflow:hidden;color:inherit;transition:.15s}.card:hover{box-shadow:0 6px 18px #0001;transform:translateY(-2px)}
.card img{width:100%;aspect-ratio:4/3;object-fit:cover;display:block;background:#e5e7eb}.cb{padding:10px 12px}.cb h3{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.foot{display:flex;justify-content:space-between;align-items:center;margin-top:6px}.pr{color:var(--p2)}.pr.sw{color:#a16207}
.badges{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.b{font-size:.78rem;padding:2px 9px;border-radius:999px;background:#f1f5f9;color:#334155}
.b.cond{background:#dcfce7;color:#166534}.b.dept{background:#e0f2fe;color:#075985}.b.st.active{background:#dcfce7}.b.st.closed{background:#e5e7eb}.b.st.hidden{background:#fee2e2;color:var(--red)}
.sk{height:250px;background:linear-gradient(90deg,#eef2f1 25%,#f8fafa 50%,#eef2f1 75%);background-size:200% 100%;animation:sh 1.2s infinite}@keyframes sh{to{background-position:-200% 0}}
.state{text-align:center;padding:48px 16px}.state .ico{font-size:2.6rem}.state p{color:var(--m)}
.item{display:grid;grid-template-columns:1fr 1fr;gap:20px}@media(max-width:720px){.item{grid-template-columns:1fr}}
.gal img{width:100%;border-radius:var(--r);margin-bottom:8px;display:block}.price{font-size:1.6rem;font-weight:700;color:var(--p2);margin:6px 0}
dl{display:grid;grid-template-columns:90px 1fr;gap:6px 10px;margin:12px 0}dt{color:var(--m)}dd{margin:0}
.box{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:16px;margin-top:20px}
.thread{border-top:1px solid var(--line);padding:10px 0}.thread p{margin:4px 0}.thread .me{color:var(--p2)}.mf{display:flex;gap:8px;margin-top:8px}
.form{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:18px;max-width:640px}
.fld{margin-bottom:14px}.fld label{display:block;font-weight:500;margin-bottom:4px}.hint{display:block;margin-top:3px}.err{display:block;color:var(--red);font-size:.88rem}.bad input,.bad select,.bad textarea{border-color:var(--red)}
.prog{height:10px;background:#e5e7eb;border-radius:9px;overflow:hidden;margin:10px 0}.prog i{display:block;height:100%;width:0;background:var(--p);transition:.2s}
.row{display:flex;gap:12px;align-items:center;justify-content:space-between;flex-wrap:wrap}.mine{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:10px;margin-bottom:10px;flex-wrap:nowrap}
.mine img{width:72px;height:72px;object-fit:cover;border-radius:8px}.grow{flex:1;min-width:0}.acts{display:flex;gap:6px;flex-wrap:wrap}
.warn{background:#fffbeb;color:var(--warn);border-radius:8px;padding:6px 10px;margin-top:6px;font-size:.88rem}
.rep summary{cursor:pointer;color:var(--m)}.rep form{display:flex;gap:8px;margin-top:8px}.back{display:inline-block;margin-bottom:8px}
#toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%,80px);background:#111827;color:#fff;padding:10px 18px;border-radius:999px;transition:.25s;opacity:0}#toast.show{transform:translate(-50%,0);opacity:1}
@media(max-width:560px){.mine{flex-wrap:wrap}}
/* CampusSwap 2026-10 final dashboard */
.eyebrow{display:inline-block;font-size:.82rem;font-weight:700;color:var(--p2);background:#fff9;padding:4px 10px;border-radius:999px;margin-bottom:8px}.hero p{max-width:680px}.hero-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px}.member-hero{background:linear-gradient(135deg,#ccfbf1,#e0f2fe)}.guest-hero{padding:42px 28px}.section-head{display:flex;align-items:end;justify-content:space-between;gap:12px;margin:24px 0 12px}.section-head h2,.section-head p{margin:0}.quick-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:18px 0}.quick-grid a,.college-grid a{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:18px;color:var(--t);display:flex;flex-direction:column;gap:3px}.quick-grid a:hover,.college-grid a:hover{border-color:#99d8d2;box-shadow:0 5px 16px #0000000c}.quick-grid span{font-size:.88rem;color:var(--m)}.college-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.college-grid a{font-size:1.05rem;align-items:center;text-align:center}.college-grid a:first-letter{font-size:1.5rem}.info-strip{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:24px}.info-strip>div{background:#fff;border:1px solid var(--line);padding:14px;border-radius:var(--r);display:flex;flex-direction:column}.info-strip span,.meta-line{font-size:.85rem;color:var(--m)}.meta-line{margin-top:5px}.photo-fallback{width:100%;aspect-ratio:4/3;background:#eef2f1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;color:var(--m);font-size:1.7rem}.photo-fallback span{font-size:.82rem}.photo-fallback.detail{aspect-ratio:4/3;border-radius:var(--r);margin-bottom:8px}.fixed-value{padding:10px 12px;border:1px solid #a7f3d0;background:#ecfdf5;border-radius:10px;color:#065f46;font-weight:700}.user-chip{background:#f1f5f9;border-radius:999px;padding:5px 10px;font-size:.86rem}.nav-logout{border:0;background:transparent;color:var(--p);font:inherit;cursor:pointer;padding:5px}.nav-logout:hover{text-decoration:underline}.mine-photo{width:72px;height:72px;flex:0 0 72px;overflow:hidden;border-radius:8px}.mine-photo img,.mine-photo .photo-fallback{width:72px;height:72px;aspect-ratio:auto;object-fit:cover}.mine-photo .photo-fallback{font-size:1rem}.mine-photo .photo-fallback span{display:none}
@media(max-width:720px){.quick-grid,.college-grid,.info-strip{grid-template-columns:1fr}.guest-hero{padding:28px 20px}.user-chip{display:none}.top{align-items:flex-start}.top nav{flex-wrap:wrap;justify-content:flex-end}.section-head{align-items:flex-start}}

.edit-photo-preview{display:flex;flex-wrap:wrap;gap:12px;margin:12px 0}.edit-photo-preview img{width:120px;height:140px;object-fit:contain;border-radius:8px;background:#eef2f1}.mf{flex-wrap:wrap}.mf .err{flex-basis:100%}
