When the CSS content is evaluated, it isn't in the context of a specific tiddler, but rather, in the context of the stylesheet tiddler, so the reference to {{!!color}} would only pick up the color value from a field on the stylesheet tiddler itself (i.e., {{currentTiddler!!color}}. In addition, the CSS rule for .tc-tiddler-frame is applied to all tiddlers, not just the current one. That is why Jeremy automatically generates the ".tc-tagged-SomeTag" class attributes for tiddlers. It provides a way to differentiate between tiddlers so that CSS rules can be selectively applied simply by adding a tag.
Without using tagging, the problem is a bit more complicated. You need to modify the core's ViewTemplate definition so that you can add your tiddler-specific custom classes to the tiddler frame directly. Something like this:
\define frame-classes()
tc-tiddler-frame tc-tiddler-view-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$ $(tiddlerTagClasses)$ $(tiddlerCustomClass)$
\end
<$set name="storyTiddler" value=<<currentTiddler>>><$set name="tiddlerInfoState" value=<<qualify "$:/state/popup/tiddler-info">>><$tiddler tiddler=<<currentTiddler>>>
<$set name="tiddlerCustomClass" value={{!!class}}><!--ADDED-->
<div class=<<frame-classes>>><$list filter="[all[shadows+tiddlers]tag[$:/tags/ViewTemplate]!has[draft.of]]" variable="listItem"><$transclude tiddler=<<listItem>>/></$list>
</div>
</$set><!--ADDED-->
</$tiddler></$set></$set>
1) added <$set name="tiddlerCustomClass" ...> to fetch the value of the "class" field from the current tiddler
2) added $(tiddlerCustomClass)$ to frameclasses macro definition
With this in place, you can then apply custom CSS classes on a per tiddler basis simply by adding a "class" field to that tiddler.
enjoy,
-e