/* S10 求人管理（複数求人の一覧・作成・編集／病院プロフィール連携） */
const { useState } = React;

const fInp2 = { width: "100%", padding: "10px 13px", borderRadius: 10, border: "1px solid var(--border-strong)", fontSize: 13.5, fontFamily: "var(--sans)", color: "var(--ink)", fontWeight: 500, background: "#fff", outline: "none" };
const fInpLinked = { ...fInp2, background: "var(--brand-50)", borderColor: "var(--brand-100)", color: "var(--brand-800)", cursor: "not-allowed" };

// 連携の解決：linked が true ならプロフィール値、false なら求人固有値
const resolveContent = (j, P) => (j.linked.content ? P.jobIntro : j.content);
const resolveNeeds = (j, P) => (j.linked.needs ? P.needs.join(" ／ ") : j.needs);
const resolveAppeals = (j, P) => (j.linked.appeals ? P.appeals : j.appeals);

const STATUS = {
  published: { label: "公開中", c: "var(--fit)", bg: "var(--fit-bg)" },
  draft: { label: "下書き", c: "var(--ink-3)", bg: "var(--surface-3)" },
};

/* ============================ エディタ用モジュールスコープコンポーネント ============================ */
/* NOTE: これらを JobEditor 内で定義すると、タイピング時に state 更新 → 再レンダーのたびに
   新しい関数参照になり React が unmount/remount するため input からフォーカスが外れる。
   モジュールスコープに定義することで参照が安定し、タイピングが正常に動作する。 */

function EditorSection({ icon: Icon, title, sub, right, children }) {
  return (
    <div style={{ background: "var(--surface)", border: "1px solid var(--border)", borderRadius: "var(--r-lg)", padding: 22, marginBottom: 16, boxShadow: "var(--shadow-sm)" }}>
      <div style={{ display: "flex", alignItems: "center", gap: 10, marginBottom: sub ? 4 : 14 }}>
        <span style={{ color: "var(--brand-500)" }}><Icon size={19} /></span>
        <h2 className="disp" style={{ fontSize: 16.5, fontWeight: 700, flex: 1 }}>{title}</h2>
        {right}
      </div>
      {sub && <p style={{ fontSize: 12.5, color: "var(--ink-2)", marginBottom: 14, lineHeight: 1.55 }}>{sub}</p>}
      {children}
    </div>
  );
}
const EditorLabel = ({ children }) => (
  <span style={{ fontSize: 12, fontWeight: 700, color: "var(--ink-2)", display: "block", marginBottom: 6 }}>{children}</span>
);
const EditorField = ({ label, children, full }) => (
  <label style={{ display: "block", gridColumn: full ? "1 / -1" : "auto" }}>
    <EditorLabel>{label}</EditorLabel>{children}
  </label>
);
const EditorChip = ({ on, onClick, children, disabled }) => (
  <button onClick={onClick} disabled={disabled} style={{ fontSize: 12.5, fontWeight: 600, padding: "7px 13px", borderRadius: 999, border: on ? "1px solid var(--brand-400)" : "1px solid var(--border-strong)", background: on ? "var(--brand-50)" : "#fff", color: on ? "var(--brand-700)" : "var(--ink-2)", opacity: disabled ? .55 : 1, cursor: disabled ? "not-allowed" : "pointer" }}>{children}</button>
);
function EditorSelect({ value, onChange, options }) {
  return (
    <div style={{ position: "relative" }}>
      <select value={value} onChange={(e) => onChange(e.target.value)} style={{ ...fInp2, appearance: "none", WebkitAppearance: "none", paddingRight: 34, cursor: "pointer" }}>
        {options.map((o) => <option key={o} value={o}>{o}</option>)}
      </select>
      <span style={{ position: "absolute", right: 11, top: "50%", transform: "translateY(-50%)", pointerEvents: "none", color: "var(--ink-3)", display: "flex" }}><window.SV_Icons.chevronDown size={16} /></span>
    </div>
  );
}
const EditorLinkToggle = ({ field, linked, onToggle }) => {
  const on = linked[field];
  return (
    <button onClick={() => onToggle(field)} style={{ display: "inline-flex", alignItems: "center", gap: 5, fontSize: 11.5, fontWeight: 700, padding: "5px 11px", borderRadius: 999, border: on ? "1px solid var(--brand-400)" : "1px solid var(--border-strong)", background: on ? "var(--brand-50)" : "#fff", color: on ? "var(--brand-700)" : "var(--ink-3)" }}>
      <window.SV_Icons.link size={13} />{on ? "プロフィール連携中" : "連携OFF（個別入力）"}
    </button>
  );
};

