| /* Variables */ |
| .root { |
| --ff-colvideo: #6eaa7b; |
| --ff-colaudio: #477fb3; |
| --ff-colsubtitle: #ad76ab; |
| --ff-coltext: #666; |
| } |
| |
| /* Common & Misc */ |
| .ff-inputfiles rect, .ff-outputfiles rect, .ff-inputstreams rect, .ff-outputstreams rect, .ff-decoders rect, .ff-encoders rect { |
| stroke-width: 0; |
| stroke: transparent; |
| filter: none !important; |
| fill: transparent !important; |
| display: none !important; |
| } |
| |
| .cluster span { |
| color: var(--ff-coltext); |
| } |
| |
| .cluster rect { |
| stroke: #dfdfdf !important; |
| transform: translateY(-2.3rem); |
| filter: drop-shadow(1px 2px 2px rgba(185,185,185,0.2)) !important; |
| rx: 8; |
| ry: 8; |
| } |
| |
| .cluster-label { |
| font-size: 1.1rem; |
| } |
| |
| .cluster-label .nodeLabel { |
| display: block; |
| font-weight: 500; |
| color: var(--ff-coltext); |
| } |
| |
| .cluster-label div { |
| max-width: unset !important; |
| padding: 3px; |
| } |
| |
| .cluster-label foreignObject { |
| transform: translateY(-0.7rem); |
| } |
| |
| /* Input and output files */ |
| .node.ff-inputfile .label foreignObject, .node.ff-outputfile .label foreignObject { |
| overflow: visible; |
| } |
| |
| .cluster.ff-inputfile .cluster-label foreignObject div:not(foreignObject div div), .cluster.ff-outputfile .cluster-label foreignObject div:not(foreignObject div div) { |
| display: table !important; |
| } |
| |
| .nodeLabel div.ff-inputfile, .nodeLabel div.ff-outputfile { |
| font-size: 1.1rem; |
| font-weight: 500; |
| min-width: 14rem; |
| width: 100%; |
| display: flex; |
| color: var(--ff-coltext); |
| margin-top: 0.1rem; |
| line-height: 1.35; |
| padding-bottom: 1.9rem; |
| } |
| |
| .nodeLabel div.ff-outputfile { |
| flex-direction: row-reverse; |
| } |
| |
| .ff-inputfile .index, .ff-outputfile .index { |
| order: 2; |
| color: var(--ff-coltext); |
| text-align: center; |
| border-radius: 0.45rem; |
| border: 0.18em solid #666666db; |
| font-weight: 600; |
| padding: 0 0.3em; |
| opacity: 0.8; |
| } |
| |
| .ff-inputfile .index::before { |
| content: 'In '; |
| } |
| |
| .ff-outputfile .index::before { |
| content: 'Out '; |
| } |
| |
| .ff-inputfile .demuxer_name, .ff-outputfile .muxer_name { |
| flex: 1; |
| order: 1; |
| font-size: 0.9rem; |
| white-space: nowrap; |
| overflow: hidden; |
| text-overflow: ellipsis; |
| text-align: center; |
| max-width: 8rem; |
| align-content: center; |
| margin: 0.2rem 0.4rem 0 0.4rem; |
| } |
| |
| .ff-inputfile .file_extension, .ff-outputfile .file_extension { |
| order: 0; |
| background-color: #888; |
| color: white; |
| text-align: center; |
| border-radius: 0.45rem; |
| font-weight: 600; |
| padding: 0 0.4em; |
| align-content: center; |
| opacity: 0.8; |
| } |
| |
| .ff-inputfile .url, .ff-outputfile .url { |
| order: 4; |
| text-align: center; |
| position: absolute; |
| left: 0; |
| right: 0; |
| bottom: 0.75rem; |
| font-size: 0.7rem; |
| font-weight: 400; |
| white-space: nowrap; |
| overflow: hidden; |
| text-overflow: ellipsis; |
| margin: 0 0.3rem; |
| direction: rtl; |
| color: #999; |
| } |
| |
| .cluster.ff-inputfile rect, .cluster.ff-outputfile rect { |
| transform: translateY(-1.8rem); |
| fill: url(#ff-radgradient); |
| } |
| |
| /* Input and output streams */ |
| .node.ff-inputstream rect, .node.ff-outputstream rect { |
| padding: 0 !important; |
| margin: 0 !important; |
| border: none !important; |
| fill: white; |
| stroke: #e5e5e5 !important; |
| height: 2.7rem; |
| transform: translateY(0.2rem); |
| filter: none; |
| rx: 3; |
| ry: 3; |
| } |
| |
| .node.ff-inputstream .label foreignObject, .node.ff-outputstream .label foreignObject { |
| transform: translateY(-0.2%); |
| overflow: visible; |
| } |
| |
| .node.ff-inputstream .label foreignObject div:not(foreignObject div div), .node.ff-outputstream .label foreignObject div:not(foreignObject div div) { |
| display: block !important; |
| line-height: 1.5 !important; |
| } |
| |
| .nodeLabel div.ff-inputstream, .nodeLabel div.ff-outputstream { |
| font-size: 1.0rem; |
| font-weight: 500; |
| min-width: 12rem; |
| width: 100%; |
| display: flex; |
| } |
| |
| .nodeLabel div.ff-outputstream { |
| flex-direction: row-reverse; |
| } |
| |
| .ff-inputstream .name, .ff-outputstream .name { |
| flex: 1; |
| white-space: nowrap; |
| overflow: hidden; |
| text-overflow: ellipsis; |
| text-align: left; |
| align-content: center; |
| margin-bottom: -0.15rem; |
| } |
| |
| .ff-inputstream .index, .ff-outputstream .index { |
| flex: 0 0 1.4rem; |
| background-color: #888; |
| color: white; |
| text-align: center; |
| border-radius: 0.3rem; |
| font-weight: 600; |
| margin-right: -0.3rem; |
| margin-left: 0.4rem; |
| opacity: 0.8; |
| } |
| |
| .ff-outputstream .index { |
| margin-right: 0.6rem; |
| margin-left: -0.4rem; |
| } |
| |
| .ff-inputstream::before, .ff-outputstream::before { |
| font-variant-emoji: text; |
| flex: 0 0 2rem; |
| margin-left: -0.8rem; |
| margin-right: 0.2rem; |
| } |
| |
| .ff-outputstream::before { |
| margin-left: 0.2rem; |
| margin-right: -0.6rem; |
| } |
| |
| .ff-inputstream.video::before, .ff-outputstream.video::before { |
| content: '\239A'; |
| color: var(--ff-colvideo); |
| font-size: 2.25rem; |
| line-height: 0.5; |
| font-weight: bold; |
| } |
| |
| .ff-inputstream.audio::before, .ff-outputstream.audio::before { |
| content: '\1F39D'; |
| color: var(--ff-colaudio); |
| font-size: 1.75rem; |
| line-height: 0.9; |
| } |
| |
| .ff-inputstream.subtitle::before, .ff-outputstream.subtitle::before { |
| content: '\1AC'; |
| color: var(--ff-colsubtitle); |
| font-size: 1.2rem; |
| line-height: 1.1; |
| transform: scaleX(1.5); |
| margin-top: 0.050rem; |
| } |
| |
| .ff-inputstream.attachment::before, .ff-outputstream.attachment::before { |
| content: '\1F4CE'; |
| font-size: 1.3rem; |
| line-height: 1.15; |
| } |
| |
| .ff-inputstream.data::before, .ff-outputstream.data::before { |
| content: '\27E8\2219\2219\2219\27E9'; |
| font-size: 1.15rem; |
| line-height: 1.17; |
| letter-spacing: -0.3px; |
| } |
| |
| /* Filter Graphs */ |
| .cluster.ff-filters rect { |
| stroke-dasharray: 6 !important; |
| stroke-width: 1.3px; |
| stroke: #d1d1d1 !important; |
| filter: none !important; |
| } |
| |
| .cluster.ff-filters div.ff-filters .id { |
| display: none; |
| } |
| |
| .cluster.ff-filters div.ff-filters .name { |
| margin-right: 0.5rem; |
| font-size: 0.9rem; |
| } |
| |
| .cluster.ff-filters div.ff-filters .description { |
| font-weight: 400; |
| font-size: 0.75rem; |
| vertical-align: middle; |
| color: #777; |
| font-family: Cascadia Code, Lucida Console, monospace; |
| } |
| |
| /* Filter Shapes */ |
| .node.ff-filter rect { |
| rx: 10; |
| ry: 10; |
| stroke-width: 1px; |
| stroke: #d3d3d3; |
| fill: url(#ff-filtergradient); |
| filter: drop-shadow(1px 1px 2px rgba(0, 0, 0, 0.1)); |
| } |
| |
| .node.ff-filter .label foreignObject { |
| transform: translateY(-0.4rem); |
| overflow: visible; |
| } |
| |
| .nodeLabel div.ff-filter { |
| font-size: 1.0rem; |
| font-weight: 500; |
| text-transform: uppercase; |
| min-width: 5.5rem; |
| margin-bottom: 0.5rem; |
| } |
| |
| .nodeLabel div.ff-filter span { |
| color: inherit; |
| } |
| |
| /* Decoders & Encoders */ |
| .node.ff-decoder rect, .node.ff-encoder rect { |
| stroke-width: 1px; |
| stroke: #d3d3d3; |
| fill: url(#ff-filtergradient); |
| filter: drop-shadow(1px 1px 2px rgba(0, 0, 0, 0.1)); |
| } |
| |
| .nodeLabel div.ff-decoder, .nodeLabel div.ff-encoder { |
| font-size: 0.85rem; |
| font-weight: 500; |
| min-width: 3.5rem; |
| } |
| |
| /* Links and Arrows */ |
| path.flowchart-link[id|='video'] { |
| stroke: var(--ff-colvideo); |
| } |
| |
| path.flowchart-link[id|='audio'] { |
| stroke: var(--ff-colaudio); |
| } |
| |
| path.flowchart-link[id|='subtitle'] { |
| stroke: var(--ff-colsubtitle); |
| } |
| |
| marker.marker path { |
| fill: context-stroke; |
| } |
| |
| .edgeLabel foreignObject { |
| transform: translateY(-1rem); |
| } |
| |
| .edgeLabel p { |
| background: transparent; |
| white-space: nowrap; |
| margin: 1rem 0.5rem !important; |
| font-weight: 500; |
| color: var(--ff-coltext); |
| } |
| |
| .edgeLabel, .labelBkg { |
| background: transparent; |
| } |
| |
| .edgeLabels .edgeLabel * { |
| font-size: 0.8rem; |
| } |