diff --git a/front/vue/components/DiploLine.vue b/front/vue/components/DiploLine.vue
index 8b94b6f21f7214ecfb4067de5a7aec14f65549e3..02b46fc285281bdaea83c9595a66277f879c02c9 100644
--- a/front/vue/components/DiploLine.vue
+++ b/front/vue/components/DiploLine.vue
@@ -25,6 +25,21 @@ export default Vue.extend({
             this.$parent.appendLine();
             if (this.line.currentTrans) this.setElContent(this.line.currentTrans.content);
         }.bind(this));
+
+        // load colors, regarding user profile and/or region types
+        let beSettings = userProfile.get("baseline-editor-" + this.$store.state.document.id) || {};
+        this.regionColors = beSettings["color-regions"] || {};  //  if a coloring attribute exists, will use it
+        this.regionTypes =  this.$store.state.document.types.regions.map((t) => t.name);
+
+        // or, create region colors using the same algorithm than for segmentation panel for regions:
+        let basicColor = '#11FF76';    // same value used from baseline-editor.js
+        for (let index in this.regionTypes) {
+            let type = this.regionTypes[index];
+            if (this.regionColors[type] == null) {
+                this.regionColors[type] = this.changeHue(basicColor, 3*(index+1));
+            }
+        }
+
     },
     beforeDestroy() {
         let el = this.getEl();
@@ -54,13 +69,204 @@ export default Vue.extend({
         setElContent(content) {
             let line = this.getEl();
             if (line) line.textContent = content;
+
+            // additional code to set/display background-colors when some lines are linked to some specific region type:
+            let regionType = this.getRegionType();  //  return the string of the type / null when no region linked
+            if(regionType != null){
+                let rgb = this.regionColors[regionType];
+                let r = rgb[0];
+                let g = rgb[1];
+                let b = rgb[2];
+                let hexa = this.rgb2hex(r,g,b);
+                let cmyk = this.rgb2cmyk(r,g,b);
+                cmyk = 'cmyk('+cmyk.c+', '+cmyk.m+', '+cmyk.y+', '+cmyk.k+')';   // would give better results and nearest to svg colors but not working
+                rgb = "rgb("+r+"," +g+ ","+b+")";
+
+                // desaturate colors: more suitable for backgrounuds when reading
+                let sat = 0.6;
+                var gray = r * 0.3086 + g * 0.6094 + b * 0.0820;
+
+                r = Math.round(r * sat + gray * (1-sat));
+                g = Math.round(g * sat + gray * (1-sat));
+                b = Math.round(b * sat + gray * (1-sat));
+
+                let rgba = "rgba("+r+"," +g+ ","+b+", 0.2)";
+
+                line.style.backgroundColor = rgba;  //  possible values: hexa,rgb,rgba (allows opacity),(cmyk)
+                // to display the region type by the nav when mouseoverring: - 
+                // - could next do this in a more accurate way: 
+                // maybe display a semi-transparent fixed div, disappearing after few second and reappearing when scrolling, for example -
+                line.title = regionType;
+            }
+
         },
         getRegion() {
             return this.$store.state.regions.all.findIndex(r => r.pk == this.line.region);
+        },
+        getRegionType() {
+            let regions = this.$store.state.regions.all;
+            for(var i = 0; i < regions.length; i++)
+            {
+                var r = regions[i];
+                if(r.pk == this.line.region){
+                    return r.type;
+                }
+            }
+            return null;    //  no linked region type has been found
+        },
+        // coloring computation methods (one sample from basline-editor methods):
+        changeHue(rgb, degree) {
+            // exepcts a string and returns an object
+            function rgbToHSL(rgb) {
+                // strip the leading # if it's there
+                rgb = rgb.replace(/^\s*#|\s*$/g, '');
+
+                // convert 3 char codes --> 6, e.g. `E0F` --> `EE00FF`
+                if(rgb.length == 3){
+                    rgb = rgb.replace(/(.)/g, '$1$1');
+                }
+
+                var r = parseInt(rgb.substr(0, 2), 16) / 255,
+                    g = parseInt(rgb.substr(2, 2), 16) / 255,
+                    b = parseInt(rgb.substr(4, 2), 16) / 255,
+                    cMax = Math.max(r, g, b),
+                    cMin = Math.min(r, g, b),
+                    delta = cMax - cMin,
+                    l = (cMax + cMin) / 2,
+                    h = 0,
+                    s = 0;
+
+                if (delta == 0) {
+                    h = 0;
+                }
+                else if (cMax == r) {
+                    h = 60 * (((g - b) / delta) % 6);
+                }
+                else if (cMax == g) {
+                    h = 60 * (((b - r) / delta) + 2);
+                }
+                else {
+                    h = 60 * (((r - g) / delta) + 4);
+                }
+
+                if (delta == 0) {
+                    s = 0;
+                }
+                else {
+                    s = (delta/(1-Math.abs(2*l - 1)))
+                }
+
+                return {
+                    h: h,
+                    s: s,
+                    l: l
+                }
+            }
+
+            // expects an object and returns a string
+            function hslToRGB(hsl) {
+                var h = hsl.h,
+                    s = hsl.s,
+                    l = hsl.l,
+                    c = (1 - Math.abs(2*l - 1)) * s,
+                    x = c * ( 1 - Math.abs((h / 60 ) % 2 - 1 )),
+                    m = l - c/ 2,
+                    r, g, b;
+
+                if (h < 60) {
+                    r = c;
+                    g = x;
+                    b = 0;
+                }
+                else if (h < 120) {
+                    r = x;
+                    g = c;
+                    b = 0;
+                }
+                else if (h < 180) {
+                    r = 0;
+                    g = c;
+                    b = x;
+                }
+                else if (h < 240) {
+                    r = 0;
+                    g = x;
+                    b = c;
+                }
+                else if (h < 300) {
+                    r = x;
+                    g = 0;
+                    b = c;
+                }
+                else {
+                    r = c;
+                    g = 0;
+                    b = x;
+                }
+
+                r = normalize_rgb_value(r, m);
+                g = normalize_rgb_value(g, m);
+                b = normalize_rgb_value(b, m);
+
+                // return rgb2hex(r,g,b);
+                return [r,g,b];
+            }
+
+            function normalize_rgb_value(color, m) {
+                color = Math.floor((color + m) * 255);
+                if (color < 0) {
+                    color = 0;
+                }
+                return color;
+            }
+
+            var hsl = rgbToHSL(rgb);
+            hsl.h += degree;
+            if (hsl.h > 360) {
+                hsl.h -= 360;
+            }
+            else if (hsl.h < 0) {
+                hsl.h += 360;
+            }
+            return hslToRGB(hsl);
+        },
+
+        rgb2hex(r, g, b) {
+            return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
+        },
+
+        rgb2cmyk(r, g, b, normalized){
+            var c = 1 - (r / 255);
+            var m = 1 - (g / 255);
+            var y = 1 - (b / 255);
+            var k = Math.min(c, Math.min(m, y));
+            
+            c = (c - k) / (1 - k);
+            m = (m - k) / (1 - k);
+            y = (y - k) / (1 - k);
+            
+            if(!normalized){
+                c = Math.round(c * 10000) / 100;
+                m = Math.round(m * 10000) / 100;
+                y = Math.round(y * 10000) / 100;
+                k = Math.round(k * 10000) / 100;
+            }
+            
+            c = isNaN(c) ? 0 : c;
+            m = isNaN(m) ? 0 : m;
+            y = isNaN(y) ? 0 : y;
+            k = isNaN(k) ? 0 : k;
+            
+            return {
+                c: Math.round(c)+'%',
+                m: Math.round(m)+'%',
+                y: Math.round(y)+'%',
+                k: Math.round(k)+'%'
+            }
         }
     }
 });
 </script>
 
 <style scoped>
-</style>
\ No newline at end of file
+</style>