/* Aime — Anruf-Assistent. Zwei Themes über CSS-Variablen; data-theme setzt index.html vor dem ersten Paint, der Header-Toggle schaltet um. Akzent = warmes Kupfer (Tonband-Anmutung), Rot bleibt der Aufnahme reserviert. */ :root[data-theme="dark"] { --bg: #14161b; --surface: #1d222a; --surface-2: #262c36; --inset: #10141a; --line: #303845; --fg: #e9ecf1; --muted: #98a2b3; --accent: #e8804c; --accent-fg: #17130f; --accent-soft: rgba(232, 128, 76, .14); --ok: #55b381; --ok-soft: rgba(85, 179, 129, .14); --warn: #e2b93b; --warn-soft: rgba(226, 185, 59, .14); --danger: #e5595e; --danger-soft: rgba(229, 89, 94, .12); --shadow: none; --sp0: #5bc0eb; --sp1: #ef8fc0; --sp2: #a8cc4e; --sp3: #e6b84c; --sp0-w: #8fd6f5; --sp1-w: #f5b5d6; --sp2-w: #c5e07e; --sp3-w: #f0d08a; } :root[data-theme="light"] { --bg: #f4f2ee; --surface: #ffffff; --surface-2: #eceae4; --inset: #f7f6f2; --line: #ddd8cf; --fg: #23272e; --muted: #6d7683; --accent: #c05f2d; --accent-fg: #ffffff; --accent-soft: rgba(192, 95, 45, .1); --ok: #2f8a5d; --ok-soft: rgba(47, 138, 93, .12); --warn: #9a7514; --warn-soft: rgba(154, 117, 20, .12); --danger: #c73e43; --danger-soft: rgba(199, 62, 67, .09); --shadow: 0 1px 3px rgba(35, 39, 46, .07); --sp0: #1179a8; --sp1: #c2417f; --sp2: #5f7d16; --sp3: #a4700d; --sp0-w: #0e6b95; --sp1-w: #ad3a72; --sp2-w: #556f14; --sp3-w: #92640b; } * { box-sizing: border-box; } html { color-scheme: dark; } :root[data-theme="light"] { color-scheme: light; } body { margin: 0; background: var(--bg); color: var(--fg); font: 15px/1.5 system-ui, "Segoe UI", Roboto, sans-serif; transition: background .2s, color .2s; } #app { max-width: 860px; margin: 0 auto; padding: 16px; } /* Aufnahmen-Tab: volle Fensterbreite nutzen (Liste bleibt 340px fix, das Detail bekommt den Rest — vorher kappte 1180px auf großen Monitoren). */ #app.wide { max-width: none; padding: 16px 28px; } /* ---- Topbar / Brand ---- */ .topbar { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; padding: 6px 0 14px; } .brand { display: flex; align-items: center; gap: 10px; } .brand-wave { width: 30px; height: 18px; color: var(--accent); flex: none; } .topbar h1 { margin: 0; font-size: 21px; font-weight: 650; letter-spacing: -.01em; } .topbar .sub { font-size: 12px; color: var(--muted); font-weight: 400; margin-left: 6px; } nav { display: flex; gap: 6px; flex-wrap: wrap; } .topbar nav { margin-left: auto; } .tab { background: transparent; color: var(--muted); border: 1px solid transparent; padding: 7px 14px; border-radius: 999px; cursor: pointer; font-size: 14px; transition: color .12s, background .12s; } .tab:hover { color: var(--fg); background: var(--surface-2); } .tab.active { color: var(--accent); background: var(--accent-soft); font-weight: 600; } .btn.icon.theme { border-radius: 999px; font-size: 15px; line-height: 1; } /* ---- Bausteine ---- */ .card { background: var(--surface); border: 1px solid var(--line); border-radius: 14px; padding: 18px; margin-bottom: 16px; box-shadow: var(--shadow); } h2 { margin: 0 0 12px; font-size: 18px; letter-spacing: -.01em; } .row { display: flex; gap: 8px; align-items: center; margin-bottom: 8px; } .grow { flex: 1; } .btn { background: var(--surface-2); color: var(--fg); border: 1px solid var(--line); border-radius: 9px; padding: 8px 14px; cursor: pointer; font-size: 14px; transition: border-color .12s, background .12s; } .btn:hover { border-color: var(--accent); } .btn.primary { background: var(--accent); border-color: var(--accent); color: var(--accent-fg); font-weight: 600; } .btn.primary:hover { filter: brightness(1.07); } .btn.danger { background: var(--danger-soft); border-color: transparent; color: var(--danger); } .btn.danger:hover { border-color: var(--danger); } .btn.big { font-size: 17px; padding: 14px 22px; border-radius: 12px; } .btn.small { font-size: .8rem; padding: 3px 8px; } .btn.icon { padding: 6px 9px; flex: none; } .btn:disabled { opacity: .55; cursor: default; } :focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; } .lbl { display: block; font-size: 12px; color: var(--muted); margin: 10px 0 4px; text-transform: uppercase; letter-spacing: .04em; } .input, select { width: 100%; background: var(--inset); color: var(--fg); border: 1px solid var(--line); border-radius: 9px; padding: 9px 12px; font-size: 14px; } .input:focus, select:focus { border-color: var(--accent); outline: none; } .list { display: flex; flex-direction: column; gap: 8px; } .item { display: flex; gap: 10px; align-items: center; background: var(--inset); border: 1px solid var(--line); border-radius: 10px; padding: 10px 12px; } .badge { font-size: 11px; padding: 3px 8px; border-radius: 20px; background: var(--surface-2); color: var(--muted); } .badge.ok { background: var(--ok-soft); color: var(--ok); } .badge.warn { background: var(--warn-soft); color: var(--warn); } .muted { color: var(--muted); } .mono { font-family: ui-monospace, monospace; font-size: 12px; } .err { color: var(--danger); } .err-inline { color: var(--danger); margin-bottom: 6px; } .hint { font-size: .8rem; color: var(--muted); margin-bottom: 10px; } /* ---- Aufnahme ---- */ .rec-panel { display: flex; flex-direction: column; align-items: center; gap: 14px; margin: 22px 0 8px; } .timer { font-size: 40px; font-variant-numeric: tabular-nums; font-weight: 600; } audio { width: 100%; margin-bottom: 10px; } /* ---- Transkript ---- */ .transcript { line-height: 2.1; font-size: 16px; } .transcript .w { cursor: pointer; padding: 1px 2px; border-radius: 4px; transition: background .1s; } .transcript .w:hover { background: var(--surface-2); } .transcript .w.active, .w.active { background: var(--accent); color: var(--accent-fg); } .w.sp0 { color: var(--sp0-w); } .w.sp1 { color: var(--sp1-w); } .w.sp2 { color: var(--sp2-w); } .w.sp3 { color: var(--sp3-w); } .toast { position: fixed; bottom: 20px; left: 50%; transform: translateX(-50%); background: var(--surface); border: 1px solid var(--accent); color: var(--fg); padding: 10px 18px; border-radius: 10px; z-index: 99; max-width: 90%; box-shadow: var(--shadow); } .toast.err { border-color: var(--danger); } /* ---- Analyse ---- */ .summary-snip { font-size: .85rem; color: var(--muted); margin-top: 4px; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } .analysis { margin: 10px 0; padding: 12px; background: var(--inset); border: 1px solid var(--line); border-radius: 10px; } .analysis h3 { margin: 8px 0 4px; font-size: .9rem; color: var(--muted); } .summary { margin: 0 0 6px; line-height: 1.55; white-space: pre-line; } .todos { margin: 0; padding-left: 20px; } .todos li { margin: 3px 0; } .parts { margin: 0; padding-left: 20px; } .parts li { margin: 3px 0; } .clean { line-height: 1.55; background: var(--inset); padding: 8px 10px; border-radius: 8px; margin: 0 0 4px; } /* ---- Dialog-Turns / Sprecher ---- */ .dialog { display: flex; flex-direction: column; gap: 6px; margin-bottom: 4px; } .turn { padding: 6px 10px; border-radius: 8px; background: var(--inset); line-height: 1.5; } .turn .spk { margin-right: 6px; font-weight: 600; } .turn.sp0 { border-left: 3px solid var(--sp0); } .turn.sp0 .spk { color: var(--sp0); } .turn.sp1 { border-left: 3px solid var(--sp1); } .turn.sp1 .spk { color: var(--sp1); } .turn.sp2 { border-left: 3px solid var(--sp2); } .turn.sp2 .spk { color: var(--sp2); } .turn.sp3 { border-left: 3px solid var(--sp3); } .turn.sp3 .spk { color: var(--sp3); } .spk-edit { display: flex; flex-direction: column; gap: 6px; margin: 4px 0 8px; } .spk-row { display: flex; align-items: center; gap: 8px; padding: 4px 8px; border-radius: 8px; background: var(--inset); border-left: 3px solid var(--line); } .spk-row.sp0 { border-left-color: var(--sp0); } .spk-row.sp1 { border-left-color: var(--sp1); } .spk-row.sp2 { border-left-color: var(--sp2); } .spk-row.sp3 { border-left-color: var(--sp3); } .spk-dot { width: 10px; height: 10px; border-radius: 50%; background: var(--muted); flex: none; } .spk-row.sp0 .spk-dot { background: var(--sp0); } .spk-row.sp1 .spk-dot { background: var(--sp1); } .spk-row.sp2 .spk-dot { background: var(--sp2); } .spk-row.sp3 .spk-dot { background: var(--sp3); } .spk-name { flex: 1; min-width: 80px; padding: 5px 8px; border-radius: 6px; border: 1px solid var(--line); background: var(--surface); color: var(--fg); } .spk-learn-l { display: flex; align-items: center; gap: 4px; font-size: 12px; color: var(--muted); white-space: nowrap; } .ana-time { font-variant-numeric: tabular-nums; font-weight: 600; } .ana-time.live { color: var(--accent); } .ana-line { margin: 2px 0 8px; } /* ---- Aufnahmen: Liste links, Detail rechts ---- */ .rec-layout { display: flex; gap: 14px; align-items: flex-start; } .rec-list-pane { flex: 0 0 340px; position: sticky; top: 12px; max-height: calc(100vh - 90px); overflow-y: auto; background: var(--surface); border: 1px solid var(--line); border-radius: 14px; padding: 10px; box-shadow: var(--shadow); } .rec-detail-pane { flex: 1 1 auto; min-width: 0; } .rec-detail-pane .card { margin-bottom: 0; } .detail-empty { padding: 40px 16px; text-align: center; border: 1px dashed var(--line); border-radius: 14px; } .day-group { margin-bottom: 6px; } .day-head { display: flex; align-items: center; gap: 6px; cursor: pointer; font-size: 12px; color: var(--muted); text-transform: uppercase; letter-spacing: .03em; padding: 6px 4px; user-select: none; } .day-head:hover { color: var(--fg); } .day-caret { display: inline-block; transition: transform .15s; font-size: 10px; } .day-group.collapsed .day-caret { transform: rotate(-90deg); } .day-group.collapsed .day-items { display: none; } .day-count { margin-left: auto; background: var(--surface-2); border-radius: 20px; padding: 1px 8px; font-size: 11px; } .day-items { display: flex; flex-direction: column; gap: 6px; } .item.rec { cursor: pointer; transition: border-color .1s, background .1s; } .item.rec:hover { border-color: var(--accent); } .item.rec.sel { border-color: var(--accent); background: var(--accent-soft); } /* ---- Detail: Module links, Transkript als eigene Scroll-Spalte rechts ---- */ .status-line { margin: 4px 0 10px; } .detail-cols { display: flex; gap: 12px; align-items: flex-start; } .detail-main { flex: 1 1 54%; min-width: 0; } .detail-side { flex: 1 1 46%; min-width: 0; position: sticky; top: 12px; } .transcript-panel { max-height: calc(100vh - 90px); overflow-y: auto; } .transcript-panel .mod-head { position: sticky; top: 0; z-index: 1; cursor: default; } @media (max-width: 1100px) { .detail-cols { flex-direction: column; } .detail-side { position: static; width: 100%; } .transcript-panel { max-height: 60vh; } } #modules { display: flex; flex-direction: column; gap: 10px; } .module { background: var(--inset); border: 1px solid var(--line); border-radius: 12px; overflow: hidden; } .module.dragging { opacity: .45; border-style: dashed; } .mod-head { display: flex; align-items: center; gap: 8px; padding: 8px 12px; cursor: grab; background: var(--surface-2); user-select: none; } .mod-head:active { cursor: grabbing; } .mod-head h3 { margin: 0; font-size: .85rem; color: var(--muted); text-transform: uppercase; letter-spacing: .04em; } .mod-grip { color: var(--muted); font-size: 14px; letter-spacing: -1px; } .mod-body { padding: 12px; } .mod-body h3 { margin: 10px 0 4px; font-size: .9rem; color: var(--muted); } /* ---- Sprecher-Verlauf: fester Streifen unter dem Player, volle Breite ---- */ .viz-top { margin: 4px 0 10px; padding: 10px 12px; background: var(--inset); border: 1px solid var(--line); border-radius: 12px; } .viz-wrap { display: flex; gap: 14px; align-items: stretch; } .lanes { flex: 1 1 58%; min-width: 0; position: relative; display: flex; flex-direction: column; gap: 6px; cursor: pointer; } .lane-row { display: flex; align-items: center; gap: 8px; } .lane-label { flex: 0 0 92px; display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .lane { position: relative; flex: 1; height: 22px; background: var(--surface-2); border-radius: 6px; overflow: hidden; } .seg { position: absolute; top: 3px; bottom: 3px; border-radius: 3px; opacity: .75; transition: opacity .15s; } .lane-row.sp0 .seg { background: var(--sp0); } .lane-row.sp1 .seg { background: var(--sp1); } .lane-row.sp2 .seg { background: var(--sp2); } .lane-row.sp3 .seg { background: var(--sp3); } .lane-row.sp0 .spk-dot { background: var(--sp0); } .lane-row.sp1 .spk-dot { background: var(--sp1); } .lane-row.sp2 .spk-dot { background: var(--sp2); } .lane-row.sp3 .spk-dot { background: var(--sp3); } .lane-row.speaking .seg { opacity: 1; } .lane-row.speaking .lane-label { color: var(--fg); font-weight: 600; } .lane-row.speaking .spk-dot { animation: pulse 1s ease-in-out infinite; } @keyframes pulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.55); } } .playhead { display: none; position: absolute; top: 0; bottom: 0; width: 2px; background: var(--accent); border-radius: 1px; pointer-events: none; z-index: 2; transition: left .25s linear; } .lanes { flex: 1 1 100%; } @media (max-width: 800px) { #app.wide { max-width: 860px; } .rec-layout { flex-direction: column; } .rec-list-pane { flex: none; width: 100%; position: static; max-height: 340px; } .topbar nav { margin-left: 0; width: 100%; order: 3; } } @media (prefers-reduced-motion: reduce) { * { transition: none !important; animation: none !important; } }