#!/usr/bin/perl -w

use warnings;
use strict;

while(<>)
{
    s/\ +/\ /g;                           # remove extra white space
    s/\t+//g;                             # remove all tabs
    s/:\s+/:/g;                           # remove white space after colons
    s/;\s+/;/g;                           # remove white space after semicolons
    s/{\s+/{/g;                           # remove white space after opening brace  
    s/\s+}/}/g;                           # remove white space before closing brace  
    s/(\w)}/$1;}/g;                       # make sure there's a semicolon before the closing brace
    s/{([-: \(\)#\w\.\/]+);/{\r\t$1;/g;   # add line break after selector
    s/;/;\r\t/g;                          # space out the rules
    s/:/: /g;                             # add space after colon;
    s/: link/:link/g;                     # remove space after colon for pseudo-link;
    s/: visited/:visited/g;               # remove space after colon for pseudo-link;
    s/: hover/:hover/g;                   # remove space after colon for pseudo-link;
    s/: active/:active/g;                 # remove space after colon for pseudo-link;
    s/: focus/:focus/g;                   # remove space after colon for pseudo-link;
    s/: lang/:lang/g;                     # remove space after colon for pseudo-link;
    s/: before/:before/g;                 # remove space after colon for pseudo-link;
    s/: after/:after/g;                   # remove space after colon for pseudo-link;
    s/: first-letter/:first-letter/g;     # remove space after colon for pseudo-link;
    s/: first-line/:first-line/g;         # remove space after colon for pseudo-link;
    s/: first-child/:first-child/g;       # remove space after colon for pseudo-link;
    s/}[\s]+/}\r\r/g;                     # at least 1 return after close of rule
#   s/\t}/}/g;                            # if you like the closing brace flush
    print $_;
}