function JobPostScreen({ nav, onScout }) {
  const { HOSPITAL, PROFILE, JOBS } = window.SV_DATA;
  const { Button, Card, Note, Pill } = window.SV_UI;
  const Icons = window.SV_Icons;

  const [jobs, setJobs] = useState(() => JSON.parse(JSON.stringify(JOBS)));
  const [view, setView] = useState("list");      // "list" | "editor"
  const [editing, setEditing] = useState(null);  // 編集中の作業コピー

  const newJob = () => ({
    id: "job-" + Date.now(), title: "", roles: ["獣医師"], employment: "正社員（新卒）",
    headcount: 1, start: "2027年4月", location: "東久留米院", payMin: 25, payMax: 35,
    hours: "9:00–18:00（実働8h・シフト制）", holidays: "週休2日制",
    benefits: ["社会保険完備"], content: "", appeals: [], needs: "",
    plan: "プレミアム", status: "draft", applicants: 0, updated: "今日",
    linked: { content: true, appeals: true, needs: true },
  });

  const openEditor = (job) => { setEditing(JSON.parse(JSON.stringify(job))); setView("editor"); };
  const saveJob = (status) => {
    const e = { ...editing, status: status || editing.status, updated: "今日" };
    setJobs((prev) => prev.some((x) => x.id === e.id) ? prev.map((x) => (x.id === e.id ? e : x)) : [e, ...prev]);
    setView("list");
  };
  const duplicateJob = (job) => {
    const copy = { ...JSON.parse(JSON.stringify(job)), id: "job-" + Date.now(), title: job.title + "（コピー）", status: "draft", applicants: 0, updated: "今日" };
    setJobs((prev) => [copy, ...prev]);
  };
  const removeJob = (id) => setJobs((prev) => prev.filter((x) => x.id !== id));
  const toggleStatus = (id) => setJobs((prev) => prev.map((x) => (x.id === id ? { ...x, status: x.status === "published" ? "draft" : "published" } : x)));

  return view === "list"
    ? <JobList {...{ jobs, PROFILE, HOSPITAL, openEditor, newJob, duplicateJob, removeJob, toggleStatus, nav, Icons, Button, Card, Note, Pill }} />
    : <JobEditor {...{ editing, setEditing, saveJob, PROFILE, HOSPITAL, Icons, Button, Card, Note, Pill }} />;
}

