/* homepage demo: the real Ai Book Sort portal flow with made-up data. Colours = portal (public/portal.css). */
#try-it .df{--p-bg:#F8FAFC;--p-ink:#13243B;--p-ink2:#334155;--p-muted:#556274;--p-line:#E2E8F0;--p-card:#fff;--p-accent:#0369A1;--p-accent2:#075985;--p-soft:#E0F2FE;--p-ai:#0891b2;--p-ok:#16a34a;--p-oksoft:#dcfce7;--p-warn:#b45309;--p-warnsoft:#fef3c7;
  max-width:980px;margin:0 auto;color:var(--p-ink);font-family:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif}
#try-it .df-win{background:var(--p-bg);border:1px solid var(--p-line);border-radius:16px;box-shadow:0 2px 4px rgba(15,23,42,.05),0 18px 40px rgba(15,23,42,.08);overflow:hidden}
#try-it .df-bar{display:flex;align-items:center;gap:6px;padding:10px 14px;background:#fff;border-bottom:1px solid var(--p-line);font-size:13px;color:var(--p-muted)}
#try-it .df-bar i{width:10px;height:10px;border-radius:50%;background:#e2e8f0;display:inline-block}
#try-it .df-bar b{margin-left:8px;color:var(--p-ink2);font-weight:600}
#try-it .df-steps{display:flex;gap:4px;list-style:none;margin:0;padding:12px 14px;background:#fff;border-bottom:1px solid var(--p-line);overflow-x:auto}
#try-it .df-steps li{flex:1;min-width:92px;font-size:12.5px;color:var(--p-muted);padding:6px 8px;border-radius:999px;background:var(--p-bg);white-space:nowrap;text-align:center;transition:background .3s,color .3s}
#try-it .df-steps li.on{background:var(--p-accent);color:#fff;font-weight:600}
#try-it .df-steps li.done{background:var(--p-oksoft);color:var(--p-ok)}
#try-it .df-stage{position:relative;min-height:360px;padding:18px}
#try-it .df-scene{display:none;animation:dfIn .35s ease-out}
#try-it .df-scene.on{display:block}
@keyframes dfIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
#try-it .df-card{background:var(--p-card);border:1px solid var(--p-line);border-radius:14px;padding:16px 18px;margin-bottom:12px}
#try-it .df-card h3{margin:0 0 6px;font-size:18px;color:var(--p-ink)}
#try-it .df-muted{color:var(--p-muted);font-size:13px}
#try-it .df-drop{border:2px dashed #93c5fd;border-radius:14px;padding:22px;text-align:center;background:var(--p-soft)}
#try-it .df-file{display:inline-flex;align-items:center;gap:8px;background:#fff;border:1px solid var(--p-line);border-radius:10px;padding:8px 12px;margin:6px;font-size:13px;transition:transform .5s,opacity .5s}
#try-it .df-file.in{transform:translateY(0);opacity:1}#try-it .df-file.out{transform:translateY(-14px);opacity:0}
#try-it .df-btn{display:inline-block;border:0;border-radius:10px;padding:9px 14px;font-weight:600;font-size:14px;cursor:pointer;background:var(--p-accent);color:#fff}
#try-it .df-btn.ghost{background:#fff;color:var(--p-accent);border:1px solid var(--p-line)}
#try-it .df-btn.pulse{box-shadow:0 0 0 0 rgba(3,105,161,.5);animation:dfPulse 1s 2}
@keyframes dfPulse{to{box-shadow:0 0 0 10px rgba(3,105,161,0)}}
#try-it .df-prog{height:10px;border-radius:999px;background:var(--p-line);overflow:hidden;margin:10px 0}
#try-it .df-prog i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--p-ai),var(--p-accent));transition:width .25s linear}
#try-it .df-log{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12.5px;color:var(--p-ink2);min-height:84px}
#try-it .df-log div{padding:2px 0}
#try-it .df-badge{display:inline-block;font-size:12px;border-radius:999px;padding:2px 9px;background:var(--p-bg);color:var(--p-ink2);border:1px solid var(--p-line)}
#try-it .df-badge.ok{background:var(--p-oksoft);color:var(--p-ok);border-color:transparent}
#try-it .df-badge.warn{background:var(--p-warnsoft);color:var(--p-warn);border-color:transparent}
#try-it .df-q{border-left:4px solid var(--p-warn)}
#try-it .df-q.answered{border-left-color:var(--p-ok)}
#try-it .df-q .df-line{display:flex;justify-content:space-between;gap:8px;font-weight:600;margin-bottom:8px}
#try-it .df-q label{display:block;font-size:14px;margin:6px 0}
#try-it .df-q select{font:inherit;padding:7px 9px;border:1px solid var(--p-line);border-radius:8px;background:#fff;max-width:100%}
#try-it .df-q select.flash{outline:3px solid var(--p-soft)}
#try-it table.df-t{width:100%;border-collapse:collapse;font-size:13.5px}
#try-it table.df-t th,#try-it table.df-t td{padding:7px 8px;border-bottom:1px solid var(--p-line);text-align:left}
#try-it table.df-t th{color:var(--p-muted);font-weight:600;font-size:12.5px}
#try-it table.df-t td.num,#try-it table.df-t th.num{text-align:right;font-variant-numeric:tabular-nums}
#try-it table.df-t tr.new{animation:dfIn .3s ease-out}
#try-it .df-dl{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
#try-it .df-ctrl{display:flex;gap:8px;justify-content:center;margin:14px 0 4px;flex-wrap:wrap}
#try-it .df-peek h3.df-peek-h{text-align:center;margin:26px 0 12px;font-size:22px}
#try-it .df-peek-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
#try-it .df-peek .df-card{margin:0;transition:transform .5s,opacity .5s}
#try-it .df-peek .df-card h4{margin:0 0 8px;font-size:15px}
#try-it .df-peek ul{list-style:none;margin:0;padding:0;font-size:13px}
#try-it .df-peek li{padding:7px 0;border-bottom:1px solid var(--p-line)}
#try-it .df-kv{display:flex;justify-content:space-between;font-size:13px;padding:5px 0;border-bottom:1px solid var(--p-line)}
#try-it .df-net{background:var(--p-soft);border-radius:10px;padding:8px 10px;display:flex;justify-content:space-between;font-size:13px;margin-bottom:6px}
#try-it .df-note{text-align:center;font-size:12.5px;color:var(--p-muted);margin-top:10px}
#try-it .df,#try-it .df-win{max-width:100%;min-width:0}#try-it .df-tx-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
@media (max-width:760px){#try-it table.df-t{font-size:12px}#try-it table.df-t th,#try-it table.df-t td{padding:6px 4px}#try-it .df-card{padding:12px}#try-it .df-peek-grid{grid-template-columns:1fr}#try-it .df-stage{padding:12px;min-height:420px}#try-it .df-hide-sm{display:none}#try-it .df-steps li{min-width:auto;flex:0 0 auto}}
@media (prefers-reduced-motion:reduce){#try-it .df-scene,#try-it table.df-t tr.new{animation:none}#try-it .df-prog i{transition:none}}
/* Check your lines — yellow guessed rows, "Saved ✓", report edit box */
#try-it .df-check select{font:inherit;font-size:.85em;padding:2px 4px;border:1px solid #cbd5e1;border-radius:6px;background:#fff;max-width:100%}
#try-it .df-check tr.guess td{background:#fef9c3}
#try-it .df-guess{display:block;font-size:.75em;font-weight:700;color:#854d0e;margin-top:2px}
#try-it .df-saved{color:#15803d;font-weight:700;font-size:.85em}
#try-it .df-saved.pop{animation:dfpop .6s ease}
@keyframes dfpop{0%{opacity:0;transform:translateY(4px)}100%{opacity:1;transform:none}}
#try-it .df-edit{margin:.6rem 0}#try-it .df-edit input{font:inherit;padding:4px 8px;border:1px solid #cbd5e1;border-radius:6px;width:min(100%,320px)}
#try-it .df-check select.flash{outline:3px solid var(--p-soft)}
@media (max-width:560px){#try-it .df-check th:first-child,#try-it .df-check td:first-child{display:none}#try-it .df-check select{max-width:9.5rem}}
#try-it .df-ctrl [hidden]{display:none!important} /* only ONE demo button at a time */
#try-it .df-guess-note{background:#fef9c3;border:1px solid #fde68a;border-radius:8px;padding:6px 10px;font-size:.88em;color:#713f12}
.one-line{white-space:nowrap} /* c015-F3: the AI-guess label stays on one line */
