zurich_kotak/src/components/ActivityForm.css
Yashas 5ea627b064 Make the console operable: add a lead, work a lead
The pipeline could be looked at but not driven. Adds the three pieces
that make the machine walkable end to end from the UI.

- ActivityForm renders whatever /view/form-screens returns — labels,
  types, select options, mandatory flags — and submits it back. No form
  is defined in this repo, so a field added in Studio appears here with
  no code change.
- AddLead presents the three doors. Each is a separate INIT activity with
  its own permissions; the bank one lands further along because the bank
  already did CKYC.
- Lead shows the file grouped in the order it was worked, ending with
  what the sourcing agent earns, plus the activities this state allows
  and who normally performs each.

The "who normally performs this" label is presentational only. Nothing
here enforces anything — the workflow refuses server-side and the form
reports what it said, including a note when a 403 is the platform
declining rather than the console misbehaving.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-24 16:11:28 +05:30

44 lines
2.3 KiB
CSS

.af { display: flex; flex-direction: column; gap: 18px; }
.af__loading { color: var(--zk-muted); font-size: .86rem; }
.af__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 14px 18px; }
.af__field { display: flex; flex-direction: column; gap: 5px; }
.af__field--wide { grid-column: 1 / -1; }
.af__field > span {
font-size: .74rem; font-weight: 500; color: var(--zk-muted);
letter-spacing: .02em; display: flex; align-items: center; gap: 8px;
}
.af__req {
font-style: normal; font-size: .6rem; letter-spacing: .07em; text-transform: uppercase;
color: var(--zk-blue); background: var(--zk-tint-blue); padding: 1px 5px; border-radius: 3px;
}
.af input, .af select, .af textarea {
font: inherit; font-size: .88rem; padding: 8px 10px; border-radius: 4px;
border: 1px solid var(--zk-line); background: var(--zk-white); color: var(--zk-ink); width: 100%;
}
.af input:focus, .af select:focus, .af textarea:focus {
outline: none; border-color: var(--zk-blue); box-shadow: 0 0 0 3px var(--zk-tint-blue);
}
.af textarea { resize: vertical; }
.af__multi { display: flex; flex-wrap: wrap; gap: 6px; }
.af__chip {
font: inherit; font-size: .76rem; padding: 5px 10px; border-radius: 4px; cursor: pointer;
border: 1px solid var(--zk-line); background: var(--zk-white); color: var(--zk-muted);
}
.af__chip.is-on { background: var(--zk-blue); border-color: var(--zk-blue); color: var(--zk-white); }
.af__actions { display: flex; justify-content: flex-end; gap: 10px; }
.af__submit {
font: inherit; font-size: .88rem; font-weight: 500; padding: 9px 22px; border-radius: 4px;
cursor: pointer; border: 1px solid var(--zk-blue); background: var(--zk-blue); color: var(--zk-white);
}
.af__submit:disabled { opacity: .55; cursor: default; }
.af__ghost {
font: inherit; font-size: .88rem; padding: 9px 18px; border-radius: 4px; cursor: pointer;
border: 1px solid var(--zk-line); background: var(--zk-white); color: var(--zk-muted);
}
.af__err {
background: #fdf0ef; border: 1px solid #f0c9c6; border-left: 3px solid var(--zk-danger);
border-radius: 0 4px 4px 0; padding: 11px 14px; font-size: .84rem; color: var(--zk-ink);
}
.af__err strong { font-family: ui-monospace, monospace; margin-right: 6px; }
.af__err p { margin: 6px 0 0; font-size: .8rem; color: var(--zk-muted); }