flyworker / app.css
kimhyunwoo's picture
redesign
ff2b50d verified
Raw History Blame Contribute Delete
13.3 kB
/* 초파리 직원 β€” ν™”λ©΄
원칙: 여백을 λ„‰λ„‰νžˆ, 색은 ν•˜λ‚˜λ§Œ, κΈ€μž μœ„κ³„λŠ” 적게.
주인곡은 κ²Œμž„ ν™”λ©΄κ³Ό λ‡Œλ‹€. μ‘°μž‘λΆ€λŠ” λ’€λ‘œ λ¬ΌλŸ¬λ‚œλ‹€. */
:root{
--bg:#000;
--surface:#141416;
--surface2:#1c1c1f;
--line:rgba(255,255,255,.09);
--line2:rgba(255,255,255,.16);
--fg:#f5f5f7;
--fg2:#a1a1a6;
--fg3:#6e6e73;
--accent:#30d158;
--blue:#0a84ff;
--red:#ff453a;
--orange:#ff9f0a;
--r:18px;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0;background:var(--bg)}
body{
color:var(--fg);
font:400 15px/1.5 -apple-system,BlinkMacSystemFont,"SF Pro Text","Apple SD Gothic Neo","Pretendard",system-ui,sans-serif;
-webkit-font-smoothing:antialiased;
letter-spacing:-.011em;
}
.mono{font-family:"SF Mono",ui-monospace,Menlo,monospace;font-feature-settings:"tnum"}
a{color:var(--blue);text-decoration:none}
h1,h2,h3{margin:0;letter-spacing:-.022em;font-weight:600}
/* ── 상단 ─────────────────────────────── */
header{
display:flex;align-items:center;gap:14px;flex-wrap:wrap;
padding:16px 40px;border-bottom:1px solid var(--line);
position:fixed;top:0;left:0;right:0;z-index:50;
background:rgba(0,0,0,.6);backdrop-filter:saturate(180%) blur(24px);
}
header h1{font-size:15px;letter-spacing:-.02em}
header .sub{font-size:13px;color:var(--fg3)}
header .meta{font-family:"SF Mono",ui-monospace,Menlo,monospace;font-size:11.5px}
/* ── νžˆμ–΄λ‘œ ─────────────────────────────── */
.hero{min-height:86vh;display:flex;flex-direction:column;justify-content:center;
padding:130px 40px 70px;max-width:1240px;margin:0 auto}
.hero h2{font-size:clamp(38px,6.6vw,96px);letter-spacing:-.045em;line-height:1.04;font-weight:600;margin:0}
.hero h2 em{font-style:normal;color:var(--fg3)}
.hero .lead{margin-top:30px;max-width:54ch;font-size:clamp(15.5px,1.45vw,19px);line-height:1.64;color:var(--fg2)}
.hero .lead b{color:var(--fg);font-weight:500}
.hero .scroll{margin-top:52px;font-size:12px;color:var(--fg3);letter-spacing:.14em;text-transform:uppercase}
/* ── μ œμ›ν‘œ ─────────────────────────────── */
.spec{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);
border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin-bottom:40px}
.spec div{background:#000;padding:30px 36px;display:flex;flex-direction:column;justify-content:flex-start}
.spec .n{font-size:clamp(24px,2.7vw,38px);font-weight:600;letter-spacing:-.045em;line-height:1;white-space:nowrap}
.spec .n small{font-size:.45em;color:var(--fg3);font-weight:400;letter-spacing:-.01em;white-space:nowrap}
.spec .l{margin-top:11px;font-size:12.5px;color:var(--fg3);line-height:1.45;max-width:24ch}
@media(max-width:900px){.spec{grid-template-columns:repeat(2,1fr)}.spec div{padding:24px 20px}}
@media(max-width:700px){.hero{padding:104px 20px 56px;min-height:auto}}
.sp{flex:1}
.meta{font-size:12.5px;color:var(--fg3)}
.meta b{color:var(--fg2);font-weight:500}
/* ── λ ˆμ΄μ•„μ›ƒ ─────────────────────────── */
.page{max-width:1420px;margin:0 auto;padding:0 28px 80px}
.workbench{display:grid;grid-template-columns:1.55fr 1fr;gap:20px;align-items:start}
@media(max-width:1080px){.workbench{grid-template-columns:1fr}}
.panel{background:#0b0b0d;border:1px solid var(--line);border-radius:20px;overflow:hidden}
.panel .hd{display:flex;align-items:baseline;gap:12px;padding:20px 24px 16px;flex-wrap:wrap}
.panel .hd h2{flex:none;white-space:nowrap;font-size:19px;font-weight:600;letter-spacing:-.03em}
.panel .hd .tag{font-size:12px;color:var(--fg3);font-family:"SF Mono",ui-monospace,Menlo,monospace}
.panel .bd{padding:0 24px 24px}
/* ꡬ역 제λͺ© β€” νžˆμ–΄λ‘œμ™€ 같은 μœ„κ³„ */
.secttl{max-width:1420px;margin:70px auto 0;padding:0 28px}
.secttl .eyebrow{font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--fg3);margin-bottom:16px}
.secttl h3{font-size:clamp(26px,3.2vw,40px);letter-spacing:-.04em;max-width:22ch;font-weight:600;margin:0}
.secttl p{margin:18px 0 0;max-width:56ch;font-size:16px;line-height:1.66;color:var(--fg2)}
.secttl p b{color:var(--fg);font-weight:500}
/* ── ν™”λ©΄ ─────────────────────────────── */
.stage{position:relative;aspect-ratio:4/3;background:#000;overflow:hidden;border-radius:14px;border:1px solid var(--line)}
.stage canvas,.stage iframe{position:absolute;inset:0;width:100%;height:100%;display:block;
object-fit:contain;image-rendering:pixelated;opacity:0;transition:opacity .22s ease;pointer-events:none}
.stage canvas.showing,.stage iframe.showing{opacity:1;pointer-events:auto}
/* λ‚¨μ˜ κ²Œμž„μ€ 우리 νŽ˜μ΄μ§€ 좜처λ₯Ό 물렀받은 blob: λ¬Έμ„œλ‹€. ν…Œλ‘λ¦¬λ₯Ό μ§€μš΄λ‹€. */
.stage iframe{border:0;background:#000}
.stage .hud{position:absolute;left:14px;top:14px;display:flex;gap:7px;flex-wrap:wrap;z-index:2}
.chip{background:rgba(0,0,0,.55);backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.1);
border-radius:999px;padding:4px 11px;font-size:12px;color:var(--fg2)}
.chip b{color:var(--fg);font-weight:500}
.brainwrap{position:relative;aspect-ratio:1/1;background:#000}
.brainwrap canvas{position:absolute;inset:0;width:100%;height:100%;opacity:1}
.legend{position:absolute;left:14px;bottom:12px;display:flex;gap:12px;flex-wrap:wrap;font-size:11.5px;color:var(--fg3);z-index:2}
.legend i{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:5px;vertical-align:middle}
/* ── λ²„νŠΌ ─────────────────────────────── */
.seg{display:inline-flex;background:var(--surface2);border:1px solid var(--line);border-radius:11px;padding:3px;gap:3px}
.seg button{background:none;border:0;color:var(--fg2);font:inherit;font-size:13.5px;
padding:7px 14px;border-radius:8px;cursor:pointer;transition:.16s;white-space:nowrap}
.seg button:hover{color:var(--fg)}
.seg button.on{background:var(--surface);color:var(--fg);box-shadow:0 1px 3px rgba(0,0,0,.4)}
button.plain{background:var(--surface2);border:1px solid var(--line);color:var(--fg);
font:inherit;font-size:13.5px;padding:8px 14px;border-radius:10px;cursor:pointer;transition:.16s}
button.plain:hover{background:#26262a;border-color:var(--line2)}
button.plain:disabled{opacity:.4;cursor:default}
button.cta{background:var(--fg);color:#000;border:0;font-weight:600}
button.cta:hover{background:#fff}
button.danger{color:var(--red)}
/* ── 계기 ─────────────────────────────── */
.gauges{display:grid;gap:11px;margin-top:16px}
.g{display:grid;grid-template-columns:86px 1fr 62px;align-items:center;gap:14px}
.g .k{font-size:11.5px;color:var(--fg3);text-transform:uppercase;letter-spacing:.1em}
.g .t{height:3px;background:rgba(255,255,255,.08);border-radius:99px;position:relative;overflow:hidden}
.g .t i{position:absolute;top:0;bottom:0;background:var(--fg2);border-radius:99px;transition:.12s}
.g .v{font-size:14px;text-align:right;color:var(--fg);font-family:"SF Mono",ui-monospace,Menlo,monospace}
.eyes{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:16px}
.eyes .k{font-size:11.5px;color:var(--fg3);margin-bottom:6px}
.eyes canvas{width:100%;aspect-ratio:2/3;border-radius:8px;border:1px solid var(--line);
background:#000;image-rendering:pixelated;display:block}
/* ── 숫자 ─────────────────────────────── */
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);
border-top:1px solid var(--line)}
.stat{background:#0b0b0d;padding:20px 22px}
.stat .k{font-size:11.5px;color:var(--fg3)}
.stat .v{font-size:26px;font-weight:600;letter-spacing:-.04em;margin-top:5px}
/* ── 사원 ─────────────────────────────── */
.emp{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:12px;
border:1px solid var(--line);background:var(--surface2);cursor:pointer;margin-bottom:8px;transition:.16s}
.emp:hover{border-color:var(--line2)}
.emp.sel{border-color:var(--fg2);background:#202024}
.emp .av{width:32px;height:32px;border-radius:50%;background:#2c2c30;display:grid;place-items:center;font-size:15px;flex:none}
.emp .nm{font-weight:600;font-size:14px}
.emp .st{font-size:12px;color:var(--fg3);margin-top:1px}
.emp .kv{margin-left:auto;text-align:right;font-size:12px;color:var(--fg3)}
.emp .kv b{color:var(--fg);font-weight:600;font-size:14px}
.dot{width:6px;height:6px;border-radius:50%;background:var(--fg3);display:inline-block;margin-right:5px}
.dot.ok{background:var(--accent)}
.dot.busy{background:var(--orange);animation:p 1.2s infinite}
.dot.err{background:var(--red)}
@keyframes p{0%,100%{opacity:1}50%{opacity:.3}}
/* ── 버그 ─────────────────────────────── */
/* 발견 λͺ©λ‘μ€ 계속 μŒ“μΈλ‹€. 높이λ₯Ό λ¬Άμ§€ μ•ŠμœΌλ©΄ 였λ₯Έμͺ½ 칸이 μ•„λž˜λ‘œ λ°€λ €
λΉ„κ΅ν‘œμ™€ μž¬ν˜„ νŒ¨λ„μ΄ ν™”λ©΄ λ°–μœΌλ‘œ λ‚˜κ°„λ‹€. */
#bugs{max-height:620px;overflow-y:auto}
#bugs::-webkit-scrollbar{width:8px}
#bugs::-webkit-scrollbar-thumb{background:#2c2c30;border-radius:99px}
.bug{padding:13px 16px;border-bottom:1px solid var(--line)}
.bug:last-child{border-bottom:0}
.bug .t{display:flex;align-items:baseline;gap:9px}
.bug .lb{font-weight:600;font-size:14px}
.bug .sev{font-size:11px;padding:2px 7px;border-radius:5px;background:rgba(255,159,10,.14);color:var(--orange)}
.bug .sev.critical,.bug .sev.high{background:rgba(255,69,58,.14);color:var(--red)}
.bug .mt{margin-left:auto;font-size:11.5px;color:var(--fg3)}
.bug .de{font-size:13px;color:var(--fg2);margin-top:5px;line-height:1.45}
.bug .ac{display:flex;gap:7px;margin-top:9px}
.bug .ac button{font-size:12px;padding:5px 11px}
/* ── κΈ€ ───────────────────────────────── */
.note{font-size:13px;color:var(--fg2);line-height:1.62}
.note b{color:var(--fg);font-weight:600}
.muted{font-size:12.5px;color:var(--fg3);line-height:1.6}
details{border-top:1px solid var(--line);padding-top:12px;margin-top:14px}
details summary{cursor:pointer;font-size:13px;color:var(--fg2);list-style:none}
details summary::-webkit-details-marker{display:none}
details summary::before{content:"οΌ‹ ";color:var(--fg3)}
details[open] summary::before{content:"- "}
details .note{margin-top:10px}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:20px;align-items:start}
@media(max-width:860px){.grid2{grid-template-columns:1fr}.stats{grid-template-columns:repeat(2,1fr)}}
footer{color:var(--fg3);font-size:12.5px;text-align:center;padding:30px;border-top:1px solid var(--line);margin-top:40px}
/* ── 아무 κ²Œμž„μ΄λ‚˜ 뢙이기 ─────────────────────── */
.drop{border:1px dashed #33333a;border-radius:12px;padding:16px;text-align:center;
color:var(--fg3);font-size:13px;transition:border-color .15s,background .15s;cursor:pointer}
.drop:hover,.drop.over{border-color:var(--accent);background:#30d1580d;color:var(--fg2)}
.byorow{display:flex;gap:7px;margin-top:9px}
.byorow input{flex:1;min-width:0;background:#0e0e10;border:1px solid var(--line);border-radius:9px;
padding:8px 11px;color:var(--fg);font:13px ui-monospace,Menlo,monospace;outline:none}
.byorow input:focus{border-color:#3a3a42}
/* ── 쒁은 ν™”λ©΄ ───────────────────────────────
심사도 링크둜 λ°›λŠ”λ‹€. ν°μ—μ„œ λ¨Όμ € 열릴 수 μžˆλ‹€.
κΈ°λ³Έ λ ˆμ΄μ•„μ›ƒμ€ 상단 머리말이 μ„Έ μ€„λ‘œ λŠ˜μ–΄λ‚˜ ν™”λ©΄μ˜ 4λΆ„μ˜ 1을 κ³ μ •μœΌλ‘œ
λ¨Ήκ³ , 근무지 λ²„νŠΌ 쀄이 νŒ¨λ„ λ°–μœΌλ‘œ μž˜λ Έλ‹€. λ‘˜ λ‹€ μ—¬κΈ°μ„œ μž‘λŠ”λ‹€. */
@media(max-width:700px){
header{padding:12px 16px;gap:10px}
header h1{font-size:17px}
header .sub{font-size:12.5px;line-height:1.35}
header .meta{display:none} /* 같은 μˆ«μžκ°€ 본문에 λ‹€μ‹œ λ‚˜μ˜¨λ‹€ */
.page{padding:16px 16px 60px}
.panel .hd{padding:12px 14px;gap:8px}
.panel .bd{padding:14px}
.seg{border-radius:10px}
.seg button{padding:6px 10px;font-size:12.5px}
button.plain{padding:7px 11px;font-size:12.5px}
.legend{gap:8px 10px;font-size:10.5px;left:10px;bottom:9px}
.stats{grid-template-columns:repeat(2,1fr)}
.g{grid-template-columns:78px 1fr 50px;gap:9px}
.g .k{font-size:11.5px}
.stage .hud{left:9px;top:9px;gap:5px}
.chip{padding:3px 8px;font-size:11px}
#bugs{max-height:none} /* ν°μ—μ„œλŠ” μΉΈ μ•ˆμ— 칸을 λ§Œλ“€μ§€ μ•ŠλŠ”λ‹€ */
}
/* ── 슀크둀 μ§„μž… ─────────────────────────
ν•œ 번, 짧게, μœ„λ‘œλ§Œ. κ³Όν•˜λ©΄ 싸ꡬ렀가 λœλ‹€. */
.rise{opacity:0;transform:translateY(16px);
transition:opacity .65s cubic-bezier(.2,.8,.2,1),transform .65s cubic-bezier(.2,.8,.2,1)}
.rise.in{opacity:1;transform:none}
@media(prefers-reduced-motion:reduce){.rise{opacity:1;transform:none;transition:none}}