/* ============================ 一覧 ============================ */
function JobList({ jobs, PROFILE, HOSPITAL, openEditor, newJob, duplicateJob, removeJob, toggleStatus, nav, Icons, Button, Card, Note }) {
  const published = jobs.filter((j) => j.status === "published").length;

  const IconBtn = ({ icon: Icon, label, onClick, danger }) => (
    <button onClick={onClick} title={label} style={{ display: "inline-flex", alignItems: "center", gap: 5, fontSize: 12, fontWeight: 600, padding: "6px 11px", borderRadius: 8, border: "1px solid var(--border-strong)", background: "#fff", color: danger ? "var(--miss)" : "var(--ink-2)" }}>
      <Icon size={14} />{label}
    </button>
  );

  return (
    <div>
      <div style={{ display: "flex", alignItems: "flex-end", justifyContent: "space-between", gap: 16, flexWrap: "wrap", marginBottom: 18 }}>
        <div>
          <div style={{ display: "flex", alignItems: "center", gap: 7, color: "var(--brand-600)", fontSize: 12.5, fontWeight: 700, marginBottom: 7 }}><Icons.job size={15} />求人管理</div>
          <h1 className="disp" style={{ fontSize: 23, fontWeight: 800 }}>求人 <span className="num" style={{ color: "var(--brand-700)" }}>{jobs.length}</span> 件 <span style={{ fontSize: 14, fontWeight: 600, color: "var(--ink-3)", whiteSpace: "nowrap" }}>（公開中 {published}）</span></h1>
        </div>
        <Button variant="primary" icon={Icons.plus} onClick={() => openEditor(newJob())}>新規作成</Button>
      </div>

      <div style={{ marginBottom: 18 }}>
        <Note tone="brand" icon={Icons.link}>各求人は<b>病院プロフィール</b>（診療内容・アピール・求める人材像）と連携できます。連携中の項目はプロフィールを編集すると自動で全求人に反映され、個別に上書きも可能です。<button onClick={() => nav.go("profile")} style={{ color: "var(--brand-700)", fontWeight: 700, textDecoration: "underline", marginLeft: 4 }}>プロフィールを開く</button></Note>
      </div>

      <div style={{ display: "flex", flexDirection: "column", gap: 14 }}>
        {jobs.map((j) => {
          const st = STATUS[j.status];
          const linkCount = Object.values(j.linked).filter(Boolean).length;
          return (
            <Card key={j.id} pad={18} hover onClick={() => openEditor(j)} style={{ display: "flex", gap: 18, alignItems: "flex-start" }}>
              <div style={{ flex: 1, minWidth: 0 }}>
                <div style={{ display: "flex", alignItems: "center", gap: 9, flexWrap: "wrap", marginBottom: 8 }}>
                  <span style={{ fontSize: 11.5, fontWeight: 700, color: st.c, background: st.bg, borderRadius: 999, padding: "3px 11px" }}>{st.label}</span>
                  {j.roles.map((r) => <span key={r} style={{ fontSize: 11.5, fontWeight: 600, color: "var(--brand-700)", background: "var(--brand-50)", border: "1px solid var(--brand-100)", borderRadius: 999, padding: "3px 10px" }}>{r}</span>)}
                  {linkCount > 0 && <span style={{ display: "inline-flex", alignItems: "center", gap: 4, fontSize: 11, fontWeight: 600, color: "var(--ink-3)", whiteSpace: "nowrap" }}><Icons.link size={12} />連携 {linkCount}</span>}
                </div>
                <div className="disp" style={{ fontSize: 16, fontWeight: 700, marginBottom: 9 }}>{j.title || "（無題の求人）"}</div>
                <div style={{ display: "flex", flexWrap: "wrap", gap: "6px 18px", fontSize: 12.5, color: "var(--ink-2)" }}>
                  <Fact icon={Icons.user}>{j.payMin}〜{j.payMax}万円</Fact>
                  <Fact icon={Icons.calendar}>{j.start}</Fact>
                  <Fact icon={Icons.location}>{j.location}</Fact>
                  <Fact icon={Icons.job}>{j.employment}・{j.headcount}名</Fact>
                </div>
              </div>
              <div style={{ display: "flex", flexDirection: "column", alignItems: "flex-end", gap: 10, flexShrink: 0 }}>
                <div style={{ fontSize: 12, color: "var(--ink-2)" }}>応募 <b className="num" style={{ color: "var(--ink)", fontSize: 14 }}>{j.applicants}</b> 名</div>
                <div style={{ display: "flex", gap: 7, flexWrap: "wrap", justifyContent: "flex-end" }} onClick={(e) => e.stopPropagation()}>
                  <IconBtn icon={Icons.edit} label="編集" onClick={() => openEditor(j)} />
                  <IconBtn icon={j.status === "published" ? Icons.lock : Icons.check} label={j.status === "published" ? "下書きに戻す" : "公開する"} onClick={() => toggleStatus(j.id)} />
                  <IconBtn icon={Icons.copy} label="複製" onClick={() => duplicateJob(j)} />
                  <IconBtn icon={Icons.trash} label="削除" danger onClick={() => removeJob(j.id)} />
                </div>
                <div style={{ fontSize: 11, color: "var(--ink-3)" }}>更新 {j.updated}</div>
              </div>
            </Card>
          );
        })}
        {jobs.length === 0 && (
          <div style={{ textAlign: "center", padding: 50, color: "var(--ink-3)", fontSize: 13 }}>
            求人がありません。
            <div style={{ marginTop: 14 }}><Button variant="primary" size="sm" icon={Icons.plus} onClick={() => openEditor(newJob())}>最初の求人を作成</Button></div>
          </div>
        )}
      </div>
    </div>
  );
}
const Fact = ({ icon: Icon, children }) => (
  <span style={{ display: "inline-flex", alignItems: "center", gap: 6 }}><span style={{ color: "var(--brand-500)", display: "flex" }}><Icon size={14} /></span>{children}</span>
);

