:root{
  --ink:#0D0D0D; --bg:#FFFFFF; --surface:#F7F7F7;
  --text-secondary:#5D5D5D; --text-muted:#767676;
  --border-default:#CFCFCF; --border-subtle:#E7E7E7;
  --sans:"Noto Sans TC","PingFang TC","Microsoft JhengHei",sans-serif;
  --mono:"SFMono-Regular","JetBrains Mono",Consolas,monospace;
}
*{box-sizing:border-box;}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);}

header{display:flex;align-items:center;justify-content:space-between;
  padding:18px 24px;border-bottom:1px solid var(--ink);
  position:sticky;top:0;background:var(--bg);z-index:5;}
header h1{font-size:22px;font-weight:600;letter-spacing:-0.01em;margin:0;}
.header-right{display:flex;align-items:center;}
#status{font-family:var(--mono);font-size:13px;color:var(--text-muted);margin-right:12px;}

.btn{font-family:var(--sans);font-size:15px;font-weight:600;
  background:var(--ink);color:#fff;border:1px solid var(--ink);
  border-radius:999px;padding:10px 20px;cursor:pointer;}
.btn:hover{background:#000;}
.btn:disabled{opacity:0.4;cursor:default;}
.btn-ghost{font-family:var(--sans);font-size:15px;font-weight:600;
  background:var(--bg);color:var(--ink);border:1px solid var(--border-default);
  border-radius:999px;padding:10px 20px;cursor:pointer;}
.btn-ghost:hover{background:var(--surface);}

main{padding:24px;}
#wall{columns:4 240px;column-gap:16px;}
@media(max-width:900px){#wall{columns:3 200px;}}
@media(max-width:600px){#wall{columns:2 150px;}}

.card{break-inside:avoid;margin:0 0 16px;border:1px solid var(--border-default);
  border-radius:8px;overflow:hidden;background:var(--bg);}
.imgwrap{background:var(--surface);}
.imgwrap img{display:block;width:100%;height:auto;}
.card-foot{display:flex;align-items:center;gap:8px;padding:10px 12px;
  border-top:1px solid var(--border-subtle);}

/* ---------- Prompt 區塊 ---------- */
.prompt{border-top:1px solid var(--border-subtle);}
.prompt-toggle{display:flex;align-items:center;gap:6px;width:100%;
  font-family:var(--sans);font-size:13px;font-weight:600;color:var(--text-secondary);
  background:var(--bg);border:none;padding:9px 12px;cursor:pointer;text-align:left;}
.prompt-toggle:hover{background:var(--surface);color:var(--ink);}
.prompt-toggle .chev{display:inline-block;font-size:10px;transition:transform 0.15s;}
.prompt-toggle.open .chev{transform:rotate(90deg);}
.prompt-body{padding:0 12px 12px;}
.prompt-text{margin:0 0 10px;font-family:var(--mono);font-size:12.5px;line-height:1.55;
  color:var(--ink);background:var(--surface);border:1px solid var(--border-subtle);
  border-radius:6px;padding:10px 12px;white-space:pre-wrap;word-break:break-word;
  max-height:260px;overflow:auto;}
.prompt-copy{font-family:var(--sans);font-size:13px;font-weight:600;
  background:var(--ink);color:#fff;border:1px solid var(--ink);
  border-radius:999px;padding:6px 14px;cursor:pointer;}
.prompt-copy:hover{background:#000;}
.prompt-copy.copied{background:#1a7f37;border-color:#1a7f37;}

.vote{display:inline-flex;align-items:center;gap:6px;font-family:var(--mono);
  font-size:14px;background:var(--bg);color:var(--ink);
  border:1px solid var(--border-default);border-radius:999px;
  padding:6px 14px;cursor:pointer;}
.vote:hover{background:var(--surface);}
.vote.voted{background:var(--ink);color:#fff;border-color:var(--ink);}
.vote .heart{font-size:11px;}
.vote:disabled{opacity:0.5;cursor:default;}

.uploader{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap;font-family:var(--sans);font-size:13px;color:var(--text-secondary);}

.del{margin-left:auto;font-family:var(--sans);font-size:13px;
  background:var(--bg);color:var(--text-secondary);
  border:1px solid var(--border-default);border-radius:999px;
  padding:6px 12px;cursor:pointer;}
.del:hover{background:var(--surface);color:var(--ink);}

/* ---------- Gate ---------- */
#gate{position:fixed;inset:0;background:rgba(255,255,255,0.98);
  display:flex;align-items:center;justify-content:center;z-index:50;}
#gate[hidden]{display:none;}
.gate-box{width:min(420px,90vw);}
.gate-box h2{font-size:28px;font-weight:600;margin:0 0 8px;letter-spacing:-0.02em;}
.gate-box p{color:var(--text-secondary);font-size:15px;margin:0 0 20px;}
.gate-box input{width:100%;font-size:16px;font-family:var(--sans);
  padding:12px 14px;border:1px solid var(--ink);border-radius:8px;margin-bottom:12px;}
.gate-box input:focus{outline:2px solid var(--ink);outline-offset:2px;}
.gate-box .btn{width:100%;padding:12px;}

/* ---------- 上傳 modal ---------- */
#upload-modal{position:fixed;inset:0;background:rgba(13,13,13,0.45);
  display:flex;align-items:center;justify-content:center;z-index:60;padding:20px;}
#upload-modal[hidden]{display:none;}
.modal-box{width:min(460px,100%);max-height:90vh;overflow:auto;background:var(--bg);
  border:1px solid var(--ink);border-radius:12px;padding:22px;}
.modal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;}
.modal-head h2{font-size:20px;font-weight:600;margin:0;}
.modal-close{font-size:26px;line-height:1;background:none;border:none;
  color:var(--text-muted);cursor:pointer;padding:0 4px;}
.modal-close:hover{color:var(--ink);}

.drop-zone{position:relative;border:1.5px dashed var(--border-default);border-radius:8px;
  background:var(--surface);min-height:180px;display:flex;align-items:center;
  justify-content:center;cursor:pointer;overflow:hidden;margin-bottom:16px;}
.drop-zone:hover{border-color:var(--ink);}
.drop-zone.drag{border-color:var(--ink);background:#efefef;}
.drop-hint{text-align:center;font-size:15px;font-weight:600;color:var(--text-secondary);line-height:1.7;}
.drop-hint span{font-size:13px;font-weight:400;color:var(--text-muted);}
.preview{display:block;width:100%;max-height:340px;object-fit:contain;background:var(--surface);}
.preview[hidden]{display:none;}

.field-label{display:block;font-size:14px;font-weight:600;color:var(--ink);margin-bottom:8px;}
.prompt-input{width:100%;font-family:var(--mono);font-size:13px;line-height:1.5;
  padding:12px 14px;border:1px solid var(--border-default);border-radius:8px;
  resize:vertical;margin-bottom:18px;}
.prompt-input:focus{outline:2px solid var(--ink);outline-offset:2px;border-color:var(--ink);}

.modal-foot{display:flex;justify-content:flex-end;gap:10px;}
