Files
illustrated-algorithm/shared/style.css
T
2026-08-24 04:35:13 +00:00

151 lines
8.9 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* ===== Illustrated Algorithm – Shared Styles ===== */
:root {
--bg: #0f1117;
--surface: #1a1d27;
--surface2: #242836;
--border: #2e3347;
--text: #e4e6f0;
--text2: #9499b3;
--accent: #6c7eff;
--accent2: #5a6adf;
--green: #3dd68c;
--green-dim: rgba(61,214,140,.15);
--red: #f06060;
--red-dim: rgba(240,96,96,.15);
--orange: #f5a623;
--orange-dim: rgba(245,166,35,.15);
--blue: #4da6ff;
--blue-dim: rgba(77,166,255,.15);
--purple: #b47aff;
--purple-dim: rgba(180,122,255,.15);
--cyan: #22d3ee;
--yellow: #facc15;
--font: 'Inter','SF Pro Display',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
--mono: 'JetBrains Mono','Fira Code','SF Mono',Menlo,Consolas,monospace;
--radius: 8px;
--shadow: 0 2px 12px rgba(0,0,0,.35);
}
*{margin:0;padding:0;box-sizing:border-box;}
html{font-size:15px;-webkit-font-smoothing:antialiased;}
body{background:var(--bg);color:var(--text);font-family:var(--font);line-height:1.6;padding:0 0 48px;}
.container{max-width:1080px;margin:0 auto;padding:24px 20px;}
h1{font-size:1.7rem;font-weight:700;margin-bottom:6px;display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.badge{font-size:.7rem;font-weight:600;padding:2px 10px;border-radius:20px;letter-spacing:.5px;text-transform:uppercase;vertical-align:middle;}
.badge.easy{background:var(--green-dim);color:var(--green);}
.badge.medium{background:var(--orange-dim);color:var(--orange);}
.badge.hard{background:var(--red-dim);color:var(--red);}
.subtitle{color:var(--text2);font-size:.85rem;margin-bottom:18px;}
/* Controls */
.controls{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:14px;background:var(--surface);padding:10px 14px;border-radius:var(--radius);border:1px solid var(--border);}
.controls label{font-size:.82rem;color:var(--text2);}
.controls input[type=text]{background:var(--surface2);border:1px solid var(--border);color:var(--text);padding:6px 10px;border-radius:6px;font-family:var(--mono);font-size:.82rem;width:180px;}
.controls select{background:var(--surface2);border:1px solid var(--border);color:var(--text);padding:5px 8px;border-radius:6px;font-size:.82rem;}
.controls button{padding:6px 14px;border:none;border-radius:6px;font-size:.82rem;cursor:pointer;font-weight:600;transition:all .15s;}
.controls button.primary{background:var(--accent);color:#fff;}
.controls button.primary:hover{background:var(--accent2);}
.controls button:not(.primary){background:var(--surface2);color:var(--text);border:1px solid var(--border);}
.controls button:not(.primary):hover{background:var(--border);}
/* Pipeline */
.pipeline{display:flex;gap:3px;margin-bottom:10px;flex-wrap:wrap;}
.pipeline .step-dot{width:28px;height:6px;border-radius:3px;background:var(--surface2);transition:background .2s;}
.pipeline .step-dot.done{background:var(--accent);}
.pipeline .step-dot.active{background:var(--orange);}
/* Hint */
.hint{padding:10px 14px;border-radius:var(--radius);margin-bottom:14px;font-size:.85rem;line-height:1.6;}
.hint.info{background:var(--blue-dim);color:var(--blue);border:1px solid rgba(77,166,255,.25);}
.hint #stepInfo{font-weight:700;}
/* Panels */
.panels{display:grid;grid-template-columns:1fr;gap:14px;margin-bottom:14px;}
.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px;}
.panel h3{font-size:.9rem;font-weight:700;margin-bottom:10px;color:var(--text2);}
.panel-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;}
@media(max-width:700px){.panel-grid{grid-template-columns:1fr;}}
/* Vis area */
.vis-area{min-height:120px;position:relative;}
.vis-area svg{display:block;margin:0 auto;}
/* Array rendering */
.arr-row{display:flex;align-items:flex-end;gap:4px;justify-content:center;margin:8px 0;}
.arr-cell{display:flex;flex-direction:column;align-items:center;min-width:36px;}
.arr-val{font-family:var(--mono);font-size:.82rem;padding:3px 0;color:var(--text);}
.arr-bar{width:30px;border-radius:4px 4px 0 0;background:var(--accent);transition:all .25s;}
.arr-idx{font-family:var(--mono);font-size:.68rem;color:var(--text2);margin-top:2px;}
.arr-bar.min-price{background:var(--green);box-shadow:0 0 8px var(--green);}
.arr-bar.current{background:var(--orange);box-shadow:0 0 8px var(--orange);}
.arr-bar.checking{background:var(--purple);box-shadow:0 0 6px var(--purple);}
.arr-bar.covered{background:var(--blue);opacity:.7;}
.arr-bar.best{background:var(--green);box-shadow:0 0 8px var(--green);}
.arr-cell .tag{font-size:.6rem;font-weight:700;margin-top:1px;}
/* Grid rendering */
.grid-vis{display:inline-grid;gap:3px;margin:8px auto;}
.grid-cell{width:48px;height:48px;display:flex;align-items:center;justify-content:center;font-family:var(--mono);font-size:.82rem;border-radius:4px;background:var(--surface2);border:1px solid var(--border);transition:all .25s;position:relative;}
.grid-cell.highlight{background:var(--accent);color:#fff;border-color:var(--accent);}
.grid-cell.path{background:var(--green);color:#fff;border-color:var(--green);box-shadow:0 0 6px var(--green);}
.grid-cell.computing{background:var(--orange-dim);border-color:var(--orange);}
.grid-cell.origin{background:var(--purple-dim);border-color:var(--purple);}
/* String rendering */
.str-row{display:flex;gap:2px;justify-content:center;margin:8px 0;flex-wrap:wrap;}
.str-cell{width:32px;height:44px;display:flex;flex-direction:column;align-items:center;justify-content:center;font-family:var(--mono);font-size:.9rem;border-radius:4px;background:var(--surface2);border:2px solid transparent;transition:all .2s;}
.str-cell.center{border-color:var(--orange);background:var(--orange-dim);}
.str-cell.expand{border-color:var(--purple);background:var(--purple-dim);}
.str-cell.palindrome{background:var(--green-dim);border-color:var(--green);}
.str-cell.best{background:var(--green);color:#fff;border-color:var(--green);}
.str-cell .str-idx{font-size:.55rem;color:var(--text2);}
/* Partition colors */
.part-0{background:var(--accent)!important;border-color:var(--accent)!important;}
.part-1{background:var(--green)!important;border-color:var(--green)!important;}
.part-2{background:var(--orange)!important;border-color:var(--orange)!important;}
.part-3{background:var(--purple)!important;border-color:var(--purple)!important;}
.part-4{background:var(--cyan)!important;border-color:var(--cyan)!important;}
.part-5{background:var(--yellow)!important;border-color:var(--yellow)!important;color:#222!important;}
.part-6{background:var(--red)!important;border-color:var(--red)!important;}
.part-7{background:var(--blue)!important;border-color:var(--blue)!important;}
/* Jump vis */
.jump-row{display:flex;gap:3px;align-items:center;justify-content:center;margin:8px 0;flex-wrap:wrap;}
.jump-cell{display:flex;flex-direction:column;align-items:center;min-width:38px;padding:4px 2px;border-radius:6px;transition:all .2s;}
.jump-cell .j-val{font-family:var(--mono);font-size:.9rem;font-weight:600;}
.jump-cell .j-idx{font-size:.6rem;color:var(--text2);}
.jump-cell.reachable{background:var(--blue-dim);border:1px solid var(--blue);}
.jump-cell.current{background:var(--orange-dim);border:2px solid var(--orange);}
.jump-cell.max-reach{background:var(--green-dim);border:2px solid var(--green);}
.jump-cell.step-start{border-bottom:3px solid var(--orange);}
.jump-cell .j-chip{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.75rem;font-weight:700;background:var(--surface2);border:2px solid var(--border);}
/* Code */
.code-section{margin-top:16px;}
pre.code-block{background:var(--surface2);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px;overflow-x:auto;font-family:var(--mono);font-size:.8rem;line-height:1.7;white-space:pre;color:var(--text2);}
pre.code-block .hl{background:var(--orange-dim);display:inline-block;width:calc(100% + 24px);margin:0 -12px;padding:0 12px;border-left:3px solid var(--orange);}
pre.code-block .kw{color:var(--purple);}
pre.code-block .fn{color:var(--blue);}
pre.code-block .str{color:var(--green);}
pre.code-block .num{color:var(--orange);}
pre.code-block .cmt{color:#555;font-style:italic;}
/* Result */
.result-box{background:var(--green-dim);border:1px solid rgba(61,214,140,.3);border-radius:var(--radius);padding:12px 16px;font-size:.9rem;color:var(--green);}
.result-box .val{font-size:1.3rem;font-weight:700;}
/* Footer */
footer{text-align:center;color:var(--text2);font-size:.72rem;margin-top:32px;opacity:.5;}
/* Misc */
.flex-center{display:flex;align-items:center;justify-content:center;}
.mt-8{margin-top:8px;}
.mb-8{margin-bottom:8px;}
.tag-green{color:var(--green);font-weight:700;font-size:.75rem;}
.tag-orange{color:var(--orange);font-weight:700;font-size:.75rem;}
.tag-red{color:var(--red);font-weight:700;font-size:.75rem;}
.tag-blue{color:var(--blue);font-weight:700;font-size:.75rem;}
.legend{display:flex;gap:12px;flex-wrap:wrap;margin:8px 0;font-size:.75rem;color:var(--text2);}
.legend-item{display:flex;align-items:center;gap:4px;}
.legend-dot{width:10px;height:10px;border-radius:3px;}