/* ============================ エディタ ============================ */
function JobEditor({ editing: j, setEditing, saveJob, PROFILE, HOSPITAL, Icons, Button, Card, Note }) {
  const set = (patch) => setEditing((p) => ({ ...p, ...patch }));
  const toggleIn = (key, v) => set({ [key]: j[key].includes(v) ? j[key].filter((x) => x !== v) : [...j[key], v] });
  const [benefitInput, setBenefitInput] = useState("");
  const addBenefit = () => { const v = benefitInput.trim(); if (v && !j.benefits.includes(v)) set({ benefits: [...j.benefits, v] }); setBenefitInput(""); };

  // 連携トグル：OFF にするときはプロフィール値を求人固有値へコピーして編集可能に
  const toggleLink = (field) => setEditing((p) => {
    const wasLinked = p.linked[field];
    const linked = { ...p.linked, [field]: !wasLinked };
    const patch = { linked };
    if (wasLinked) {
      if (field === "content") patch.content = PROFILE.jobIntro;
      if (field === "needs") patch.needs = PROFILE.needs.join(" ／ ");
      if (field === "appeals") patch.appeals = [...PROFILE.appeals];
    }
    return { ...p, ...patch };
  });

  const roleOpts = ["獣医師", "動物看護師", "トリマー", "受付・事務"];
  const empOpts = ["正社員（新卒）", "正社員（中途）", "パート・アルバイト"];
  const startOpts = ["2027年4月", "2028年4月", "通年・応相談"];
  const locOpts = ["東久留米院", "武蔵小金井院", "両院（応相談）"];
  const planOpts = ["プレミアム", "スポンサー"];
  const appealPresets = ["担当医制", "EBM（根拠重視）", "腫瘍・先端医療", "大学病院連携", "教育体制充実", "残業少なめ", "女性活躍", "院長が若手"];

  const contentVal = resolveContent(j, PROFILE);
  const needsVal = resolveNeeds(j, PROFILE);
  const appealsVal = resolveAppeals(j, PROFILE);

  return (
    <div>
      <div style={{ display: "flex", alignItems: "center", gap: 12, marginBottom: 18 }}>
        <button onClick={() => saveJob()} style={{ display: "flex", alignItems: "center", gap: 5, color: "var(--ink-2)", fontSize: 13, fontWeight: 600, padding: "7px 12px", borderRadius: 9, background: "var(--surface-3)" }}><Icons.arrowLeft size={16} />一覧へ</button>
        <div>
          <div style={{ display: "flex", alignItems: "center", gap: 7, color: "var(--brand-600)", fontSize: 12.5, fontWeight: 700 }}><Icons.edit size={14} />求人を編集</div>
          <h1 className="disp" style={{ fontSize: 20, fontWeight: 800, marginTop: 2 }}>学生に見せる求人をつくる</h1>
        </div>
      </div>

      <div style={{ display: "grid", gridTemplateColumns: "1fr 372px", gap: 24, alignItems: "start" }}>
        {/* 左：フォーム */}
        <div>
          <EditorSection icon={Icons.edit} title="募集タイトル">
            <input value={j.title} onChange={(e) => set({ title: e.target.value })} placeholder="例：獣医師募集｜担当医制で先端医療を深める" style={fInp2} />
          </EditorSection>

          <EditorSection icon={Icons.job} title="募集要項">
            <EditorField label="募集職種（複数可）">
              <div style={{ display: "flex", flexWrap: "wrap", gap: 7 }}>{roleOpts.map((r) => <EditorChip key={r} on={j.roles.includes(r)} onClick={() => toggleIn("roles", r)}>{r}</EditorChip>)}</div>
            </EditorField>
            <div style={{ display: "grid", gridTemplateColumns: "1fr 1fr", gap: 14, marginTop: 16 }}>
              <EditorField label="雇用形態"><EditorSelect value={j.employment} onChange={(v) => set({ employment: v })} options={empOpts} /></EditorField>
              <EditorField label="採用人数">
                <div style={{ display: "flex", alignItems: "center", gap: 8 }}>
                  <input type="number" min={1} max={20} value={j.headcount} onChange={(e) => set({ headcount: Math.max(1, +e.target.value || 1) })} style={{ ...fInp2, width: 90 }} /><span style={{ fontSize: 13, color: "var(--ink-2)" }}>名</span>
                </div>
              </EditorField>
              <EditorField label="就業開始時期"><EditorSelect value={j.start} onChange={(v) => set({ start: v })} options={startOpts} /></EditorField>
              <EditorField label="勤務地"><EditorSelect value={j.location} onChange={(v) => set({ location: v })} options={locOpts} /></EditorField>
            </div>
          </EditorSection>

          <EditorSection icon={Icons.user} title="待遇・条件">
            <EditorField label="給与レンジ（月給・初任給目安）">
              <div style={{ display: "flex", alignItems: "center", gap: 10 }}>
                <div style={{ display: "flex", alignItems: "center", gap: 6 }}><input type="number" value={j.payMin} onChange={(e) => set({ payMin: +e.target.value || 0 })} style={{ ...fInp2, width: 90 }} /><span style={{ fontSize: 13, color: "var(--ink-2)" }}>万円</span></div>
                <span style={{ color: "var(--ink-3)" }}>〜</span>
                <div style={{ display: "flex", alignItems: "center", gap: 6 }}><input type="number" value={j.payMax} onChange={(e) => set({ payMax: +e.target.value || 0 })} style={{ ...fInp2, width: 90 }} /><span style={{ fontSize: 13, color: "var(--ink-2)" }}>万円</span></div>
              </div>
            </EditorField>
            <div style={{ display: "grid", gridTemplateColumns: "1fr 1fr", gap: 14, marginTop: 16 }}>
              <EditorField label="勤務時間"><input value={j.hours} onChange={(e) => set({ hours: e.target.value })} style={fInp2} /></EditorField>
              <EditorField label="休日・休暇"><input value={j.holidays} onChange={(e) => set({ holidays: e.target.value })} style={fInp2} /></EditorField>
            </div>
            <div style={{ marginTop: 16 }}>
              <EditorLabel>福利厚生・特徴（タグ）</EditorLabel>
              <div style={{ display: "flex", flexWrap: "wrap", gap: 7, marginBottom: 10 }}>
                {j.benefits.map((b) => (
                  <span key={b} style={{ display: "inline-flex", alignItems: "center", gap: 6, fontSize: 12.5, fontWeight: 600, color: "var(--brand-800)", background: "var(--brand-50)", border: "1px solid var(--brand-100)", borderRadius: 999, padding: "6px 8px 6px 12px" }}>{b}<button onClick={() => set({ benefits: j.benefits.filter((x) => x !== b) })} style={{ color: "var(--brand-600)", display: "flex" }}><Icons.x size={13} /></button></span>
                ))}
              </div>
              <div style={{ display: "flex", gap: 8 }}>
                <input value={benefitInput} onChange={(e) => setBenefitInput(e.target.value)} onKeyDown={(e) => e.key === "Enter" && (e.preventDefault(), addBenefit())} placeholder="例：寮あり・退職金制度…" style={{ ...fInp2, flex: 1 }} />
                <Button variant="ghost" size="sm" icon={Icons.plus} onClick={addBenefit}>追加</Button>
              </div>
            </div>
          </EditorSection>

          {/* 仕事内容（連携可） */}
          <EditorSection icon={Icons.shield} title="仕事内容" right={<EditorLinkToggle field="content" linked={j.linked} onToggle={toggleLink} />}>
            <textarea value={contentVal} disabled={j.linked.content} onChange={(e) => set({ content: e.target.value })} rows={4} style={{ ...(j.linked.content ? fInpLinked : fInp2), lineHeight: 1.65, resize: "vertical" }} />
            {j.linked.content && <div style={{ fontSize: 11, color: "var(--ink-3)", marginTop: 7, display: "flex", alignItems: "center", gap: 5 }}><Icons.link size={12} />病院プロフィールの診療内容を表示中。個別に書き換えるには連携をOFFにします。</div>}
          </EditorSection>

          {/* アピール（連携可） */}
          <EditorSection icon={Icons.sparkle} title="アピールポイント" right={<EditorLinkToggle field="appeals" linked={j.linked} onToggle={toggleLink} />}>
            {j.linked.appeals ? (
              <div>
                <div style={{ display: "flex", flexWrap: "wrap", gap: 7 }}>{appealsVal.map((a) => <span key={a} style={{ display: "inline-flex", alignItems: "center", gap: 5, fontSize: 12.5, fontWeight: 600, color: "var(--brand-700)", background: "var(--brand-50)", border: "1px solid var(--brand-100)", borderRadius: 999, padding: "6px 12px" }}><Icons.check size={13} />{a}</span>)}</div>
                <div style={{ fontSize: 11, color: "var(--ink-3)", marginTop: 9, display: "flex", alignItems: "center", gap: 5 }}><Icons.link size={12} />プロフィールのアピールを表示中。</div>
              </div>
            ) : (
              <div style={{ display: "flex", flexWrap: "wrap", gap: 7 }}>{appealPresets.map((a) => <EditorChip key={a} on={j.appeals.includes(a)} onClick={() => toggleIn("appeals", a)}>{a}</EditorChip>)}</div>
            )}
          </EditorSection>

          {/* 求める人材像（連携可・非公開） */}
          <EditorSection icon={Icons.sparkle} title="求める人材像（平場のニーズ・非公開）" right={<EditorLinkToggle field="needs" linked={j.linked} onToggle={toggleLink} />} sub="学生には掲載されません。SolaVet が内部でソラタイプの軸へ翻訳し、相性の良い候補を並べます。">
            <textarea value={needsVal} disabled={j.linked.needs} onChange={(e) => set({ needs: e.target.value })} rows={3} style={{ ...(j.linked.needs ? fInpLinked : fInp2), lineHeight: 1.65, resize: "vertical" }} />
            {j.linked.needs && <div style={{ fontSize: 11, color: "var(--ink-3)", marginTop: 7, display: "flex", alignItems: "center", gap: 5 }}><Icons.link size={12} />病院プロフィールの「求める人材像」を表示中。</div>}
          </EditorSection>

          <EditorSection icon={Icons.lock} title="公開設定">
            <EditorField label="掲載プラン"><EditorSelect value={j.plan} onChange={(v) => set({ plan: v })} options={planOpts} /></EditorField>
          </EditorSection>
        </div>

        {/* 右：プレビュー＋保存 */}
        <div style={{ position: "sticky", top: 22, display: "flex", flexDirection: "column", gap: 14 }}>
          <div style={{ fontSize: 11.5, fontWeight: 700, color: "var(--ink-3)", letterSpacing: ".04em", display: "flex", alignItems: "center", gap: 6 }}><Icons.search size={13} />学生に見える求人プレビュー</div>
          <Card pad={0} style={{ overflow: "hidden" }}>
            <div style={{ background: "var(--brand-800)", color: "#fff", padding: "16px 18px" }}>
              <div style={{ display: "flex", alignItems: "center", gap: 9, marginBottom: 9 }}>
                <span style={{ width: 30, height: 30, borderRadius: 8, background: "rgba(255,255,255,.16)", display: "grid", placeItems: "center" }}><Icons.paw size={17} /></span>
                <div style={{ fontSize: 12.5, fontWeight: 700 }}>{HOSPITAL.name}<span style={{ opacity: .7, fontWeight: 500 }}>・{j.location}</span></div>
              </div>
              <div className="disp" style={{ fontSize: 15.5, fontWeight: 800, lineHeight: 1.45 }}>{j.title || "（タイトル未入力）"}</div>
              <div style={{ display: "flex", flexWrap: "wrap", gap: 6, marginTop: 11 }}>{j.roles.map((r) => <span key={r} style={{ fontSize: 11, fontWeight: 700, background: "rgba(255,255,255,.18)", borderRadius: 999, padding: "3px 10px" }}>{r}</span>)}</div>
            </div>
            <div style={{ padding: "14px 18px", display: "grid", gridTemplateColumns: "1fr 1fr", gap: 12, borderBottom: "1px solid var(--border)" }}>
              <PreviewFact icon={Icons.user} label="給与" value={`${j.payMin}〜${j.payMax}万円`} />
              <PreviewFact icon={Icons.calendar} label="開始" value={j.start} />
              <PreviewFact icon={Icons.job} label="雇用形態" value={j.employment} />
              <PreviewFact icon={Icons.clock} label="勤務" value={j.hours} />
            </div>
            {appealsVal.length > 0 && (
              <div style={{ padding: "14px 18px", borderBottom: "1px solid var(--border)" }}>
                <div style={{ fontSize: 11, fontWeight: 700, color: "var(--ink-3)", marginBottom: 8 }}>この病院の特徴</div>
                <div style={{ display: "flex", flexWrap: "wrap", gap: 6 }}>{appealsVal.map((a) => <span key={a} style={{ display: "inline-flex", alignItems: "center", gap: 5, fontSize: 11.5, fontWeight: 600, color: "var(--brand-700)", background: "var(--brand-50)", border: "1px solid var(--brand-100)", borderRadius: 999, padding: "4px 10px" }}><Icons.check size={12} />{a}</span>)}</div>
              </div>
            )}
            <div style={{ padding: "14px 18px" }}>
              <div style={{ fontSize: 11, fontWeight: 700, color: "var(--ink-3)", marginBottom: 7 }}>仕事内容</div>
              <p style={{ fontSize: 12.5, color: "var(--ink)", lineHeight: 1.7 }}>{contentVal || "（未入力）"}</p>
              {j.benefits.length > 0 && <div style={{ marginTop: 12, display: "flex", flexWrap: "wrap", gap: 6 }}>{j.benefits.map((b) => <span key={b} style={{ fontSize: 11, color: "var(--ink-2)", background: "var(--surface-3)", borderRadius: 7, padding: "3px 9px" }}>{b}</span>)}</div>}
            </div>
            <div style={{ padding: "12px 18px 16px", background: "var(--surface-2)", borderTop: "1px solid var(--border)" }}>
              <div style={{ width: "100%", textAlign: "center", padding: "11px", borderRadius: 11, background: "var(--brand-600)", color: "#fff", fontSize: 13.5, fontWeight: 700 }}>応募する（学生側）</div>
            </div>
          </Card>
          <div style={{ display: "flex", gap: 9 }}>
            <Button variant="ghost" style={{ flex: 1 }} icon={Icons.edit} onClick={() => saveJob("draft")}>下書き保存</Button>
            <Button variant="primary" style={{ flex: 1 }} icon={Icons.check} onClick={() => saveJob("published")}>公開する</Button>
          </div>
        </div>
      </div>
    </div>
  );
}

function PreviewFact({ icon: Icon, label, value }) {
  return (
    <div style={{ display: "flex", gap: 8, alignItems: "flex-start" }}>
      <span style={{ color: "var(--brand-500)", marginTop: 1, flexShrink: 0 }}><Icon size={15} /></span>
      <div style={{ minWidth: 0 }}>
        <div style={{ fontSize: 10.5, color: "var(--ink-3)", fontWeight: 600 }}>{label}</div>
        <div style={{ fontSize: 12.5, fontWeight: 700, color: "var(--ink)", lineHeight: 1.4 }}>{value}</div>
      </div>
    </div>
  );
}

window.SV_JobPost = JobPostScreen;
